From ccdb0a345886730078ae421e0f76dc6df1ffd844 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 14 Nov 2016 11:07:09 +0100 Subject: [PATCH 1/2] Update web-platform-tests to revision e8bfc205e36ad699601212cd50083870bad9a75d --- ...fillStyle.parse.css-color-4-hsl-1.html.ini | 5 + ...fillStyle.parse.css-color-4-hsl-2.html.ini | 5 + ...fillStyle.parse.css-color-4-hsl-3.html.ini | 5 + ...fillStyle.parse.css-color-4-hsl-4.html.ini | 5 + ...fillStyle.parse.css-color-4-hsl-5.html.ini | 5 + ...fillStyle.parse.css-color-4-hsl-6.html.ini | 5 + ...fillStyle.parse.css-color-4-hsl-7.html.ini | 5 + ...fillStyle.parse.css-color-4-hsl-8.html.ini | 5 + ...fillStyle.parse.css-color-4-hsl-9.html.ini | 5 + ...illStyle.parse.css-color-4-hsla-1.html.ini | 5 + ...illStyle.parse.css-color-4-hsla-2.html.ini | 5 + ...illStyle.parse.css-color-4-hsla-3.html.ini | 5 + ...illStyle.parse.css-color-4-hsla-4.html.ini | 5 + ...illStyle.parse.css-color-4-hsla-5.html.ini | 5 + ...illStyle.parse.css-color-4-hsla-6.html.ini | 5 + ...illStyle.parse.css-color-4-hsla-7.html.ini | 5 + ...illStyle.parse.css-color-4-hsla-8.html.ini | 5 + ...illStyle.parse.css-color-4-hsla-9.html.ini | 5 + ...fillStyle.parse.css-color-4-rgb-1.html.ini | 5 + ...fillStyle.parse.css-color-4-rgb-2.html.ini | 5 + ...fillStyle.parse.css-color-4-rgb-3.html.ini | 5 + ...fillStyle.parse.css-color-4-rgb-4.html.ini | 5 + ...fillStyle.parse.css-color-4-rgb-5.html.ini | 5 + ...fillStyle.parse.css-color-4-rgb-6.html.ini | 5 + ...illStyle.parse.css-color-4-rgba-1.html.ini | 5 + ...illStyle.parse.css-color-4-rgba-3.html.ini | 5 + ...illStyle.parse.css-color-4-rgba-4.html.ini | 5 + ...illStyle.parse.css-color-4-rgba-5.html.ini | 5 + ...illStyle.parse.css-color-4-rgba-6.html.ini | 5 + .../line-styles/setLineDash.html.ini | 8 + .../FileAPI/FileReaderSync.worker.js.ini | 2 +- .../metadata/FileAPI/idlharness.worker.js.ini | 55 +- tests/wpt/metadata/MANIFEST.json | 3351 ++++- .../derive_bits_keys/ecdh_bits.worker.js.ini | 2 +- .../derive_bits_keys/ecdh_keys.worker.js.ini | 2 +- .../derive_bits_keys/hkdf.worker.js.ini | 2 +- .../derive_bits_keys/pbkdf2.worker.js.ini | 2 +- .../WebCryptoAPI/digest/digest.worker.js.ini | 2 +- .../encrypt_decrypt/aes_cbc.worker.js.ini | 2 +- .../encrypt_decrypt/aes_ctr.worker.js.ini | 2 +- .../encrypt_decrypt/aes_gcm.worker.js.ini | 2 +- .../encrypt_decrypt/rsa.worker.js.ini | 2 +- .../generateKey/failures.worker.js.ini | 2 +- .../failures_AES-CBC.worker.js.ini | 2 +- .../failures_AES-CTR.worker.js.ini | 2 +- .../failures_AES-GCM.worker.js.ini | 2 +- .../generateKey/failures_AES-KW.worker.js.ini | 2 +- .../generateKey/failures_ECDH.worker.js.ini | 2 +- .../generateKey/failures_ECDSA.worker.js.ini | 2 +- .../generateKey/failures_HMAC.worker.js.ini | 2 +- .../failures_RSA-OAEP.worker.js.ini | 2 +- .../failures_RSA-PSS.worker.js.ini | 2 +- .../failures_RSASSA-PKCS1-v1_5.worker.js.ini | 2 +- .../generateKey/successes.worker.js.ini | 2 +- .../successes_AES-CBC.worker.js.ini | 2 +- .../successes_AES-CTR.worker.js.ini | 2 +- .../successes_AES-GCM.worker.js.ini | 2 +- .../successes_AES-KW.worker.js.ini | 2 +- .../generateKey/successes_ECDH.worker.js.ini | 2 +- .../generateKey/successes_ECDSA.worker.js.ini | 2 +- .../generateKey/successes_HMAC.worker.js.ini | 2 +- .../successes_RSA-OAEP.worker.js.ini | 2 +- .../successes_RSA-PSS.worker.js.ini | 2 +- .../successes_RSASSA-PKCS1-v1_5.worker.js.ini | 2 +- .../WebCryptoAPI/idlharness.worker.js.ini | 8 +- .../import_export/ec_importKey.worker.js.ini | 2 +- .../import_export/rsa_importKey.worker.js.ini | 3 +- .../symmetric_importKey.worker.js.ini | 2 +- .../sign_verify/ecdsa.worker.js.ini | 2 +- .../sign_verify/hmac.worker.js.ini | 2 +- .../sign_verify/rsa_pkcs.worker.js.ini | 2 +- .../sign_verify/rsa_pss.worker.js.ini | 2 +- .../wrapKey_unwrapKey.worker.js.ini | 2 +- .../metadata/WebIDL/current-realm.html.ini | 95 + .../constructor-object.worker.js.ini | 2 +- .../XMLHttpRequest/abort-during-open.htm.ini | 5 + .../abort-during-open.worker.js.ini | 5 + .../XMLHttpRequest/abort-event-abort.htm.ini | 5 + .../XMLHttpRequest/responsexml-basic.htm.ini | 3 - ...send-after-setting-document-domain.htm.ini | 3 + .../send-data-unexpected-tostring.htm.ini | 5 + .../XMLHttpRequest/send-usp.worker.js.ini | 3 - ...ection-supported-property-indices.html.ini | 9 + ...llection-supported-property-names.html.ini | 5 + .../dom/events/Event-dispatch-click.html.ini | 24 + .../DOMImplementation-createDocument.html.ini | 14 + .../dom/nodes/Document-createElement.html.ini | 251 + .../nodes/Document-createElementNS.html.ini | 596 + .../dom/nodes/Element-matches.html.ini | 66 + .../ParentNode-querySelector-All-xht.xht.ini | 156 + .../ParentNode-querySelector-All.html.ini | 156 + .../Range-mutations-appendChild.html.ini | 107 + .../Range-mutations-appendData.html.ini | 578 + ...ni => Range-mutations-dataChange.html.ini} | 4229 +----- .../Range-mutations-deleteData.html.ini | 848 ++ .../Range-mutations-insertBefore.html.ini | 116 + .../Range-mutations-insertData.html.ini | 575 + .../Range-mutations-removeChild.html.ini | 32 + .../Range-mutations-replaceChild.html.ini | 92 + .../Range-mutations-replaceData.html.ini | 1721 +++ .../ranges/Range-mutations-splitText.html.ini | 176 + .../createContextualFragment.html.ini | 3 + .../metadata/domparsing/innerhtml-02.html.ini | 5 - .../textdecoder-fatal-single-byte.html.ini | 5 + .../eventsource-onmessage-realm.htm.ini | 5 + .../metadata/eventsource/interfaces.html.ini | 1 + .../eventsource/request-cache-control.htm.ini | 1 + .../fetch/api/basic/conditional-get.html.ini | 5 + .../api/basic/error-after-response.html.ini | 8 + .../api/basic/integrity-sharedworker.html.ini | 3 + .../api/basic/request-headers-worker.html.ini | 3 + .../fetch/api/basic/request-headers.html.ini | 3 + .../api/basic/request-upload-worker.html.ini | 20 + .../fetch/api/basic/request-upload.html.ini | 20 + .../api/basic/scheme-data-worker.html.ini | 6 + .../fetch/api/basic/scheme-data.html.ini | 6 + .../fetch/api/basic/text-utf8.html.ini | 30 + .../api/cors/cors-cookies-worker.html.ini | 1 + .../fetch/api/cors/cors-cookies.html.ini | 1 + .../cors-preflight-redirect-worker.html.ini | 32 + .../api/cors/cors-preflight-redirect.html.ini | 32 + .../cors-preflight-status-worker.html.ini | 83 + .../api/cors/cors-preflight-status.html.ini | 83 + .../api/cors/cors-redirect-worker.html.ini | 63 + .../fetch/api/cors/cors-redirect.html.ini | 63 + .../redirect/redirect-count-worker.html.ini | 27 + .../api/redirect/redirect-count.html.ini | 27 + .../redirect/redirect-origin-worker.html.ini | 10 +- .../api/redirect/redirect-origin.html.ini | 10 +- .../multi-globals/url-parsing.html.ini | 5 + ...request-cache-default-conditional.html.ini | 39 + .../request/request-cache-default.html.ini | 8 + .../request-cache-force-cache.html.ini | 20 + .../request-cache-only-if-cached.html.ini | 44 + .../api/request/request-cache-reload.html.ini | 14 + .../fetch/api/request/request-cache.html.ini | 4 - .../request/request-consume-empty.html.ini | 6 + .../multi-globals/url-parsing.html.ini | 5 + .../api/response/response-clone.html.ini | 33 + .../response/response-consume-empty.html.ini | 9 + .../response/response-consume-stream.html.ini | 3 + .../api/response/response-consume.html.ini | 57 + .../wpt/metadata/hr-time/basic.worker.js.ini | 2 +- .../wpt/metadata/hr-time/idlharness.html.ini | 14 + .../history_go_to_uri.html.ini | 5 + ...e_session_history_unload_prompt_1.html.ini | 5 - .../location-prototype-setting.html.ini | 5 + .../location_hash.html.ini | 3 + ...ub.htm.ini => security_location_0.htm.ini} | 2 +- .../sandbox-allow-same-origin.html.ini | 6 + .../sandboxing/sandbox-allow-scripts.html.ini | 6 + .../sandbox-disallow-same-origin.html.ini | 6 + .../named-objects.html.ini | 3 + ....sub.html.ini => window-security.html.ini} | 2 +- .../window-open-noopener.html.ini | 6 + ...ent.sub.html.ini => frameElement.html.ini} | 5 +- ...s-origin-nested-browsing-contexts.html.ini | 3 + ...igin-nested-browsing-contexts.sub.html.ini | 6 - ...ml.ini => Document.currentScript.html.ini} | 8 +- .../document.forms.html.ini | 5 - .../wpt/metadata/html/dom/interfaces.html.ini | 121 +- .../html/dom/reflection-embedded.html.ini | 11118 ++++++++++++++++ .../html/dom/reflection-forms.html.ini | 7611 +++++++++++ .../html/dom/reflection-grouping.html.ini | 6102 +++++++++ .../html/dom/reflection-metadata.html.ini | 2634 ++++ .../html/dom/reflection-misc.html.ini | 5283 ++++++++ .../html/dom/reflection-obsolete.html.ini | 5436 ++++++++ .../html/dom/reflection-sections.html.ini | 6345 +++++++++ .../html/dom/reflection-tabular.html.ini | 9012 +++++++++++++ .../html/dom/reflection-text.html.ini | 10659 +++++++++++++++ .../collections/htmlallcollection.html.ini | 93 + .../iframe-append-to-child-document.html.ini | 5 + ...iframe_sandbox_popups_escaping-1.html.ini} | 2 +- .../iframe_sandbox_popups_escaping-2.html.ini | 6 + .../iframe_sandbox_popups_escaping-3.html.ini | 6 + ...ame_sandbox_popups_nonescaping-1.html.ini} | 2 +- ...rame_sandbox_popups_nonescaping-2.html.ini | 6 + ...rame_sandbox_popups_nonescaping-3.html.ini | 6 + .../the-img-element/data-url.html.ini | 3 + .../the-img-element/usemap-casing.html.ini | 11 + .../the-object-element/usemap-casing.html.ini | 8 + .../form-validation-checkValidity.html.ini | 30 + .../form-validation-reportValidity.html.ini | 36 + .../form-indexed-element.html.ini | 5 + .../the-form-element/form-nameditem.html.ini | 6 + .../radio-groupname-case.html.ini | 21 + ...-reftest-list-owner-skip-no-boxes.html.ini | 3 + .../the-ol-element/grouping-ol.html.ini | 15 + .../htmlanchorelement_noopener.html.ini | 6 + .../script-onerror-insertion-point-1.html.ini | 6 + .../script-onerror-insertion-point-2.html.ini | 6 + .../script-onload-insertion-point.html.ini | 6 + .../the-table-element/remove-row.html.ini | 5 + .../callback-exception.html.ini | 5 + .../idle-callbacks/callback-iframe.html.ini | 5 + .../idle-callbacks/callback-invoked.html.ini | 5 + .../callback-multiple-calls.html.ini | 8 + .../idle-callbacks/callback-timeout.html.ini | 5 + .../idle-callbacks/cancel-invoked.html.ini | 8 + .../idle-callbacks/idlharness.html.ini | 20 + .../messageevent-constructor.https.html.ini | 3 + tests/wpt/metadata/mozilla-sync | 2 +- ...rotocol.keep-origin-redirect.http.html.ini | 3 +- ...nsecure-protocol.no-redirect.http.html.ini | 3 +- ...rotocol.swap-origin-redirect.http.html.ini | 3 +- ...generic.keep-origin-redirect.http.html.ini | 6 + .../img-tag/generic.no-redirect.http.html.ini | 6 + ...generic.swap-origin-redirect.http.html.ini | 6 + ...nsecure.keep-origin-redirect.http.html.ini | 3 +- ...-origin-insecure.no-redirect.http.html.ini | 3 +- ...nsecure.swap-origin-redirect.http.html.ini | 3 +- ...generic.keep-origin-redirect.http.html.ini | 3 +- .../img-tag/generic.no-redirect.http.html.ini | 3 +- ...generic.swap-origin-redirect.http.html.ini | 3 +- ...generic.keep-origin-redirect.http.html.ini | 3 +- .../img-tag/generic.no-redirect.http.html.ini | 3 +- ...generic.swap-origin-redirect.http.html.ini | 3 +- ...generic.keep-origin-redirect.http.html.ini | 3 +- .../img-tag/generic.no-redirect.http.html.ini | 3 +- ...generic.swap-origin-redirect.http.html.ini | 3 +- ...nsecure.keep-origin-redirect.http.html.ini | 3 +- ...-origin-insecure.no-redirect.http.html.ini | 3 +- ...nsecure.swap-origin-redirect.http.html.ini | 6 + ...nsecure.keep-origin-redirect.http.html.ini | 3 +- ...-origin-insecure.no-redirect.http.html.ini | 3 +- ...nsecure.swap-origin-redirect.http.html.ini | 6 + ...nsecure.keep-origin-redirect.http.html.ini | 3 +- ...-origin-insecure.no-redirect.http.html.ini | 3 +- ...nsecure.swap-origin-redirect.http.html.ini | 6 + ...nsecure.keep-origin-redirect.http.html.ini | 3 +- .../same-insecure.no-redirect.http.html.ini | 3 +- ...nsecure.swap-origin-redirect.http.html.ini | 3 +- ...nsecure.keep-origin-redirect.http.html.ini | 3 +- .../same-insecure.no-redirect.http.html.ini | 3 +- ...nsecure.swap-origin-redirect.http.html.ini | 3 +- ...nsecure.keep-origin-redirect.http.html.ini | 3 +- .../same-insecure.no-redirect.http.html.ini | 3 +- ...nsecure.swap-origin-redirect.http.html.ini | 3 +- ...rotocol.keep-origin-redirect.http.html.ini | 3 +- ...nsecure-protocol.no-redirect.http.html.ini | 3 +- ...rotocol.swap-origin-redirect.http.html.ini | 3 +- ...rotocol.keep-origin-redirect.http.html.ini | 3 +- ...nsecure-protocol.no-redirect.http.html.ini | 3 +- ...rotocol.swap-origin-redirect.http.html.ini | 3 +- ...rotocol.keep-origin-redirect.http.html.ini | 3 +- ...nsecure-protocol.no-redirect.http.html.ini | 3 +- ...rotocol.swap-origin-redirect.http.html.ini | 3 +- ...generic.keep-origin-redirect.http.html.ini | 3 +- .../img-tag/generic.no-redirect.http.html.ini | 3 +- ...generic.swap-origin-redirect.http.html.ini | 3 +- .../metadata/url/a-element-xhtml.xhtml.ini | 8 + tests/wpt/metadata/url/a-element.html.ini | 8 + .../wpt/metadata/url/url-constructor.html.ini | 8 + tests/wpt/metadata/url/url-setters.html.ini | 381 + .../multi-globals/message-received.html.ini | 8 + ...tedWorkerGlobalScope-members.worker.js.ini | 2 +- .../expected-self-properties.worker.js.ini | 3 +- .../metadata/workers/data-url-shared.html.ini | 5 + .../metadata/workers/interfaces.worker.js.ini | 72 +- .../navigator/window-only.worker.js.ini | 11 - .../interface-objects/001.worker.js.ini | 15 +- .../interface-objects/002.worker.js.ini | 2 +- tests/wpt/mozilla/meta/MANIFEST.json | 2 +- .../wpt/mozilla/meta/css/matchMedia.html.ini | 1 - tests/wpt/web-platform-tests/.gitignore | 1 + tests/wpt/web-platform-tests/.travis.yml | 50 +- .../2d.composite.globalAlpha.canvascopy.html | 40 + .../2d.fillStyle.parse.css-color-4-hsl-1.html | 31 + .../2d.fillStyle.parse.css-color-4-hsl-1.png | Bin 0 -> 205 bytes .../2d.fillStyle.parse.css-color-4-hsl-2.html | 31 + .../2d.fillStyle.parse.css-color-4-hsl-2.png | Bin 0 -> 221 bytes .../2d.fillStyle.parse.css-color-4-hsl-3.html | 31 + .../2d.fillStyle.parse.css-color-4-hsl-3.png | Bin 0 -> 221 bytes .../2d.fillStyle.parse.css-color-4-hsl-4.html | 31 + .../2d.fillStyle.parse.css-color-4-hsl-4.png | Bin 0 -> 221 bytes .../2d.fillStyle.parse.css-color-4-hsl-5.html | 31 + .../2d.fillStyle.parse.css-color-4-hsl-5.png | Bin 0 -> 221 bytes .../2d.fillStyle.parse.css-color-4-hsl-6.html | 31 + .../2d.fillStyle.parse.css-color-4-hsl-6.png | Bin 0 -> 205 bytes .../2d.fillStyle.parse.css-color-4-hsl-7.html | 31 + .../2d.fillStyle.parse.css-color-4-hsl-7.png | Bin 0 -> 205 bytes .../2d.fillStyle.parse.css-color-4-hsl-8.html | 31 + .../2d.fillStyle.parse.css-color-4-hsl-8.png | Bin 0 -> 205 bytes .../2d.fillStyle.parse.css-color-4-hsl-9.html | 31 + .../2d.fillStyle.parse.css-color-4-hsl-9.png | Bin 0 -> 205 bytes ...2d.fillStyle.parse.css-color-4-hsla-1.html | 31 + .../2d.fillStyle.parse.css-color-4-hsla-1.png | Bin 0 -> 205 bytes ...2d.fillStyle.parse.css-color-4-hsla-2.html | 31 + .../2d.fillStyle.parse.css-color-4-hsla-2.png | Bin 0 -> 221 bytes ...2d.fillStyle.parse.css-color-4-hsla-3.html | 31 + .../2d.fillStyle.parse.css-color-4-hsla-3.png | Bin 0 -> 221 bytes ...2d.fillStyle.parse.css-color-4-hsla-4.html | 31 + .../2d.fillStyle.parse.css-color-4-hsla-4.png | Bin 0 -> 221 bytes ...2d.fillStyle.parse.css-color-4-hsla-5.html | 31 + .../2d.fillStyle.parse.css-color-4-hsla-5.png | Bin 0 -> 221 bytes ...2d.fillStyle.parse.css-color-4-hsla-6.html | 31 + .../2d.fillStyle.parse.css-color-4-hsla-6.png | Bin 0 -> 205 bytes ...2d.fillStyle.parse.css-color-4-hsla-7.html | 31 + .../2d.fillStyle.parse.css-color-4-hsla-7.png | Bin 0 -> 205 bytes ...2d.fillStyle.parse.css-color-4-hsla-8.html | 31 + .../2d.fillStyle.parse.css-color-4-hsla-8.png | Bin 0 -> 205 bytes ...2d.fillStyle.parse.css-color-4-hsla-9.html | 31 + .../2d.fillStyle.parse.css-color-4-hsla-9.png | Bin 0 -> 205 bytes .../2d.fillStyle.parse.css-color-4-rgb-1.html | 31 + .../2d.fillStyle.parse.css-color-4-rgb-1.png | Bin 0 -> 205 bytes .../2d.fillStyle.parse.css-color-4-rgb-2.html | 31 + .../2d.fillStyle.parse.css-color-4-rgb-2.png | Bin 0 -> 221 bytes .../2d.fillStyle.parse.css-color-4-rgb-3.html | 31 + .../2d.fillStyle.parse.css-color-4-rgb-3.png | Bin 0 -> 221 bytes .../2d.fillStyle.parse.css-color-4-rgb-4.html | 31 + .../2d.fillStyle.parse.css-color-4-rgb-4.png | Bin 0 -> 205 bytes .../2d.fillStyle.parse.css-color-4-rgb-5.html | 31 + .../2d.fillStyle.parse.css-color-4-rgb-5.png | Bin 0 -> 221 bytes .../2d.fillStyle.parse.css-color-4-rgb-6.html | 31 + .../2d.fillStyle.parse.css-color-4-rgb-6.png | Bin 0 -> 221 bytes ...2d.fillStyle.parse.css-color-4-rgba-1.html | 31 + .../2d.fillStyle.parse.css-color-4-rgba-1.png | Bin 0 -> 205 bytes ...2d.fillStyle.parse.css-color-4-rgba-2.html | 31 + .../2d.fillStyle.parse.css-color-4-rgba-2.png | Bin 0 -> 221 bytes ...2d.fillStyle.parse.css-color-4-rgba-3.html | 31 + .../2d.fillStyle.parse.css-color-4-rgba-3.png | Bin 0 -> 221 bytes ...2d.fillStyle.parse.css-color-4-rgba-4.html | 31 + .../2d.fillStyle.parse.css-color-4-rgba-4.png | Bin 0 -> 205 bytes ...2d.fillStyle.parse.css-color-4-rgba-5.html | 31 + .../2d.fillStyle.parse.css-color-4-rgba-5.png | Bin 0 -> 221 bytes ...2d.fillStyle.parse.css-color-4-rgba-6.html | 31 + .../2d.fillStyle.parse.css-color-4-rgba-6.png | Bin 0 -> 221 bytes ...Style.parse.invalid.css-color-4-hsl-1.html | 31 + ...Style.parse.invalid.css-color-4-hsl-2.html | 31 + ...tyle.parse.invalid.css-color-4-hsl-3.html} | 6 +- ...tyle.parse.invalid.css-color-4-hsl-4.html} | 6 +- ...Style.parse.invalid.css-color-4-hsl-5.html | 31 + ...tyle.parse.invalid.css-color-4-hsla-1.html | 31 + ...tyle.parse.invalid.css-color-4-hsla-2.html | 31 + ...tyle.parse.invalid.css-color-4-hsla-3.html | 31 + ...Style.parse.invalid.css-color-4-rgb-1.html | 31 + ...tyle.parse.invalid.css-color-4-rgb-2.html} | 6 +- ...Style.parse.invalid.css-color-4-rgb-3.html | 31 + ...tyle.parse.invalid.css-color-4-rgb-4.html} | 6 +- ...Style.parse.invalid.css-color-4-rgb-5.html | 31 + ...tyle.parse.invalid.css-color-4-rgba-1.html | 31 + ...yle.parse.invalid.css-color-4-rgba-2.html} | 6 +- ...tyle.parse.invalid.css-color-4-rgba-3.html | 31 + .../2d.fillStyle.parse.invalid.hsl-5.html | 2 +- .../2d.fillStyle.parse.invalid.hsl-6.html | 2 +- ...=> 2d.fillStyle.parse.invalid.hsla-3.html} | 6 +- .../2d.fillStyle.parse.invalid.rgb-1.html | 2 +- .../2d.fillStyle.parse.invalid.rgb-2.html | 2 +- .../2d.fillStyle.parse.invalid.rgb-3.html | 2 +- .../2d.fillStyle.parse.invalid.rgba-1.html | 2 +- .../2d.fillStyle.parse.invalid.rgba-2.html | 2 +- .../2d.fillStyle.parse.invalid.rgba-3.html | 2 +- .../2d.fillStyle.parse.invalid.rgba-4.html | 2 +- .../2d.fillStyle.parse.invalid.rgba-5.html | 2 +- .../2dcontext/line-styles/setLineDash.html | 104 + .../2d.path.lineTo.nonfinite.details.html | 31 + .../2dcontext/tools/tests2d.yaml | 112 +- ...sor-continuePrimaryKey-exception-order.htm | 382 + .../IndexedDB/idbindex-rename-abort.html | 110 + .../IndexedDB/idbindex-rename-errors.html | 130 + .../IndexedDB/idbindex-rename.html | 298 + .../idbobjectstore-rename-abort.html | 120 + .../idbobjectstore-rename-errors.html | 118 + .../idbobjectstore-rename-store.html | 366 + .../IndexedDB/interfaces.html | 4 +- .../IndexedDB/interfaces.idl | 13 +- .../IndexedDB/interfaces.worker.js | 6 +- .../IndexedDB/support-promises.js | 200 + .../transaction-abort-generator-revert.html | 108 + ...ansaction-abort-index-metadata-revert.html | 276 + ...action-abort-multiple-metadata-revert.html | 291 + ...on-abort-object-store-metadata-revert.html | 233 + .../wrapKey_unwrapKey.worker.js | 1 + .../WebIDL/current-realm.html | 145 + .../XMLHttpRequest/abort-after-send.htm | 39 +- .../XMLHttpRequest/abort-during-open.js | 4 +- .../XMLHttpRequest/abort-during-upload.htm | 2 +- .../XMLHttpRequest/abort-event-abort.htm | 5 +- .../XMLHttpRequest/abort-event-order.htm | 2 +- .../XMLHttpRequest/event-timeout-order.htm | 2 +- ... => event-upload-progress-crossorigin.htm} | 0 .../XMLHttpRequest/open-during-abort.htm | 1 + .../progress-events-response-data-gzip.htm | 28 +- ...after-setting-document-domain-window-1.htm | 23 + ...after-setting-document-domain-window-2.htm | 20 + ...r-setting-document-domain-window-helper.js | 29 + .../resources/xmlhttprequest-event-order.js | 59 +- .../XMLHttpRequest/responsexml-basic.htm | 2 +- .../responsexml-document-properties.htm | 4 +- .../send-after-setting-document-domain.htm | 47 +- .../send-blob-with-no-mime-type.html | 24 +- .../send-data-unexpected-tostring.htm | 5 +- ...rigin.sub.htm => send-non-same-origin.htm} | 0 .../send-response-event-order.htm | 37 +- .../annotation-model/CONTRIBUTING.md | 4 +- .../annotations/annotationMusts-manual.html | 5 +- .../annotationOptionals-manual.html | 5 +- .../annotations/annotationOptionals.test | 1 + .../annotationsAgentOptionals-manual.html | 5 +- .../annotationsAgentOptionals.test | 1 + .../3.2.4-targNoTypeTextualBody.json | 8 +- .../3.3.1-collectionCreatedImplemented.json | 17 + .../3.3.1-collectionCreatedValidated.json | 14 + .../3.3.1-collectionCreatorImplemented.json | 16 + .../3.3.1-collectionModifiedImplemented.json | 16 + .../3.3.1-collectionModifiedValidated.json | 14 + ...ollectionCreatorAgentEmailImplemented.json | 24 + ...tionCreatorAgentEmail_sha1Implemented.json | 24 + ...ectionCreatorAgentHomepageImplemented.json | 24 + ...2-collectionCreatorAgentIdImplemented.json | 24 + ...collectionCreatorAgentNameImplemented.json | 24 + ...ectionCreatorAgentNicknameImplemented.json | 24 + ...collectionCreatorAgentTypeImplemented.json | 24 + .../3.3.6-collectionRightsImplemented.json | 16 + .../3.3.6-collectionRightsValidated.json | 14 + .../5.1-collectionContextValidated.json | 20 + .../5.1-collectionFirstImplemented.json | 10 + .../5.1-collectionFirstValidated.json | 10 + .../5.1-collectionIdValidated.json | 11 + .../5.1-collectionLabelImplemented.json | 10 + .../5.1-collectionLabelValidated.json | 10 + .../5.1-collectionLastImplemented.json | 10 + .../5.1-collectionLastValidated.json | 10 + .../5.1-collectionTotalImplemented.json | 10 + .../5.1-collectionTotalValidated.json | 10 + .../5.1-collectionTypeValidated.json | 10 + .../collections/collectionMusts-manual.html | 49 + .../collections/collectionMusts.test | 19 + .../collectionOptionals-manual.html | 49 + .../collections/collectionOptionals.test | 24 + .../pages/3.3.1-pageCreatedImplemented.json | 37 + .../pages/3.3.1-pageCreatedValidated.json | 24 + .../pages/3.3.1-pageCreatorImplemented.json | 36 + .../pages/3.3.1-pageModifiedImplemented.json | 36 + .../pages/3.3.1-pageModifiedValidated.json | 24 + ....3.2-pageCreatorAgentEmailImplemented.json | 42 + ...pageCreatorAgentEmail_sha1Implemented.json | 42 + ...2-pageCreatorAgentHomepageImplemented.json | 42 + .../3.3.2-pageCreatorAgentIdImplemented.json | 43 + ...3.3.2-pageCreatorAgentNameImplemented.json | 42 + ...2-pageCreatorAgentNicknameImplemented.json | 45 + ...3.3.2-pageCreatorAgentTypeImplemented.json | 42 + .../pages/3.3.6-pageRightsImplemented.json | 31 + .../pages/3.3.6-pageRightsValidated.json | 24 + .../pages/5.2-pageContextValidated.json | 20 + .../pages/5.2-pageFirstImplemented.json | 25 + .../pages/5.2-pageFirstValidated.json | 23 + .../pages/5.2-pageIdValidated.json | 24 + .../pages/5.2-pageItemsValidated.json | 19 + .../pages/5.2-pageLabelImplemented.json | 23 + .../pages/5.2-pageLabelValidated.json | 23 + .../pages/5.2-pageLastImplemented.json | 23 + .../pages/5.2-pageLastValidated.json | 27 + .../pages/5.2-pageNextImplemented.json | 19 + .../pages/5.2-pageNextValidated.json | 23 + .../pages/5.2-pagePartOfImplemented.json | 19 + .../pages/5.2-pagePartOfValidated.json | 23 + .../pages/5.2-pagePrevImplemented.json | 19 + .../pages/5.2-pagePrevValidated.json | 23 + .../pages/5.2-pageStartIndexImplemented.json | 19 + .../pages/5.2-pageStartIndexValidated.json | 23 + .../pages/5.2-pageTotalImplemented.json | 23 + .../pages/5.2-pageTotalValidated.json | 23 + .../pages/5.2-pageTypeValidated.json | 19 + .../collections/pages/pageMusts-manual.html | 49 + .../collections/pages/pageMusts.test | 24 + .../pages/pageOptionals-manual.html | 49 + .../collections/pages/pageOptionals.test | 28 + .../definitions/bodyTarget.json | 512 +- .../definitions/choiceSet.json | 70 +- .../definitions/collections.json | 428 + .../definitions/otherProperties.json | 480 +- .../definitions/specificResource.json | 883 +- .../annotation-model/scripts/JSONtest.js | 64 +- .../annotations/annotation.options.headers | 1 - .../annotations/collection.options.headers | 1 - .../server/server-manual.html | 27 +- .../tools/protocol-server.py | 8 +- .../bluetooth/bluetooth-helpers.js | 147 + .../wpt/web-platform-tests/check_stability.py | 599 + tests/wpt/web-platform-tests/ci_lint.sh | 5 + tests/wpt/web-platform-tests/ci_stability.sh | 33 + .../wpt/web-platform-tests/common/dummy.xhtml | 2 + tests/wpt/web-platform-tests/common/dummy.xml | 1 + .../common/get-host-info.sub.js | 10 + .../webkit-text-fill-color-currentColor.html | 19 + .../web-platform-tests/config.default.json | 3 +- ...lid.html => animate-dom-01-f-isvalid.html} | 0 ...lid.html => animate-dom-02-f-isvalid.html} | 0 ...id.html => animate-elem-40-t-isvalid.html} | 0 ... => animate-script-elem-01-b-isvalid.html} | 0 ...l => animate-struct-dom-01-b-isvalid.html} | 0 ...html => conform-viewers-02-f-isvalid.html} | 0 ...alid.html => coords-dom-03-f-isvalid.html} | 0 ...html => interact-events-02-b-isvalid.html} | 0 ...tml => interact-pevents-01-b-isvalid.html} | 0 ...tml => interact-pevents-03-b-isvalid.html} | 0 ...tml => interact-pevents-05-b-isvalid.html} | 0 ...tml => interact-pevents-07-t-isvalid.html} | 0 ...tml => interact-pevents-08-f-isvalid.html} | 0 ...tml => interact-pevents-09-f-isvalid.html} | 0 ...tml => interact-pointer-01-t-isvalid.html} | 0 ...tml => interact-pointer-03-t-isvalid.html} | 0 ...id.html => masking-path-09-b-isvalid.html} | 0 ...valid.html => paths-dom-01-f-isvalid.html} | 0 ...valid.html => paths-dom-02-f-isvalid.html} | 0 ...lid.html => struct-cond-02-t-haswarn.html} | 0 ...alid.html => struct-dom-07-f-isvalid.html} | 0 ...alid.html => struct-dom-08-f-isvalid.html} | 0 ...alid.html => struct-dom-11-f-isvalid.html} | 0 ...alid.html => struct-dom-13-f-isvalid.html} | 0 ...alid.html => struct-dom-14-f-isvalid.html} | 0 ...alid.html => struct-dom-15-f-isvalid.html} | 0 ...alid.html => struct-dom-20-f-isvalid.html} | 0 ...alid.html => struct-use-13-f-isvalid.html} | 0 ...ovalid.html => text-dom-02-f-isvalid.html} | 0 ...ovalid.html => text-dom-05-f-isvalid.html} | 0 ...id.html => text-tselect-02-f-isvalid.html} | 0 ...id.html => text-tselect-03-f-isvalid.html} | 0 ...valid.html => types-dom-02-f-isvalid.html} | 0 ...valid.html => types-dom-03-b-isvalid.html} | 0 ...valid.html => types-dom-05-b-isvalid.html} | 0 ...valid.html => types-dom-07-f-isvalid.html} | 0 ...valid.html => types-dom-08-f-isvalid.html} | 0 .../html/elements/dd/dd-hgroup-isvalid.html | 5 + .../elements/dl/article-in-dt-novalid.html | 4 + .../html/elements/dl/aside-in-dt-novalid.html | 4 + .../elements/dl/dd-in-template-novalid.html | 4 + .../elements/dl/div-contains-dl-novalid.html | 4 + .../dl/div-contains-text-novalid.html | 4 + .../dl/div-multiple-groups-novalid.html | 4 + .../dl/div-splitting-groups-2-novalid.html | 4 + .../dl/div-splitting-groups-3-novalid.html | 4 + .../dl/div-splitting-groups-novalid.html | 4 + .../elements/dl/dl-contains-dl-novalid.html | 4 + .../dl/dl-contains-text-2-novalid.html | 4 + .../elements/dl/dl-contains-text-novalid.html | 4 + .../html/elements/dl/dl-in-p-novalid.html | 4 + .../html/elements/dl/dl-isvalid.html | 34 + .../elements/dl/dt-in-template-novalid.html | 4 + .../html/elements/dl/empty-div-2-novalid.html | 4 + .../html/elements/dl/empty-div-novalid.html | 4 + .../html/elements/dl/first-dd-novalid.html | 4 + .../elements/dl/footer-in-dt-novalid.html | 4 + .../html/elements/dl/h1-in-dt-novalid.html | 4 + .../html/elements/dl/h2-in-dt-novalid.html | 4 + .../html/elements/dl/h3-in-dt-novalid.html | 4 + .../html/elements/dl/h4-in-dt-novalid.html | 4 + .../html/elements/dl/h5-in-dt-novalid.html | 4 + .../html/elements/dl/h6-in-dt-novalid.html | 4 + .../elements/dl/header-in-dt-novalid.html | 4 + .../elements/dl/hgroup-in-dt-novalid.html | 4 + .../html/elements/dl/last-dt-novalid.html | 4 + .../elements/dl/mixed-div-dt-dd-novalid.html | 4 + .../elements/dl/mixed-dt-dd-div-novalid.html | 4 + .../html/elements/dl/model-isvalid.html | 55 - .../html/elements/dl/model-novalid.html | 75 - .../html/elements/dl/nav-in-dt-novalid.html | 4 + .../html/elements/dl/nested-divs-novalid.html | 4 + .../html/elements/dl/only-dd-novalid.html | 4 + .../html/elements/dl/only-dt-novalid.html | 4 + .../elements/dl/section-in-dt-novalid.html | 4 + .../conformance-checkers/messages.json | 75 +- .../tools/build-svg-tests.py | 137 +- .../conformance-checkers/tools/dl.py | 99 + .../tools/index-isvalid.html | 451 - .../tools/ins-del-datetime.py | 1 - .../conformance-checkers/tools/url.py | 4 - tests/wpt/web-platform-tests/console/OWNERS | 2 + .../console/console-is-a-namespace.any.js | 27 + .../content-security-policy/OWNERS | 1 - .../font-src/font-blacklisted-ref.html | 6 + .../font-src/font-blacklisted.html | 9 + .../font-src/font-whitelisted-ref.html | 6 + .../font-src/font-whitelisted.html | 9 + .../font-src/fonts.css | 8 + .../navigation/to-javascript-url.html | 57 + ...c-strict_dynamic_and_unsafe_eval_eval.html | 31 + ..._dynamic_and_unsafe_eval_eval.html.headers | 5 + ..._dynamic_and_unsafe_eval_new_function.html | 31 + ..._and_unsafe_eval_new_function.html.headers | 5 + ...-src-strict_dynamic_discard_whitelist.html | 32 + ...ict_dynamic_discard_whitelist.html.headers | 5 + ...dynamic_double_policy_different_nonce.html | 68 + ...double_policy_different_nonce.html.headers | 6 + ...mic_double_policy_honor_whitelist.sub.html | 61 + ...le_policy_honor_whitelist.sub.html.headers | 6 + ...ict_dynamic_double_policy_report_only.html | 44 + ...mic_double_policy_report_only.html.headers | 6 + .../script-src-strict_dynamic_eval.html | 37 + ...cript-src-strict_dynamic_eval.html.headers | 5 + .../script-src-strict_dynamic_hashes.html | 52 + ...ipt-src-strict_dynamic_hashes.html.headers | 5 + .../script-src-strict_dynamic_in_img-src.html | 32 + ...src-strict_dynamic_in_img-src.html.headers | 5 + .../script-src-strict_dynamic_meta_tag.html | 76 + ...t-src-strict_dynamic_meta_tag.html.headers | 4 + ...cript-src-strict_dynamic_new_function.html | 37 + ...c-strict_dynamic_new_function.html.headers | 5 + ...rc-strict_dynamic_non_parser_inserted.html | 76 + ...t_dynamic_non_parser_inserted.html.headers | 5 + ...c_non_parser_inserted_incorrect_nonce.html | 29 + ...rser_inserted_incorrect_nonce.html.headers | 5 + ...pt-src-strict_dynamic_parser_inserted.html | 205 + ...trict_dynamic_parser_inserted.html.headers | 5 + ...dynamic_parser_inserted_correct_nonce.html | 110 + ...parser_inserted_correct_nonce.html.headers | 5 + .../script-src/simpleSourcedScript.js | 1 + .../blockeduri-eval.html | 19 + .../blockeduri-inline.html | 18 + .../securitypolicyviolation/idl.html | 49 + .../securitypolicyviolation/targeting.html | 159 + .../support/echo-policy.py | 3 + .../content-security-policy/support/ping.js | 12 + .../support/testharness-helper.js | 131 + .../worker-src/dedicated-child.sub.html | 13 + .../worker-src/dedicated-fallback.sub.html | 13 + .../worker-src/dedicated-list.sub.html | 13 + .../worker-src/dedicated-none.sub.html | 13 + .../worker-src/dedicated-self.sub.html | 9 + .../worker-src/service-child.https.sub.html | 10 + .../service-fallback.https.sub.html | 9 + .../worker-src/service-list.https.sub.html | 9 + .../worker-src/service-none.https.sub.html | 9 + .../worker-src/service-self.https.sub.html | 9 + .../worker-src/shared-child.sub.html | 13 + .../worker-src/shared-fallback.sub.html | 13 + .../worker-src/shared-list.sub.html | 13 + .../worker-src/shared-none.sub.html | 13 + .../worker-src/shared-self.sub.html | 10 + tests/wpt/web-platform-tests/cors/OWNERS | 1 - .../cssom/serialize-values.html | 596 + .../CustomElementRegistry.html | 580 + .../Document-createElement.html | 332 + .../custom-elements/adopted-callback.html | 135 + .../attribute-changed-callback.html | 223 + .../custom-elements/connected-callbacks.html | 88 + .../custom-element-reaction-queue.html | 157 + .../disconnected-callbacks.html | 93 + .../htmlconstructor/newtarget.html | 118 +- ...ucts-custom-element-in-document-write.html | 32 + ...nstructs-custom-element-synchronously.html | 51 + .../parser-constructs-custom-elements.html | 48 + .../parser-fallsback-to-unknown-element.html | 91 + .../parser-sets-attributes-and-children.html | 59 + .../parser-uses-constructed-element.html | 75 + ...arser-uses-registry-of-owner-document.html | 126 + .../custom-elements/reaction-timing.html | 88 + .../custom-elements/reactions/Attr.html | 23 + .../reactions/CSSStyleDeclaration.html | 85 + .../custom-elements/reactions/ChildNode.html | 35 + .../reactions/DOMStringMap.html | 96 + .../reactions/DOMTokenList.html | 219 + .../custom-elements/reactions/Document.html | 154 + .../custom-elements/reactions/Element.html | 82 + .../reactions/ElementContentEditable.html | 21 + .../reactions/HTMLAnchorElement.html | 32 + .../reactions/HTMLElement.html | 42 + .../reactions/HTMLOptionElement.html | 35 + .../reactions/HTMLOptionsCollection.html | 122 + .../reactions/HTMLOutputElement.html | 45 + .../reactions/HTMLSelectElement.html | 122 + .../reactions/HTMLTableElement.html | 173 + .../reactions/HTMLTableRowElement.html | 34 + .../reactions/HTMLTableSectionElement.html | 45 + .../reactions/HTMLTitleElement.html | 35 + .../reactions/NamedNodeMap.html | 39 + .../custom-elements/reactions/Node.html | 49 + .../custom-elements/reactions/ParentNode.html | 27 + .../custom-elements/reactions/Range.html | 54 + .../custom-elements/reactions/Selection.html | 32 + .../custom-elements/reactions/ShadowRoot.html | 52 + .../reactions/resources/reactions.js | 361 + .../resources/custom-elements-helpers.js | 210 +- .../resources/empty-html-document.html | 5 + .../custom-elements/upgrading.html | 190 + .../upgrading/Node-cloneNode.html | 185 + .../upgrading-enqueue-reactions.html | 158 + .../upgrading-parser-created-element.html | 97 + ...Collection-supported-property-indices.html | 79 + ...MLCollection-supported-property-names.html | 81 + .../dom/events/Event-dispatch-click.html | 204 + .../events/Event-dispatch-other-document.html | 22 + .../dom/events/ProgressEvent.html | 5 - .../dom/lists/DOMTokenList-iteration.html | 4 +- .../DOMImplementation-createDocument.html | 4 +- .../dom/nodes/Document-createElement.html | 186 +- .../dom/nodes/Document-createElementNS.html | 124 +- .../dom/nodes/Document-createElementNS.js | 27 +- .../dom/nodes/Document-createEvent.html | 4 +- .../dom/nodes/Document-createEvent.js | 2 - .../dom/nodes/Node-childNodes.html | 4 +- .../dom/nodes/Node-contains.html | 2 +- .../web-platform-tests/dom/nodes/selectors.js | 19 +- .../ranges/Range-mutations-appendChild.html | 14 + .../ranges/Range-mutations-appendData.html | 14 + .../ranges/Range-mutations-dataChange.html | 14 + .../ranges/Range-mutations-deleteData.html | 14 + .../ranges/Range-mutations-insertBefore.html | 14 + .../ranges/Range-mutations-insertData.html | 14 + .../ranges/Range-mutations-removeChild.html | 14 + .../ranges/Range-mutations-replaceChild.html | 14 + .../ranges/Range-mutations-replaceData.html | 14 + .../dom/ranges/Range-mutations-splitText.html | 14 + ...ange-mutations.html => Range-mutations.js} | 29 - .../wpt/web-platform-tests/domparsing/OWNERS | 2 - .../domparsing/createContextualFragment.html | 12 +- .../domparsing/innerhtml-02.html | 126 - tests/wpt/web-platform-tests/dpub-aam/OWNERS | 1 + .../wpt/web-platform-tests/dpub-aam/README.md | 64 + tests/wpt/web-platform-tests/dpub-aria/OWNERS | 1 + .../web-platform-tests/dpub-aria/README.md | 64 + .../editing/other/restoration.html | 90 + tests/wpt/web-platform-tests/encoding/OWNERS | 1 - .../encoding/single-byte-decoder.html | 2 +- .../textdecoder-fatal-single-byte.html | 2 +- ...ypted-media-clear-key-invalid-license.html | 3 + ...media-clearkey-update-non-ascii-input.html | 3 + ...d-media-keystatuses-multiple-sessions.html | 3 + ...ed-media-keystatuses-multiple-updates.html | 3 + .../encrypted-media-onencrypted.html | 3 + ...-playback-encrypted-and-clear-sources.html | 3 + ...pted-media-playback-multiple-sessions.html | 3 + ...ted-media-requestmediakeysystemaccess.html | 3 + ...ed-media-reset-src-after-setmediakeys.html | 3 + .../encrypted-media-session-closed-event.html | 3 + ...dia-setmediakeys-again-after-playback.html | 3 + ...etmediakeys-again-after-resetting-src.html | 3 + ...ypted-media-setmediakeys-at-same-time.html | 3 + ...ltiple-times-with-different-mediakeys.html | 3 + ...ultiple-times-with-the-same-mediakeys.html | 3 + ...tmediakeys-to-multiple-video-elements.html | 3 + .../encrypted-media-setmediakeys.html | 3 + .../encrypted-media-syntax.html | 6 + .../encrypted-media-unique-origin.html | 3 + ...crypted-media-update-disallowed-input.html | 3 + .../encrypted-media-utils.js | 0 .../encrypted-media-waiting-for-a-key.html | 3 + .../clearkey-events-session-closed-event.html | 40 + .../encrypted-media/clearkey-events.html | 5 +- .../clearkey-invalid-license.html | 31 + ...learkey-keystatuses-multiple-sessions.html | 2 +- .../encrypted-media/clearkey-keystatuses.html | 2 +- ...p4-playback-temporary-clear-encrypted.html | 53 + ...ack-temporary-encrypted-clear-sources.html | 59 + ...p4-playback-temporary-encrypted-clear.html | 53 + ...porary-multikey-sequential-readyState.html | 55 + ...layback-temporary-multikey-sequential.html | 54 + ...arkey-mp4-requestmediakeysystemaccess.html | 40 + ...rkey-mp4-reset-src-after-setmediakeys.html | 47 + ...mp4-setmediakeys-again-after-playback.html | 53 + ...etmediakeys-again-after-resetting-src.html | 53 + ...learkey-mp4-setmediakeys-at-same-time.html | 43 + ...ltiple-times-with-different-mediakeys.html | 49 + ...ultiple-times-with-the-same-mediakeys.html | 49 + ...tmediakeys-to-multiple-video-elements.html | 47 + .../clearkey-mp4-setmediakeys.html | 43 + .../clearkey-mp4-syntax-mediakeys.html | 42 + .../clearkey-mp4-syntax-mediakeysession.html | 42 + ...arkey-mp4-syntax-mediakeysystemaccess.html | 42 + .../clearkey-mp4-unique-origin.html | 43 + .../clearkey-mp4-update-disallowed-input.html | 28 + .../clearkey-mp4-waiting-for-a-key.html | 52 + .../clearkey-update-non-ascii-input.html | 36 + .../content/content-metadata.js | 93 +- ...video_512x288_h264-360k_clear_dashinit.mp4 | Bin 0 -> 238401 bytes ...o_512x288_h264-360k_clear_enc_dashinit.mp4 | Bin 0 -> 241564 bytes ...o_512x288_h264-360k_enc_clear_dashinit.mp4 | Bin 0 -> 241049 bytes ...eo_512x288_h264-360k_multikey_dashinit.mp4 | Bin 0 -> 246574 bytes ...x288_h264-360k_multikey_key1_dashinit.mp4} | 0 ...2x288_h264-360k_multikey_key2_dashinit.mp4 | Bin 0 -> 241870 bytes .../drm-events-session-closed-event.html | 39 + .../encrypted-media/drm-events.html | 2 +- .../encrypted-media/drm-expiration.html | 67 + .../encrypted-media/drm-invalid-license.html | 32 + .../drm-keystatuses-multiple-sessions.html | 6 +- .../encrypted-media/drm-keystatuses.html | 2 +- .../encrypted-media/drm-mp4-onencrypted.html | 47 + ...k-retrieve-destroy-persistent-license.html | 5 +- ...p4-playback-temporary-clear-encrypted.html | 53 + ...ack-temporary-encrypted-clear-sources.html | 59 + ...p4-playback-temporary-encrypted-clear.html | 53 + .../drm-mp4-playback-temporary-expired.html | 53 + ...porary-multikey-sequential-readyState.html | 58 + ...layback-temporary-multikey-sequential.html | 57 + ...m-mp4-playback-temporary-multisession.html | 4 +- ...drm-mp4-playback-temporary-two-videos.html | 4 +- .../drm-mp4-requestmediakeysystemaccess.html | 41 + .../drm-mp4-reset-src-after-setmediakeys.html | 46 + ...mp4-setmediakeys-again-after-playback.html | 52 + ...etmediakeys-again-after-resetting-src.html | 52 + .../drm-mp4-setmediakeys-at-same-time.html | 44 + ...ltiple-times-with-different-mediakeys.html | 50 + ...ultiple-times-with-the-same-mediakeys.html | 50 + ...tmediakeys-to-multiple-video-elements.html | 48 + .../encrypted-media/drm-mp4-setmediakeys.html | 44 + .../drm-mp4-syntax-mediakeys.html | 43 + .../drm-mp4-syntax-mediakeysession.html | 43 + .../drm-mp4-syntax-mediakeysystemaccess.html | 43 + .../drm-mp4-unique-origin.html | 44 + .../drm-mp4-waiting-for-a-key.html | 52 + .../drm-not-callable-after-createsession.html | 6 +- .../drm-temporary-license-type.html | 71 + .../polyfill/chrome-polyfill.js | 3 +- .../polyfill/edge-keystatuses.js | 144 + ...ill.js => edge-persistent-usage-record.js} | 0 .../polyfill/firefox-polyfill.js | 2 +- .../polyfill/make-polyfill-tests.py | 3 +- ...m-retrieve-destroy-persistent-license.html | 54 +- .../clearkey-update-non-ascii-input.js | 48 + .../scripts/events-session-closed-event.js | 52 + .../encrypted-media/scripts/events.js | 32 +- .../encrypted-media/scripts/expiration.js | 43 + .../generate-request-disallowed-input.js | 145 +- .../scripts/invalid-license.js | 33 + .../scripts/keystatuses-multiple-sessions.js | 62 +- .../encrypted-media/scripts/keystatuses.js | 56 +- .../encrypted-media/scripts/onencrypted.js | 48 + .../playback-destroy-persistent-license.js | 30 +- .../playback-persistent-license-events.js | 70 +- .../scripts/playback-persistent-license.js | 20 +- ...playback-persistent-usage-record-events.js | 94 +- .../playback-persistent-usage-record.js | 51 +- .../playback-retrieve-persistent-license.js | 42 +- ...ayback-retrieve-persistent-usage-record.js | 47 +- ...yback-temporary-encrypted-clear-sources.js | 109 + .../scripts/playback-temporary-events.js | 94 +- .../scripts/playback-temporary-expired.js | 92 + ...layback-temporary-multikey-multisession.js | 89 - .../playback-temporary-multikey-sequential.js | 122 + .../playback-temporary-multisession.js | 38 +- .../playback-temporary-setMediaKeys.js | 49 +- .../scripts/playback-temporary-two-videos.js | 39 +- .../playback-temporary-waitingforkey.js | 31 +- .../scripts/playback-temporary.js | 32 +- .../scripts/requestmediakeysystemaccess.js | 320 + .../scripts/reset-src-after-setmediakeys.js | 61 + .../setmediakeys-again-after-playback.js | 79 + .../setmediakeys-again-after-resetting-src.js | 79 + .../scripts/setmediakeys-at-same-time.js | 59 + ...multiple-times-with-different-mediakeys.js | 98 + ...-multiple-times-with-the-same-mediakeys.js | 46 + ...setmediakeys-to-multiple-video-elements.js | 54 + .../encrypted-media/scripts/setmediakeys.js | 49 + .../scripts/syntax-mediakeys.js | 184 + .../scripts/syntax-mediakeysession.js | 445 + .../scripts/syntax-mediakeysystemaccess.js | 147 + .../scripts/temporary-license-type.js | 61 + .../encrypted-media/scripts/unique-origin.js | 64 + .../scripts/update-disallowed-input.js | 45 + .../scripts/waiting-for-a-key.js | 166 + .../util/clearkey-messagehandler.js | 20 + .../util/drm-messagehandler.js | 395 +- .../encrypted-media/util/testmediasource.js | 42 +- .../encrypted-media/util/utils.js | 115 +- .../wpt/web-platform-tests/eventsource/OWNERS | 2 - .../eventsource-onmessage-realm-support.htm | 2 + .../eventsource-onmessage-realm.htm | 25 + .../fetch/api/basic/conditional-get.html | 51 + .../fetch/api/basic/error-after-response.html | 34 + .../api/basic/integrity-sharedworker.html | 15 + .../fetch/api/basic/request-headers.js | 3 + .../api/basic/request-upload-worker.html | 14 + .../fetch/api/basic/request-upload.html | 13 + .../fetch/api/basic/request-upload.js | 35 + .../fetch/api/basic/scheme-data.js | 10 +- .../fetch/api/basic/text-utf8.html | 13 + .../fetch/api/cors/cors-redirect.js | 2 +- .../fetch/api/headers/headers-basic.html | 2 +- .../fetch/api/headers/headers-normalize.html | 4 +- .../fetch/api/redirect/redirect-count.js | 7 +- .../multi-globals/current/current.html | 2 + .../multi-globals/incumbent/incumbent.html | 15 + .../request/multi-globals/url-parsing.html | 27 + .../request-cache-default-conditional.html | 180 + .../api/request/request-cache-default.html | 50 + .../request/request-cache-force-cache.html | 78 + .../api/request/request-cache-no-cache.html | 36 + .../api/request/request-cache-no-store.html | 48 + .../request/request-cache-only-if-cached.html | 76 + .../api/request/request-cache-reload.html | 62 + .../fetch/api/request/request-cache.html | 626 - .../fetch/api/request/request-cache.js | 223 + .../api/request/request-consume-empty.html | 4 + .../fetch/api/resources/bad-chunk-encoding.py | 13 + .../fetch/api/resources/cache.py | 18 + .../fetch/api/resources/echo-content.py | 9 + .../fetch/api/resources/utils.js | 7 + .../multi-globals/current/current.html | 2 + .../multi-globals/incumbent/incumbent.html | 17 + .../multi-globals/relevant/relevant.html | 2 + .../response/multi-globals/url-parsing.html | 27 + .../fetch/api/response/response-clone.html | 38 + .../api/response/response-consume-empty.html | 4 +- .../api/response/response-consume-stream.html | 7 + .../fetch/api/response/response-consume.html | 201 +- .../axisheight5000-verticalarrow14000.woff | Bin 0 -> 1336 bytes ...tion-axisheight7000-rulethickness1000.woff | Bin 0 -> 1204 bytes ...playstylegapmin5000-rulethickness1000.woff | Bin 0 -> 1264 bytes ...ystyleshiftdown6000-rulethickness1000.woff | Bin 0 -> 1276 bytes ...nominatorgapmin4000-rulethickness1000.woff | Bin 0 -> 1224 bytes ...inatorshiftdown3000-rulethickness1000.woff | Bin 0 -> 1236 bytes ...playstylegapmin8000-rulethickness1000.woff | Bin 0 -> 1256 bytes ...laystyleshiftup2000-rulethickness1000.woff | Bin 0 -> 1260 bytes ...numeratorgapmin9000-rulethickness1000.woff | Bin 0 -> 1216 bytes ...meratorshiftup11000-rulethickness1000.woff | Bin 0 -> 1224 bytes .../math/fraction-rulethickness10000.woff | Bin 0 -> 1160 bytes .../largeop-displayoperatorminheight5000.woff | Bin 0 -> 1296 bytes .../limits-lowerlimitbaselinedropmin3000.woff | Bin 0 -> 1256 bytes .../math/limits-lowerlimitgapmin11000.woff | Bin 0 -> 1228 bytes .../limits-upperlimitbaselinerisemin5000.woff | Bin 0 -> 1256 bytes .../math/limits-upperlimitgapmin7000.woff | Bin 0 -> 1224 bytes .../lineheight5000-typolineheight2300.woff | Bin 0 -> 1108 bytes .../fonts/math/mathvariant-bold-fraktur.woff | Bin 0 -> 2776 bytes .../fonts/math/mathvariant-bold-italic.woff | Bin 0 -> 4648 bytes .../math/mathvariant-bold-sans-serif.woff | Bin 0 -> 4892 bytes .../fonts/math/mathvariant-bold-script.woff | Bin 0 -> 2736 bytes .../fonts/math/mathvariant-bold.woff | Bin 0 -> 5004 bytes .../fonts/math/mathvariant-double-struck.woff | Bin 0 -> 3988 bytes .../fonts/math/mathvariant-fraktur.woff | Bin 0 -> 2844 bytes .../fonts/math/mathvariant-initial.woff | Bin 0 -> 2100 bytes .../fonts/math/mathvariant-italic.woff | Bin 0 -> 4756 bytes .../fonts/math/mathvariant-looped.woff | Bin 0 -> 2292 bytes .../fonts/math/mathvariant-monospace.woff | Bin 0 -> 3048 bytes .../mathvariant-sans-serif-bold-italic.woff | Bin 0 -> 4668 bytes .../math/mathvariant-sans-serif-italic.woff | Bin 0 -> 2748 bytes .../fonts/math/mathvariant-sans-serif.woff | Bin 0 -> 3060 bytes .../fonts/math/mathvariant-script.woff | Bin 0 -> 2964 bytes .../fonts/math/mathvariant-stretched.woff | Bin 0 -> 2256 bytes .../fonts/math/mathvariant-tailed.woff | Bin 0 -> 2024 bytes ...ottomraisepercent25-rulethickness1000.woff | Bin 0 -> 1400 bytes ...tyleverticalgap7000-rulethickness1000.woff | Bin 0 -> 1392 bytes ...l-extraascender3000-rulethickness1000.woff | Bin 0 -> 1372 bytes ...fterdegreeminus5000-rulethickness1000.woff | Bin 0 -> 1388 bytes ...ernbeforedegree4000-rulethickness1000.woff | Bin 0 -> 1376 bytes .../fonts/math/radical-rulethickness8000.woff | Bin 0 -> 1316 bytes ...cal-verticalgap6000-rulethickness1000.woff | Bin 0 -> 1360 bytes .../math/scripts-spaceafterscript3000.woff | Bin 0 -> 1164 bytes .../scripts-subscriptbaselinedropmin9000.woff | Bin 0 -> 1192 bytes .../math/scripts-subscriptshiftdown6000.woff | Bin 0 -> 1172 bytes .../math/scripts-subscripttopmax4000.woff | Bin 0 -> 1160 bytes ...superscriptbottommaxwithsubscript3000.woff | Bin 0 -> 1252 bytes .../scripts-subsuperscriptgapmin11000.woff | Bin 0 -> 1180 bytes ...ripts-superscriptbaselinedropmax10000.woff | Bin 0 -> 1196 bytes .../scripts-superscriptbottommin8000.woff | Bin 0 -> 1176 bytes .../math/scripts-superscriptshiftup7000.woff | Bin 0 -> 1164 bytes ...scripts-superscriptshiftupcramped5000.woff | Bin 0 -> 1188 bytes .../fonts/math/stack-axisheight7000.woff | Bin 0 -> 1144 bytes ...stack-bottomdisplaystyleshiftdown5000.woff | Bin 0 -> 1204 bytes .../fonts/math/stack-bottomshiftdown6000.woff | Bin 0 -> 1168 bytes .../math/stack-displaystylegapmin4000.woff | Bin 0 -> 1176 bytes .../fonts/math/stack-gapmin8000.woff | Bin 0 -> 1132 bytes .../stack-topdisplaystyleshiftup3000.woff | Bin 0 -> 1184 bytes .../fonts/math/stack-topshiftup9000.woff | Bin 0 -> 1152 bytes .../stretchstack-bottomshiftdown3000.woff | Bin 0 -> 1252 bytes .../math/stretchstack-gapabovemin7000.woff | Bin 0 -> 1236 bytes .../math/stretchstack-gapbelowmin11000.woff | Bin 0 -> 1236 bytes .../math/stretchstack-topshiftup5000.woff | Bin 0 -> 1232 bytes ...seheight4000-overbarextraascender3000.woff | Bin 0 -> 1300 bytes ...aseheight4000-overbarverticalgap11000.woff | Bin 0 -> 1300 bytes ...height4000-underbarextradescender5000.woff | Bin 0 -> 1300 bytes ...aseheight4000-underbarverticalgap7000.woff | Bin 0 -> 1300 bytes .../fonts/math/xheight500.woff | Bin 0 -> 1048 bytes .../api/document-exit-fullscreen-manual.html | 24 + .../document-fullscreen-element-manual.html | 32 + .../document-onfullscreenchange-manual.html | 15 + ...-ready-check-containing-iframe-manual.html | 21 + ...ady-check-enabled-flag-not-set-manual.html | 19 + ...eck-fullscreen-element-sibling-manual.html | 23 + ...-check-fullscreen-iframe-child-manual.html | 28 + ...ement-ready-check-iframe-child-manual.html | 17 + ...nt-ready-check-not-in-document-manual.html | 15 + .../element-request-fullscreen-manual.html | 22 + ...ent-request-fullscreen-non-top-manual.html | 28 + ...nt-request-fullscreen-svg-rect-manual.html | 17 + ...ent-request-fullscreen-svg-svg-manual.html | 17 + ...element-request-fullscreen-top-manual.html | 30 + .../fullscreen/model/remove-child-manual.html | 28 + .../fullscreen/model/remove-first-manual.html | 32 + .../fullscreen/model/remove-last-manual.html | 32 + .../model/remove-parent-manual.html | 26 + .../model/remove-single-manual.html | 24 + .../fullscreen/trusted-click.js | 24 + .../hr-time/idlharness.html | 23 +- .../navigating-across-documents/014.html | 2 +- .../javascript-url-return-value-handling.html | 4 + .../history_go_to_uri-1.html | 23 + .../history_go_to_uri.html | 32 + ...ssion_history_unload_prompt_1-manual.html} | 0 .../location-prototype-setting.html | 18 + .../the-location-interface/location_hash.html | 13 + ...tion_0.sub.htm => security_location_0.htm} | 0 .../cross-origin-objects.html | 2 +- .../win-documentdomain.sub.html | 6 +- .../browsers/sandboxing/inner-iframe.html | 13 + .../sandboxing/sandbox-allow-same-origin.html | 30 + .../sandboxing/sandbox-allow-scripts.html | 29 + .../sandbox-disallow-same-origin.html | 30 + .../sandboxing/sandbox-disallow-scripts.html | 29 + .../named-objects.html | 28 +- ...security.sub.html => window-security.html} | 0 .../support/noopener-target.html | 8 + .../window-open-noopener.html | 105 + ...rameElement.sub.html => frameElement.html} | 0 .../support-open-cross-origin.sub.html | 3 + ...ross-origin-nested-browsing-contexts.html} | 0 ...ting-multiple-cross-origin-manual.sub.html | 9 + ...t.sub.html => Document.currentScript.html} | 0 .../dom-tree-accessors/document.forms.html | 4 +- .../html/dom/interfaces.html | 23 +- .../html/dom/new-harness.js | 21 +- .../html/dom/original-harness.js | 72 +- .../web-platform-tests/html/dom/reflection.js | 73 +- .../html/editing/activation/click-manual.html | 5 + .../dndTransferCases-manual.html | 24 +- .../focus-fixup-rule-one-no-dialogs.html | 71 + .../collections/historical.html | 25 + .../collections/htmlallcollection.html | 248 +- ...fied.sub.html => base_href_specified.html} | 0 .../interfaces/TrackEvent/constructor.html | 9 +- .../the-embed-element/historical.html | 15 + .../iframe-append-to-child-document.html | 17 + .../iframe_sandbox_allow_script.html | 11 +- ... => iframe_sandbox_popups_escaping-1.html} | 2 +- .../iframe_sandbox_popups_escaping-2.html | 31 + .../iframe_sandbox_popups_escaping-3.html | 25 + ...ml => iframe_sandbox_popups_helper-1.html} | 1 - .../iframe_sandbox_popups_helper-2.html | 27 + .../iframe_sandbox_popups_helper-3.html | 17 + ... iframe_sandbox_popups_nonescaping-1.html} | 2 +- .../iframe_sandbox_popups_nonescaping-2.html | 18 + .../iframe_sandbox_popups_nonescaping-3.html | 15 + .../the-img-element/data-url.html | 22 + .../the-img-element/invalid-src.html | 27 +- .../the-img-element/usemap-casing.html | 93 + .../the-object-element/historical.html | 15 + .../the-object-element/usemap-casing.html | 93 + .../form-validation-checkValidity.html | 6 +- .../form-validation-reportValidity.html | 6 +- ...form-validation-validity-stepMismatch.html | 30 +- .../form-validation-validity-valid.html | 3 - .../form-indexed-element.html | 25 +- .../the-form-element/form-nameditem.html | 91 + .../radio-groupname-case.html | 58 +- .../forms/the-meter-element/meter.html | 10 +- .../grouping-li-reftest-001-ref.html | 4 +- .../grouping-li-reftest-001.html | 4 +- .../grouping-li-reftest-002-ref.html | 2 - .../grouping-li-reftest-002.html | 2 - ...ping-li-reftest-display-list-item-ref.html | 40 + ...grouping-li-reftest-display-list-item.html | 44 + ...ouping-li-reftest-list-owner-menu-ref.html | 46 + .../grouping-li-reftest-list-owner-menu.html | 58 + ...uping-li-reftest-list-owner-mixed-ref.html | 52 + .../grouping-li-reftest-list-owner-mixed.html | 64 + ...ing-li-reftest-list-owner-not-dir-ref.html | 52 + ...rouping-li-reftest-list-owner-not-dir.html | 58 + ...grouping-li-reftest-list-owner-ol-ref.html | 46 + .../grouping-li-reftest-list-owner-ol.html | 52 + ...ping-li-reftest-list-owner-parent-ref.html | 40 + ...grouping-li-reftest-list-owner-parent.html | 45 + ...-reftest-list-owner-skip-no-boxes-ref.html | 42 + ...g-li-reftest-list-owner-skip-no-boxes.html | 52 + ...grouping-li-reftest-list-owner-ul-ref.html | 46 + .../grouping-li-reftest-list-owner-ul.html | 58 + ...grouping-li-reftest-no-list-owner-ref.html | 29 + .../grouping-li-reftest-no-list-owner.html | 31 + ...ing-li-reftest-not-being-rendered-ref.html | 24 + ...rouping-li-reftest-not-being-rendered.html | 30 + .../grouping-content/the-ol-element/.gitkeep | 0 .../grouping-ol-rev-reftest-001-ref.html | 3 - .../grouping-ol-rev-reftest-001.html | 3 - .../grouping-ol-start-reftest-001-ref.html | 4 - .../grouping-ol-start-reftest-001.html | 4 - .../grouping-ol-start-reftest-002-ref.html | 4 - .../grouping-ol-start-reftest-002.html | 4 - .../grouping-ol-type-reftest-001-ref.html | 3 - .../grouping-ol-type-reftest-001.html | 3 - .../grouping-ol-type-reftest-002-ref.html | 3 - .../grouping-ol-type-reftest-002.html | 3 - .../grouping-ol-type-reftest-003-ref.html | 2 - .../grouping-ol-type-reftest-003.html | 2 - .../the-ol-element/grouping-ol.html | 55 +- .../the-ol-element/ol.start-reflection-2.html | 2 +- .../the-ol-element/reversed-1a.html | 4 + .../the-ol-element/reversed-1b.html | 4 + .../the-ol-element/reversed-1c.html | 4 + .../the-ol-element/reversed-1d.html | 12 + .../the-ol-element/reversed-1e.html | 11 + .../htmlanchorelement_noopener.html | 78 + .../support/noopener-popup.html | 19 + .../support/noopener-target-1.html | 4 + .../support/noopener-target-2.html | 8 + .../the-script-element/data-url.html | 24 + .../script-onerror-insertion-point-1.html | 12 + .../script-onerror-insertion-point-2.html | 13 + .../script-onload-insertion-point.html | 12 + ...ript-onerror-insertion-point-1-helper.html | 2 + ...ript-onerror-insertion-point-2-helper.html | 2 + .../script-onload-insertion-point-helper.html | 2 + .../script-onload-insertion-point-helper.js | 1 + .../node-document-changes.html | 7 - .../pseudo-classes/indeterminate.html | 2 +- .../the-table-element/remove-row.html | 20 +- .../the-tbody-element/deleteRow.html | 7 + .../the-tr-element/deleteCell.html | 7 + .../idle-callbacks/callback-exception.html | 22 + .../idle-callbacks/callback-iframe.html | 17 + .../idle-callbacks/callback-invoked.html | 12 + .../callback-multiple-calls.html | 41 + .../idle-callbacks/callback-timeout.html | 28 + .../idle-callbacks/cancel-invoked.html | 26 + .../webappapis/idle-callbacks/idlharness.html | 34 + .../event-handler-attributes-body-window.html | 10 + .../messageevent-constructor.https.html | 96 + .../the-navigator-object/NavigatorID.js | 77 +- .../bitmaprenderer-as-imagesource.html | 90 + .../context-creation-with-alpha.html | 75 + .../context-creation.html | 19 + .../context-preserves-canvas.html | 21 + .../tranferFromImageBitmap-null.html | 75 + .../transferFromImageBitmap-detached.html | 34 + .../innerText/getter-tests.js | 22 +- .../web-platform-tests/innerText/getter.html | 14 +- tests/wpt/web-platform-tests/lint.whitelist | 3 + tests/wpt/web-platform-tests/mathml/README.md | 18 + .../presentation-markup/fractions/frac-1.html | 129 + .../fractions/frac-parameters-1.html | 241 + .../fractions/frac-parameters-2.html | 173 + .../operators/mo-axis-height-1.html | 76 + .../radicals/root-parameters-1.html | 208 + .../presentation-markup/scripts/subsup-1.html | 104 + .../presentation-markup/scripts/subsup-2.html | 163 + .../presentation-markup/scripts/subsup-3.html | 180 + .../presentation-markup/scripts/subsup-4.html | 124 + .../presentation-markup/scripts/subsup-5.html | 90 + .../scripts/subsup-parameters-1.html | 334 + .../scripts/underover-1.html | 161 + .../scripts/underover-parameters-1.html | 143 + .../scripts/underover-parameters-2.html | 143 + .../scripts/underover-parameters-3.html | 322 + .../scripts/underover-parameters-4.html | 322 + .../presentation-markup/spaces/space-1.html | 91 + .../spaces/space-2-ref.html | 15 + .../presentation-markup/spaces/space-2.html | 42 + .../tables/table-axis-height.html | 52 + .../relations/css-styling/color-1-ref.html | 12 + .../mathml/relations/css-styling/color-1.html | 37 + .../relations/css-styling/display-1-ref.html | 12 + .../relations/css-styling/display-1.html | 16 + .../relations/css-styling/displaystyle-1.html | 114 + .../relations/css-styling/lengths-1-ref.html | 17 + .../relations/css-styling/lengths-1.html | 119 + .../relations/css-styling/lengths-2-ref.html | 14 + .../relations/css-styling/lengths-2.html | 122 + .../relations/css-styling/lengths-3.html | 158 + .../mathvariant-bold-fraktur-ref.html | 79 + .../css-styling/mathvariant-bold-fraktur.html | 82 + .../mathvariant-bold-italic-ref.html | 137 + .../css-styling/mathvariant-bold-italic.html | 140 + .../css-styling/mathvariant-bold-ref.html | 149 + .../mathvariant-bold-sans-serif-ref.html | 147 + .../mathvariant-bold-sans-serif.html | 150 + .../mathvariant-bold-script-ref.html | 79 + .../css-styling/mathvariant-bold-script.html | 82 + .../css-styling/mathvariant-bold.html | 152 + .../mathvariant-double-struck-ref.html | 114 + .../mathvariant-double-struck.html | 117 + .../css-styling/mathvariant-fraktur-ref.html | 79 + .../css-styling/mathvariant-fraktur.html | 82 + .../css-styling/mathvariant-initial-ref.html | 47 + .../css-styling/mathvariant-initial.html | 50 + .../css-styling/mathvariant-italic-ref.html | 139 + .../css-styling/mathvariant-italic.html | 142 + .../css-styling/mathvariant-looped-ref.html | 54 + .../css-styling/mathvariant-looped.html | 57 + .../mathvariant-monospace-ref.html | 89 + .../css-styling/mathvariant-monospace.html | 92 + ...athvariant-sans-serif-bold-italic-ref.html | 137 + .../mathvariant-sans-serif-bold-italic.html | 140 + .../mathvariant-sans-serif-italic-ref.html | 79 + .../mathvariant-sans-serif-italic.html | 82 + .../mathvariant-sans-serif-ref.html | 89 + .../css-styling/mathvariant-sans-serif.html | 92 + .../css-styling/mathvariant-script-ref.html | 79 + .../css-styling/mathvariant-script.html | 82 + .../mathvariant-stretched-ref.html | 50 + .../css-styling/mathvariant-stretched.html | 53 + .../css-styling/mathvariant-tailed-ref.html | 42 + .../css-styling/mathvariant-tailed.html | 45 + .../css-styling/visibility-1-ref.html | 12 + .../relations/css-styling/visibility-1.html | 37 + .../relations/html5-tree/class-1-ref.html | 15 + .../mathml/relations/html5-tree/class-1.html | 23 + .../mathml/relations/html5-tree/class-2.html | 40 + .../html5-tree/color-attributes-1-ref.html | 26 + .../html5-tree/color-attributes-1.html | 37 + .../relations/html5-tree/display-1.html | 83 + .../relations/html5-tree/dynamic-1-ref.html | 16 + .../relations/html5-tree/dynamic-1.html | 30 + .../html5-tree/href-click-1-ref.html | 15 + .../relations/html5-tree/href-click-1.html | 34 + .../html5-tree/href-click-2-ref.html | 15 + .../relations/html5-tree/href-click-2.html | 38 + .../relations/html5-tree/href-manual.html | 28 + .../html5-tree/integration-point-1-ref.html | 13 + .../html5-tree/integration-point-1.html | 25 + .../html5-tree/integration-point-2-ref.html | 15 + .../html5-tree/integration-point-2.html | 72 + .../html5-tree/integration-point-3-ref.html | 17 + .../html5-tree/integration-point-3.html | 63 + .../html5-tree/required-extensions-1.html | 12 + .../html5-tree/required-extensions-2-ref.html | 13 + .../html5-tree/required-extensions-2.html | 23 + .../unique-identifier-1-iframe.html | 18 + .../unique-identifier-1-ref-iframe.html | 15 + .../html5-tree/unique-identifier-1-ref.html | 16 + .../html5-tree/unique-identifier-1.html | 19 + .../html5-tree/unique-identifier-2.html | 28 + .../html5-tree/unique-identifier-3-ref.html | 15 + .../html5-tree/unique-identifier-3.html | 23 + .../text-and-math/use-typo-metrics-1-ref.html | 19 + .../text-and-math/use-typo-metrics-1.html | 51 + .../mathml/tools/axisheight.py | 23 + .../mathml/tools/fractions.py | 153 + .../mathml/tools/largeop.py | 14 + .../web-platform-tests/mathml/tools/limits.py | 74 + .../mathml/tools/mathvariant-transforms.py | 127 + .../mathml/tools/radicals.py | 109 + .../mathml/tools/scripts.py | 145 + .../web-platform-tests/mathml/tools/stacks.py | 81 + .../mathml/tools/stretchstacks.py | 74 + .../mathml/tools/underover.py | 84 + .../mathml/tools/use-typo-lineheight.py | 54 + .../tools/utils/__init__.py} | 0 .../mathml/tools/utils/mathfont.py | 190 + .../mathml/tools/utils/misc.py | 33 + .../mathml/tools/xHeight.py | 11 + .../web-platform-tests/media-source/OWNERS | 1 - .../media-source/mediasource-remove.html | 10 +- ...ediasource-sequencemode-append-buffer.html | 2 +- .../media-source/mediasource-util.js | 72 +- .../media-source/mp4/test.mp4 | Bin 198320 -> 187227 bytes .../media-source/webm/test.webm | Bin 219448 -> 190970 bytes .../BlobEvent-constructor.html | 38 + .../mediacapture-record/OWNERS | 1 + .../page-visibility/idlharness.html | 11 +- .../case-sensitivity.html | 39 + .../web-platform-tests/pointerevents/OWNERS | 1 + ...vent_capture_suppressing_mouse-manual.html | 43 +- .../pointerevent_constructor.html | 6 + ...vent_element_haspointercapture-manual.html | 24 +- ...apture_release_pending_capture-manual.html | 73 + ...nt_lostpointercapture_is_first-manual.html | 24 +- ...rmove_on_chorded_mouse_button-manual.html} | 0 ...ture_events_to_original_target-manual.html | 41 +- ...re_release_right_after_capture-manual.html | 61 + ...erride_pending_capture_element-manual.html | 63 + ...etpointercapture_relatedtarget-manual.html | 15 +- ...rcapture_to_same_element_twice-manual.html | 62 + .../pointerevents/pointerevent_support.js | 3 + .../pointerevent_pointerId_scope-iframe.html | 2 - .../pointerlock_shadow-manual.html | 84 + ...resentationConnection_onclosed-manual.html | 8 +- ...entationConnection_onconnected-manual.html | 8 +- ...ntationConnection_onterminated-manual.html | 13 +- .../PresentationRequest_error.html | 12 +- ...nRequest_onconnectionavailable-manual.html | 60 + .../presentation-api/controlling-ua/common.js | 16 + .../defaultRequest_success-manual.html | 68 +- .../controlling-ua/getAvailability.html | 18 +- .../controlling-ua/idlharness.html | 2 +- .../reconnectToPresentation_error-manual.html | 36 - ...econnectToPresentation_notfound_error.html | 16 + ...econnectToPresentation_success-manual.html | 5 +- ...Presentation_displaynotallowed-manual.html | 34 + ...ewPresentation_displaynotfound-manual.html | 34 + .../startNewPresentation_error-manual.html | 50 - .../startNewPresentation_error.html | 18 +- .../startNewPresentation_success-manual.html | 95 +- ...wPresentation_unsettledpromise-manual.html | 34 + .../controlling-ua/support/iframe.html | 13 +- .../receiving-ua/idlharness.html | 6 +- .../referrer-policy/generic/common.js | 47 +- .../resource-timing/resources/gzip_xml.py | 17 + .../resource-timing/test_resource_timing.js | 47 +- .../resources/idlharness.js | 8 + .../resources/testharness.js | 12 +- .../basic-dedicated-worker.html | 83 + .../basic-dedicated-worker.https.html | 83 + .../secure-contexts/basic-shared-worker.html | 69 + .../basic-shared-worker.https.html | 67 + .../secure-contexts/server-locations.sub.js | 11 + .../shared-worker-insecure-first.https.html | 111 + .../shared-worker-secure-first.https.html | 111 + .../support/dedicated-worker-script.js | 1 + .../support/https-subframe-dedicated.html | 21 + .../support/https-subframe-shared.html | 32 + .../support/parent-dedicated-worker-script.js | 4 + .../support/parent-shared-worker-script.js | 8 + .../support/shared-worker-insecure-popup.html | 15 + .../support/shared-worker-script.js | 5 + .../selectors/child-indexed-pseudo-class.html | 42 + tests/wpt/web-platform-tests/serve.py | 10 +- .../service-worker/fetch-event.https.html | 39 + .../fetch-request-resources.https.html | 65 +- .../postmessage-to-client.https.html | 11 +- .../resources/fetch-event-test-worker.js | 5 + .../fetch-request-resources-iframe.https.html | 16 + .../fetch-request-resources-worker.js | 3 +- ...worker-message-event-historical.https.html | 44 + .../stub-3.1-service-worker-obj.html | 4 +- .../stub-3.2-navigator-service-worker.html | 2 +- .../stub-4.1-service-worker-global-scope.html | 4 +- .../service-workers/stub-4.2-client.html | 4 +- .../stub-4.3-service-worker-clients.html | 4 +- .../stub-4.4-request-objects.html | 2 +- .../stub-4.5-response-objects.html | 4 +- .../service-workers/stub-4.6.2-cache.html | 4 +- .../stub-4.6.3-cache-storage.html | 4 +- .../stub-4.7.1-install-phase-event.html | 4 +- .../stub-4.7.2.1-install-event-section.html | 4 +- .../stub-4.7.4.1-fetch-event-section.html | 4 +- .../wpt/web-platform-tests/shadow-dom/OWNERS | 3 - ...ent-composed-path-with-related-target.html | 12 +- .../count-queuing-strategy-integration.js | 2 +- tests/wpt/web-platform-tests/svg/OWNERS | 1 + .../web-platform-tests/svg/historical.html | 3 + .../svg/import/shapes-rect-01-t-manual.svg | 73 - .../web-platform-tests/svg/interfaces.html | 9 +- .../reftests/href-a-element-attr-change.html | 29 + .../linking/reftests/href-a-element-ref.html | 8 + .../reftests/href-feImage-element-ref.html | 15 + .../reftests/href-feImage-element.html | 18 + .../reftests/href-filter-element-ref.html | 12 + .../linking/reftests/href-filter-element.html | 24 + .../reftests/href-gradient-element-ref.html | 21 + .../reftests/href-gradient-element.html | 31 + .../reftests/href-image-element-ref.html | 9 + .../linking/reftests/href-image-element.html | 12 + .../reftests/href-pattern-element-ref.html | 14 + .../reftests/href-pattern-element.html | 21 + .../reftests/href-textPath-element-ref.html | 20 + .../reftests/href-textPath-element.html | 23 + .../reftests/href-use-element-ref.html | 12 + .../linking/reftests/href-use-element.html | 15 + .../scripted/href-animate-element.html | 138 + .../linking/scripted/href-mpath-element.html | 103 + .../scripted/href-script-element-markup.html | 27 + .../linking/scripted/href-script-element.html | 112 + .../scripted/testScripts/dummyScript.js | 3 + .../scripted/testScripts/externalScript1.js | 3 + .../scripted/testScripts/externalScript2.js | 3 + .../svg/linking/scripted/testcommon.js | 42 + .../svg/shapes/rect-01-ref.html | 2 + .../web-platform-tests/svg/shapes/rect-01.svg | 9 + .../svg/shapes/rect-02-ref.html | 2 + .../web-platform-tests/svg/shapes/rect-02.svg | 9 + .../svg/shapes/rect-03-ref.html | 2 + .../web-platform-tests/svg/shapes/rect-03.svg | 9 + .../svg/shapes/rect-04-ref.html | 7 + .../web-platform-tests/svg/shapes/rect-04.svg | 9 + .../wpt/web-platform-tests/tools/appveyor.yml | 24 + .../web-platform-tests/tools/lint/fnmatch.py | 32 + .../wpt/web-platform-tests/tools/lint/lint.py | 9 +- .../tools/lint/tests/base.py | 11 + .../tools/lint/tests/test_file_lints.py | 36 + .../tools/lint/tests/test_lint.py | 3 +- .../tools/lint/tests/test_path_lints.py | 5 +- .../tools/manifest/sourcefile.py | 9 +- .../tools/manifest/tests/test_sourcefile.py | 6 +- .../tools/manifest/tests/test_utils.py | 28 + .../tools/manifest/utils.py | 13 +- .../web-platform-tests/tools/serve/serve.py | 36 +- tests/wpt/web-platform-tests/tools/tox.ini | 5 +- .../tools/webdriver/COPYING | 373 + .../tools/webdriver/README.md | 41 +- .../tools/webdriver/webdriver/client.py | 86 +- .../tools/webdriver/webdriver/transport.py | 52 +- .../docroot/with_headers.txt.sub.headers | 1 + .../tests/functional/test_handlers.py | 1 + .../touch-touchevent-constructor.html | 35 +- .../keyboard/key-101en-us-manual.html | 4 +- .../keyboard/key-102fr-fr-manual.html | 4 +- .../focus-events/focus-contained-manual.html | 76 + .../focus-events/focus-manual.html | 117 +- .../mouse-events/click-cancel-manual.html | 38 + .../mouse-events/click-order-manual.html | 72 + .../mouse-events/mousemove-across-manual.html | 134 + .../mousemove-between-manual.html | 106 + .../uievents/resources/eventrecorder.js | 34 + .../web-platform-tests/url/setters_tests.json | 19 +- .../web-platform-tests/url/url-setters.html | 18 +- .../web-platform-tests/url/urltestdata.json | 30 + .../keyframe-effects/spacing-keyframes.html | 65 +- .../interfaces/Animation/effect.html | 23 + .../interfaces/Animation/id.html | 11 +- .../getComputedStyle.html | 6 +- .../AnimationTimeline/idlharness.html | 5 +- .../DocumentTimeline/constructor.html | 20 +- .../KeyframeEffect/getComputedTiming.html | 4 +- .../KeyframeEffect/iterationComposite.html | 693 + .../interfaces/KeyframeEffect/spacing.html | 60 + .../web-animations/testcommon.js | 16 + .../animation-effects/active-time.html | 2 +- .../animation-effects/phases-and-states.html | 20 +- ...set-the-target-effect-of-an-animation.html | 95 + .../updating-the-finished-state.html | 125 +- .../test-constantsourcenode.html | 135 + .../webauthn/interfaces.https.html | 104 + .../webauthn/interfaces.idl | 14 + .../web-platform-tests/webdriver/README.md | 92 + .../web-platform-tests/webdriver/contexts.py | 66 +- .../webdriver/navigation.py | 28 - .../web-platform-tests/webmessaging/OWNERS | 1 - tests/wpt/web-platform-tests/webrtc/OWNERS | 1 - .../rtcpeerconnection-constructor.html | 156 + .../web-platform-tests/webrtc/simplecall.html | 15 +- .../wpt/web-platform-tests/websockets/OWNERS | 1 - .../multi-globals/message-received.html | 34 + .../multi-globals/support/incumbent.sub.html | 24 + .../multi-globals/support/relevant.html | 2 + .../workers/Worker_ErrorEvent_error.htm | 29 + .../SharedWorker/URLMismatchError.htm | 29 +- .../workers/data-url-shared.html | 13 + .../web-platform-tests/workers/data-url.html | 13 + .../navigator/window-only.worker.js | 22 - .../workers/support/ErrorEvent-error.js | 9 + 1428 files changed, 118036 insertions(+), 9786 deletions(-) create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html.ini create mode 100644 tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html.ini create mode 100644 tests/wpt/metadata/2dcontext/line-styles/setLineDash.html.ini create mode 100644 tests/wpt/metadata/WebIDL/current-realm.html.ini create mode 100644 tests/wpt/metadata/XMLHttpRequest/abort-during-open.htm.ini create mode 100644 tests/wpt/metadata/XMLHttpRequest/abort-during-open.worker.js.ini create mode 100644 tests/wpt/metadata/XMLHttpRequest/abort-event-abort.htm.ini create mode 100644 tests/wpt/metadata/XMLHttpRequest/send-after-setting-document-domain.htm.ini create mode 100644 tests/wpt/metadata/XMLHttpRequest/send-data-unexpected-tostring.htm.ini delete mode 100644 tests/wpt/metadata/XMLHttpRequest/send-usp.worker.js.ini create mode 100644 tests/wpt/metadata/dom/collections/HTMLCollection-supported-property-names.html.ini create mode 100644 tests/wpt/metadata/dom/events/Event-dispatch-click.html.ini create mode 100644 tests/wpt/metadata/dom/nodes/DOMImplementation-createDocument.html.ini create mode 100644 tests/wpt/metadata/dom/nodes/Document-createElement.html.ini create mode 100644 tests/wpt/metadata/dom/nodes/Document-createElementNS.html.ini create mode 100644 tests/wpt/metadata/dom/ranges/Range-mutations-appendChild.html.ini create mode 100644 tests/wpt/metadata/dom/ranges/Range-mutations-appendData.html.ini rename tests/wpt/metadata/dom/ranges/{Range-mutations.html.ini => Range-mutations-dataChange.html.ini} (51%) create mode 100644 tests/wpt/metadata/dom/ranges/Range-mutations-deleteData.html.ini create mode 100644 tests/wpt/metadata/dom/ranges/Range-mutations-insertBefore.html.ini create mode 100644 tests/wpt/metadata/dom/ranges/Range-mutations-insertData.html.ini create mode 100644 tests/wpt/metadata/dom/ranges/Range-mutations-removeChild.html.ini create mode 100644 tests/wpt/metadata/dom/ranges/Range-mutations-replaceChild.html.ini create mode 100644 tests/wpt/metadata/dom/ranges/Range-mutations-replaceData.html.ini create mode 100644 tests/wpt/metadata/dom/ranges/Range-mutations-splitText.html.ini delete mode 100644 tests/wpt/metadata/domparsing/innerhtml-02.html.ini create mode 100644 tests/wpt/metadata/encoding/textdecoder-fatal-single-byte.html.ini create mode 100644 tests/wpt/metadata/eventsource/eventsource-onmessage-realm.htm.ini create mode 100644 tests/wpt/metadata/fetch/api/basic/conditional-get.html.ini create mode 100644 tests/wpt/metadata/fetch/api/basic/error-after-response.html.ini create mode 100644 tests/wpt/metadata/fetch/api/basic/integrity-sharedworker.html.ini create mode 100644 tests/wpt/metadata/fetch/api/basic/request-upload-worker.html.ini create mode 100644 tests/wpt/metadata/fetch/api/basic/request-upload.html.ini create mode 100644 tests/wpt/metadata/fetch/api/cors/cors-preflight-redirect-worker.html.ini create mode 100644 tests/wpt/metadata/fetch/api/cors/cors-preflight-redirect.html.ini create mode 100644 tests/wpt/metadata/fetch/api/cors/cors-preflight-status-worker.html.ini create mode 100644 tests/wpt/metadata/fetch/api/cors/cors-preflight-status.html.ini create mode 100644 tests/wpt/metadata/fetch/api/cors/cors-redirect-worker.html.ini create mode 100644 tests/wpt/metadata/fetch/api/cors/cors-redirect.html.ini create mode 100644 tests/wpt/metadata/fetch/api/redirect/redirect-count-worker.html.ini create mode 100644 tests/wpt/metadata/fetch/api/redirect/redirect-count.html.ini create mode 100644 tests/wpt/metadata/fetch/api/request/multi-globals/url-parsing.html.ini create mode 100644 tests/wpt/metadata/fetch/api/request/request-cache-default-conditional.html.ini create mode 100644 tests/wpt/metadata/fetch/api/request/request-cache-default.html.ini create mode 100644 tests/wpt/metadata/fetch/api/request/request-cache-force-cache.html.ini create mode 100644 tests/wpt/metadata/fetch/api/request/request-cache-only-if-cached.html.ini create mode 100644 tests/wpt/metadata/fetch/api/request/request-cache-reload.html.ini delete mode 100644 tests/wpt/metadata/fetch/api/request/request-cache.html.ini create mode 100644 tests/wpt/metadata/fetch/api/response/multi-globals/url-parsing.html.ini create mode 100644 tests/wpt/metadata/hr-time/idlharness.html.ini create mode 100644 tests/wpt/metadata/html/browsers/history/the-history-interface/history_go_to_uri.html.ini delete mode 100644 tests/wpt/metadata/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html.ini create mode 100644 tests/wpt/metadata/html/browsers/history/the-location-interface/location-prototype-setting.html.ini rename tests/wpt/metadata/html/browsers/history/the-location-interface/{security_location_0.sub.htm.ini => security_location_0.htm.ini} (81%) create mode 100644 tests/wpt/metadata/html/browsers/sandboxing/sandbox-allow-same-origin.html.ini create mode 100644 tests/wpt/metadata/html/browsers/sandboxing/sandbox-allow-scripts.html.ini create mode 100644 tests/wpt/metadata/html/browsers/sandboxing/sandbox-disallow-same-origin.html.ini rename tests/wpt/metadata/html/browsers/the-window-object/security-window/{window-security.sub.html.ini => window-security.html.ini} (99%) create mode 100644 tests/wpt/metadata/html/browsers/the-window-object/window-open-noopener.html.ini rename tests/wpt/metadata/html/browsers/windows/nested-browsing-contexts/{frameElement.sub.html.ini => frameElement.html.ini} (75%) create mode 100644 tests/wpt/metadata/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html.ini delete mode 100644 tests/wpt/metadata/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.sub.html.ini rename tests/wpt/metadata/html/dom/documents/dom-tree-accessors/{Document.currentScript.sub.html.ini => Document.currentScript.html.ini} (86%) delete mode 100644 tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-append-to-child-document.html.ini rename tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/{iframe_sandbox_popups_escaping.html.ini => iframe_sandbox_popups_escaping-1.html.ini} (81%) create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini rename tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/{iframe_sandbox_popups_nonescaping.html.ini => iframe_sandbox_popups_nonescaping-1.html.ini} (75%) create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/the-img-element/data-url.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/the-img-element/usemap-casing.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/the-object-element/usemap-casing.html.ini create mode 100644 tests/wpt/metadata/html/semantics/forms/the-form-element/form-indexed-element.html.ini create mode 100644 tests/wpt/metadata/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html.ini create mode 100644 tests/wpt/metadata/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini create mode 100644 tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-1.html.ini create mode 100644 tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini create mode 100644 tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onload-insertion-point.html.ini create mode 100644 tests/wpt/metadata/html/semantics/tabular-data/the-table-element/remove-row.html.ini create mode 100644 tests/wpt/metadata/html/webappapis/idle-callbacks/callback-exception.html.ini create mode 100644 tests/wpt/metadata/html/webappapis/idle-callbacks/callback-iframe.html.ini create mode 100644 tests/wpt/metadata/html/webappapis/idle-callbacks/callback-invoked.html.ini create mode 100644 tests/wpt/metadata/html/webappapis/idle-callbacks/callback-multiple-calls.html.ini create mode 100644 tests/wpt/metadata/html/webappapis/idle-callbacks/callback-timeout.html.ini create mode 100644 tests/wpt/metadata/html/webappapis/idle-callbacks/cancel-invoked.html.ini create mode 100644 tests/wpt/metadata/html/webappapis/idle-callbacks/idlharness.html.ini create mode 100644 tests/wpt/metadata/html/webappapis/scripting/events/messageevent-constructor.https.html.ini create mode 100644 tests/wpt/metadata/referrer-policy/no-referrer/http-rp/same-origin/http-http/img-tag/generic.keep-origin-redirect.http.html.ini create mode 100644 tests/wpt/metadata/referrer-policy/no-referrer/http-rp/same-origin/http-http/img-tag/generic.no-redirect.http.html.ini create mode 100644 tests/wpt/metadata/referrer-policy/no-referrer/http-rp/same-origin/http-http/img-tag/generic.swap-origin-redirect.http.html.ini create mode 100644 tests/wpt/metadata/referrer-policy/same-origin/attr-referrer/same-origin/http-http/img-tag/same-origin-insecure.swap-origin-redirect.http.html.ini create mode 100644 tests/wpt/metadata/referrer-policy/same-origin/http-rp/same-origin/http-http/img-tag/same-origin-insecure.swap-origin-redirect.http.html.ini create mode 100644 tests/wpt/metadata/referrer-policy/same-origin/meta-referrer/same-origin/http-http/img-tag/same-origin-insecure.swap-origin-redirect.http.html.ini create mode 100644 tests/wpt/metadata/url/a-element-xhtml.xhtml.ini create mode 100644 tests/wpt/metadata/url/a-element.html.ini create mode 100644 tests/wpt/metadata/url/url-constructor.html.ini create mode 100644 tests/wpt/metadata/websockets/multi-globals/message-received.html.ini create mode 100644 tests/wpt/metadata/workers/data-url-shared.html.ini delete mode 100644 tests/wpt/metadata/workers/interfaces/WorkerUtils/navigator/window-only.worker.js.ini create mode 100644 tests/wpt/web-platform-tests/2dcontext/compositing/2d.composite.globalAlpha.canvascopy.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.png create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html rename tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/{2d.fillStyle.parse.invalid.rgba-7.html => 2d.fillStyle.parse.invalid.css-color-4-hsl-3.html} (82%) rename tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/{2d.fillStyle.parse.invalid.rgb-7.html => 2d.fillStyle.parse.invalid.css-color-4-hsl-4.html} (82%) create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html rename tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/{2d.fillStyle.parse.invalid.rgb-4.html => 2d.fillStyle.parse.invalid.css-color-4-rgb-2.html} (82%) create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html rename tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/{2d.fillStyle.parse.invalid.rgb-5.html => 2d.fillStyle.parse.invalid.css-color-4-rgb-4.html} (82%) create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html rename tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/{2d.fillStyle.parse.invalid.rgb-6.html => 2d.fillStyle.parse.invalid.css-color-4-rgba-2.html} (82%) create mode 100644 tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html rename tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/{2d.fillStyle.parse.invalid.rgba-6.html => 2d.fillStyle.parse.invalid.hsla-3.html} (84%) create mode 100644 tests/wpt/web-platform-tests/2dcontext/line-styles/setLineDash.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/path-objects/2d.path.lineTo.nonfinite.details.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm create mode 100644 tests/wpt/web-platform-tests/IndexedDB/idbindex-rename-abort.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/idbindex-rename-errors.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/idbindex-rename.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-abort.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-errors.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-store.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/support-promises.js create mode 100644 tests/wpt/web-platform-tests/IndexedDB/transaction-abort-generator-revert.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/transaction-abort-index-metadata-revert.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/transaction-abort-multiple-metadata-revert.html create mode 100644 tests/wpt/web-platform-tests/IndexedDB/transaction-abort-object-store-metadata-revert.html create mode 100644 tests/wpt/web-platform-tests/WebIDL/current-realm.html rename tests/wpt/web-platform-tests/XMLHttpRequest/{event-upload-progress-crossorigin.sub.htm => event-upload-progress-crossorigin.htm} (100%) create mode 100644 tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-1.htm create mode 100644 tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-2.htm create mode 100644 tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-helper.js rename tests/wpt/web-platform-tests/XMLHttpRequest/{send-non-same-origin.sub.htm => send-non-same-origin.htm} (100%) create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatedImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatedValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatorImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionModifiedImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionModifiedValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentEmailImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentEmail_sha1Implemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentHomepageImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentIdImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentNameImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentNicknameImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentTypeImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.6-collectionRightsImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/3.3.6-collectionRightsValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionContextValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionFirstImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionFirstValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionIdValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLabelImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLabelValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLastImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLastValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTotalImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTotalValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTypeValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/collectionMusts-manual.html create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/collectionMusts.test create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/collectionOptionals-manual.html create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/collectionOptionals.test create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatedImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatedValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatorImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageModifiedImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageModifiedValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentEmailImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentEmail_sha1Implemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentHomepageImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentIdImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentNameImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentNicknameImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentTypeImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.6-pageRightsImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.6-pageRightsValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageContextValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageFirstImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageFirstValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageIdValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageItemsValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLabelImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLabelValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLastImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLastValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageNextImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageNextValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePartOfImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePartOfValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePrevImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePrevValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageStartIndexImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageStartIndexValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTotalImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTotalValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTypeValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/pageMusts-manual.html create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/pageMusts.test create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/pageOptionals-manual.html create mode 100644 tests/wpt/web-platform-tests/annotation-model/collections/pages/pageOptionals.test create mode 100644 tests/wpt/web-platform-tests/annotation-model/definitions/collections.json create mode 100644 tests/wpt/web-platform-tests/bluetooth/bluetooth-helpers.js create mode 100644 tests/wpt/web-platform-tests/check_stability.py create mode 100644 tests/wpt/web-platform-tests/ci_lint.sh create mode 100644 tests/wpt/web-platform-tests/ci_stability.sh create mode 100644 tests/wpt/web-platform-tests/common/dummy.xhtml create mode 100644 tests/wpt/web-platform-tests/common/dummy.xml create mode 100644 tests/wpt/web-platform-tests/compat/webkit-text-fill-color-currentColor.html rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{animate-dom-01-f-novalid.html => animate-dom-01-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{animate-dom-02-f-novalid.html => animate-dom-02-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{animate-elem-40-t-novalid.html => animate-elem-40-t-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{animate-script-elem-01-b-novalid.html => animate-script-elem-01-b-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{animate-struct-dom-01-b-novalid.html => animate-struct-dom-01-b-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{conform-viewers-02-f-novalid.html => conform-viewers-02-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{coords-dom-03-f-novalid.html => coords-dom-03-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{interact-events-02-b-novalid.html => interact-events-02-b-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{interact-pevents-01-b-novalid.html => interact-pevents-01-b-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{interact-pevents-03-b-novalid.html => interact-pevents-03-b-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{interact-pevents-05-b-novalid.html => interact-pevents-05-b-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{interact-pevents-07-t-novalid.html => interact-pevents-07-t-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{interact-pevents-08-f-novalid.html => interact-pevents-08-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{interact-pevents-09-f-novalid.html => interact-pevents-09-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{interact-pointer-01-t-novalid.html => interact-pointer-01-t-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{interact-pointer-03-t-novalid.html => interact-pointer-03-t-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{masking-path-09-b-novalid.html => masking-path-09-b-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{paths-dom-01-f-novalid.html => paths-dom-01-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{paths-dom-02-f-novalid.html => paths-dom-02-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{struct-cond-02-t-isvalid.html => struct-cond-02-t-haswarn.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{struct-dom-07-f-novalid.html => struct-dom-07-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{struct-dom-08-f-novalid.html => struct-dom-08-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{struct-dom-11-f-novalid.html => struct-dom-11-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{struct-dom-13-f-novalid.html => struct-dom-13-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{struct-dom-14-f-novalid.html => struct-dom-14-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{struct-dom-15-f-novalid.html => struct-dom-15-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{struct-dom-20-f-novalid.html => struct-dom-20-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{struct-use-13-f-novalid.html => struct-use-13-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{text-dom-02-f-novalid.html => text-dom-02-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{text-dom-05-f-novalid.html => text-dom-05-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{text-tselect-02-f-novalid.html => text-tselect-02-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{text-tselect-03-f-novalid.html => text-tselect-03-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{types-dom-02-f-novalid.html => types-dom-02-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{types-dom-03-b-novalid.html => types-dom-03-b-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{types-dom-05-b-novalid.html => types-dom-05-b-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{types-dom-07-f-novalid.html => types-dom-07-f-isvalid.html} (100%) rename tests/wpt/web-platform-tests/conformance-checkers/html-svg/{types-dom-08-f-novalid.html => types-dom-08-f-isvalid.html} (100%) create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dd/dd-hgroup-isvalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/article-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/aside-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dd-in-template-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-contains-dl-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-contains-text-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-multiple-groups-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-2-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-3-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-dl-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-text-2-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-text-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-in-p-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-isvalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dt-in-template-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/empty-div-2-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/empty-div-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/first-dd-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/footer-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h1-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h2-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h3-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h4-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h5-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h6-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/header-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/hgroup-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/last-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/mixed-div-dt-dd-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/mixed-dt-dd-div-novalid.html delete mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/model-isvalid.html delete mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/model-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/nav-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/nested-divs-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/only-dd-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/only-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/section-in-dt-novalid.html create mode 100644 tests/wpt/web-platform-tests/conformance-checkers/tools/dl.py delete mode 100644 tests/wpt/web-platform-tests/conformance-checkers/tools/index-isvalid.html create mode 100644 tests/wpt/web-platform-tests/console/OWNERS create mode 100644 tests/wpt/web-platform-tests/console/console-is-a-namespace.any.js create mode 100644 tests/wpt/web-platform-tests/content-security-policy/font-src/font-blacklisted-ref.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/font-src/font-blacklisted.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/font-src/font-whitelisted-ref.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/font-src/font-whitelisted.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/font-src/fonts.css create mode 100644 tests/wpt/web-platform-tests/content-security-policy/navigation/to-javascript-url.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_eval.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_eval.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_new_function.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_new_function.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_discard_whitelist.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_discard_whitelist.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_different_nonce.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_different_nonce.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_whitelist.sub.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_whitelist.sub.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_report_only.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_report_only.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_eval.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_eval.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_hashes.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_hashes.html.headers create mode 100644 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_meta_tag.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_meta_tag.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_new_function.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_new_function.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted_incorrect_nonce.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted_incorrect_nonce.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_correct_nonce.html create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_correct_nonce.html.headers create mode 100755 tests/wpt/web-platform-tests/content-security-policy/script-src/simpleSourcedScript.js create mode 100644 tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/blockeduri-eval.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/blockeduri-inline.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/idl.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/targeting.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/support/echo-policy.py create mode 100644 tests/wpt/web-platform-tests/content-security-policy/support/ping.js create mode 100644 tests/wpt/web-platform-tests/content-security-policy/support/testharness-helper.js create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-child.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-fallback.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-list.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-none.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-self.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/service-child.https.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/service-fallback.https.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/service-list.https.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/service-none.https.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/service-self.https.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-child.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-fallback.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-list.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-none.sub.html create mode 100644 tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-self.sub.html create mode 100644 tests/wpt/web-platform-tests/cssom/serialize-values.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/Document-createElement.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/adopted-callback.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/attribute-changed-callback.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/connected-callbacks.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/custom-element-reaction-queue.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/disconnected-callbacks.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-element-in-document-write.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-element-synchronously.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/parser/parser-fallsback-to-unknown-element.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/parser/parser-sets-attributes-and-children.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/parser/parser-uses-constructed-element.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/parser/parser-uses-registry-of-owner-document.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reaction-timing.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/Attr.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/CSSStyleDeclaration.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/ChildNode.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/DOMStringMap.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/DOMTokenList.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/Document.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/Element.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/ElementContentEditable.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/HTMLAnchorElement.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOptionElement.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOptionsCollection.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOutputElement.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/HTMLSelectElement.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableElement.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableRowElement.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableSectionElement.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTitleElement.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/NamedNodeMap.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/Node.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/ParentNode.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/Range.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/Selection.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/ShadowRoot.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js create mode 100644 tests/wpt/web-platform-tests/custom-elements/resources/empty-html-document.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/upgrading.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/upgrading/Node-cloneNode.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/upgrading/upgrading-enqueue-reactions.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/upgrading/upgrading-parser-created-element.html create mode 100644 tests/wpt/web-platform-tests/dom/events/Event-dispatch-click.html create mode 100644 tests/wpt/web-platform-tests/dom/events/Event-dispatch-other-document.html create mode 100644 tests/wpt/web-platform-tests/dom/ranges/Range-mutations-appendChild.html create mode 100644 tests/wpt/web-platform-tests/dom/ranges/Range-mutations-appendData.html create mode 100644 tests/wpt/web-platform-tests/dom/ranges/Range-mutations-dataChange.html create mode 100644 tests/wpt/web-platform-tests/dom/ranges/Range-mutations-deleteData.html create mode 100644 tests/wpt/web-platform-tests/dom/ranges/Range-mutations-insertBefore.html create mode 100644 tests/wpt/web-platform-tests/dom/ranges/Range-mutations-insertData.html create mode 100644 tests/wpt/web-platform-tests/dom/ranges/Range-mutations-removeChild.html create mode 100644 tests/wpt/web-platform-tests/dom/ranges/Range-mutations-replaceChild.html create mode 100644 tests/wpt/web-platform-tests/dom/ranges/Range-mutations-replaceData.html create mode 100644 tests/wpt/web-platform-tests/dom/ranges/Range-mutations-splitText.html rename tests/wpt/web-platform-tests/dom/ranges/{Range-mutations.html => Range-mutations.js} (95%) delete mode 100644 tests/wpt/web-platform-tests/domparsing/innerhtml-02.html create mode 100644 tests/wpt/web-platform-tests/dpub-aam/OWNERS create mode 100644 tests/wpt/web-platform-tests/dpub-aam/README.md create mode 100644 tests/wpt/web-platform-tests/dpub-aria/OWNERS create mode 100644 tests/wpt/web-platform-tests/dpub-aria/README.md create mode 100644 tests/wpt/web-platform-tests/editing/other/restoration.html rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-clear-key-invalid-license.html (95%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-clearkey-update-non-ascii-input.html (96%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-onencrypted.html (94%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-playback-encrypted-and-clear-sources.html (98%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-requestmediakeysystemaccess.html (99%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-reset-src-after-setmediakeys.html (96%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-session-closed-event.html (95%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-setmediakeys-again-after-playback.html (95%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-setmediakeys-again-after-resetting-src.html (95%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-setmediakeys-at-same-time.html (98%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html (97%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html (95%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-setmediakeys-to-multiple-video-elements.html (95%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-setmediakeys.html (96%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-syntax.html (99%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-unique-origin.html (97%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-update-disallowed-input.html (97%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-utils.js (100%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-waiting-for-a-key.html (98%) create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-events-session-closed-event.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-invalid-license.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear-sources.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential-readyState.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-requestmediakeysystemaccess.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-reset-src-after-setmediakeys.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-again-after-playback.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-again-after-resetting-src.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-at-same-time.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-different-mediakeys.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-to-multiple-video-elements.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeys.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeysession.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeysystemaccess.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-unique-origin.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-update-disallowed-input.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-waiting-for-a-key.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/clearkey-update-non-ascii-input.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_clear_dashinit.mp4 create mode 100644 tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_clear_enc_dashinit.mp4 create mode 100644 tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_enc_clear_dashinit.mp4 create mode 100644 tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_multikey_dashinit.mp4 rename tests/wpt/web-platform-tests/{html/semantics/grouping-content/.gitkeep => encrypted-media/content/video_512x288_h264-360k_multikey_key1_dashinit.mp4} (100%) create mode 100644 tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_multikey_key2_dashinit.mp4 create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-events-session-closed-event.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-expiration.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-invalid-license.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-onencrypted.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-clear-encrypted.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-encrypted-clear-sources.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-encrypted-clear.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-expired.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey-sequential-readyState.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-requestmediakeysystemaccess.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-reset-src-after-setmediakeys.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-playback.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-resetting-src.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-at-same-time.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-different-mediakeys.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-to-multiple-video-elements.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeys.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeysession.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeysystemaccess.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-unique-origin.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-mp4-waiting-for-a-key.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/drm-temporary-license-type.html create mode 100644 tests/wpt/web-platform-tests/encrypted-media/polyfill/edge-keystatuses.js rename tests/wpt/web-platform-tests/encrypted-media/polyfill/{edge-polyfill.js => edge-persistent-usage-record.js} (100%) create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/clearkey-update-non-ascii-input.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/events-session-closed-event.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/expiration.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/invalid-license.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/onencrypted.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-encrypted-clear-sources.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-expired.js delete mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multikey-multisession.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multikey-sequential.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/requestmediakeysystemaccess.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/reset-src-after-setmediakeys.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys-again-after-playback.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys-again-after-resetting-src.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys-at-same-time.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys-multiple-times-with-the-same-mediakeys.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys-to-multiple-video-elements.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/setmediakeys.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/syntax-mediakeys.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/syntax-mediakeysession.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/syntax-mediakeysystemaccess.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/temporary-license-type.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/unique-origin.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/update-disallowed-input.js create mode 100644 tests/wpt/web-platform-tests/encrypted-media/scripts/waiting-for-a-key.js create mode 100644 tests/wpt/web-platform-tests/eventsource/eventsource-onmessage-realm-support.htm create mode 100644 tests/wpt/web-platform-tests/eventsource/eventsource-onmessage-realm.htm create mode 100644 tests/wpt/web-platform-tests/fetch/api/basic/conditional-get.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/basic/error-after-response.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/basic/integrity-sharedworker.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/basic/request-upload-worker.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/basic/request-upload.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/basic/request-upload.js create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/multi-globals/current/current.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/multi-globals/incumbent/incumbent.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/multi-globals/url-parsing.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/request-cache-default-conditional.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/request-cache-default.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/request-cache-force-cache.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/request-cache-no-cache.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/request-cache-no-store.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/request-cache-only-if-cached.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/request-cache-reload.html delete mode 100644 tests/wpt/web-platform-tests/fetch/api/request/request-cache.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/request/request-cache.js create mode 100644 tests/wpt/web-platform-tests/fetch/api/resources/bad-chunk-encoding.py create mode 100644 tests/wpt/web-platform-tests/fetch/api/resources/cache.py create mode 100644 tests/wpt/web-platform-tests/fetch/api/resources/echo-content.py create mode 100644 tests/wpt/web-platform-tests/fetch/api/response/multi-globals/current/current.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/response/multi-globals/incumbent/incumbent.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/response/multi-globals/relevant/relevant.html create mode 100644 tests/wpt/web-platform-tests/fetch/api/response/multi-globals/url-parsing.html create mode 100644 tests/wpt/web-platform-tests/fonts/math/axisheight5000-verticalarrow14000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/fraction-axisheight7000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/fraction-denominatordisplaystylegapmin5000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/fraction-denominatordisplaystyleshiftdown6000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/fraction-denominatorgapmin4000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/fraction-denominatorshiftdown3000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/fraction-numeratordisplaystylegapmin8000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/fraction-numeratordisplaystyleshiftup2000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/fraction-numeratorgapmin9000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/fraction-numeratorshiftup11000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/fraction-rulethickness10000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/largeop-displayoperatorminheight5000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/limits-lowerlimitbaselinedropmin3000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/limits-lowerlimitgapmin11000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/limits-upperlimitbaselinerisemin5000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/limits-upperlimitgapmin7000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/lineheight5000-typolineheight2300.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-bold-fraktur.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-bold-italic.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-bold-sans-serif.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-bold-script.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-bold.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-double-struck.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-fraktur.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-initial.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-italic.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-looped.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-monospace.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-sans-serif-bold-italic.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-sans-serif-italic.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-sans-serif.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-script.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-stretched.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/mathvariant-tailed.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/radical-degreebottomraisepercent25-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/radical-displaystyleverticalgap7000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/radical-extraascender3000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/radical-kernafterdegreeminus5000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/radical-kernbeforedegree4000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/radical-rulethickness8000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/radical-verticalgap6000-rulethickness1000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/scripts-spaceafterscript3000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/scripts-subscriptbaselinedropmin9000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/scripts-subscriptshiftdown6000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/scripts-subscripttopmax4000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/scripts-subsuperscriptgapmin11000-superscriptbottommaxwithsubscript3000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/scripts-subsuperscriptgapmin11000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/scripts-superscriptbaselinedropmax10000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/scripts-superscriptbottommin8000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/scripts-superscriptshiftup7000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/scripts-superscriptshiftupcramped5000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stack-axisheight7000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stack-bottomdisplaystyleshiftdown5000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stack-bottomshiftdown6000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stack-displaystylegapmin4000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stack-gapmin8000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stack-topdisplaystyleshiftup3000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stack-topshiftup9000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stretchstack-bottomshiftdown3000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stretchstack-gapabovemin7000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stretchstack-gapbelowmin11000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/stretchstack-topshiftup5000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/underover-accentbaseheight4000-overbarextraascender3000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/underover-accentbaseheight4000-overbarverticalgap11000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/underover-accentbaseheight4000-underbarextradescender5000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/underover-accentbaseheight4000-underbarverticalgap7000.woff create mode 100644 tests/wpt/web-platform-tests/fonts/math/xheight500.woff create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/document-fullscreen-element-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenchange-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-enabled-flag-not-set-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-iframe-child-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-iframe-child-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-not-in-document-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-svg-rect-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-svg-svg-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-top-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/model/remove-child-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/model/remove-first-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/model/remove-last-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/model/remove-parent-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/model/remove-single-manual.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/trusted-click.js create mode 100644 tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_to_uri-1.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_to_uri.html rename tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/{traverse_the_session_history_unload_prompt_1.html => traverse_the_session_history_unload_prompt_1-manual.html} (100%) create mode 100644 tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-setting.html rename tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/{security_location_0.sub.htm => security_location_0.htm} (100%) create mode 100644 tests/wpt/web-platform-tests/html/browsers/sandboxing/inner-iframe.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-allow-same-origin.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-allow-scripts.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-disallow-same-origin.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-disallow-scripts.html rename tests/wpt/web-platform-tests/html/browsers/the-window-object/security-window/{window-security.sub.html => window-security.html} (100%) create mode 100644 tests/wpt/web-platform-tests/html/browsers/the-window-object/support/noopener-target.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/the-window-object/window-open-noopener.html rename tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/{frameElement.sub.html => frameElement.html} (100%) create mode 100644 tests/wpt/web-platform-tests/html/browsers/windows/support-open-cross-origin.sub.html rename tests/wpt/web-platform-tests/html/browsers/windows/{targeting-cross-origin-nested-browsing-contexts.sub.html => targeting-cross-origin-nested-browsing-contexts.html} (100%) create mode 100644 tests/wpt/web-platform-tests/html/browsers/windows/targeting-multiple-cross-origin-manual.sub.html rename tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/{Document.currentScript.sub.html => Document.currentScript.html} (100%) create mode 100644 tests/wpt/web-platform-tests/html/editing/activation/click-manual.html create mode 100644 tests/wpt/web-platform-tests/html/editing/focus/processing-model/focus-fixup-rule-one-no-dialogs.html create mode 100644 tests/wpt/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/historical.html rename tests/wpt/web-platform-tests/html/semantics/document-metadata/the-base-element/{base_href_specified.sub.html => base_href_specified.html} (100%) create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-embed-element/historical.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe-append-to-child-document.html rename tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/{iframe_sandbox_popups_escaping.html => iframe_sandbox_popups_escaping-1.html} (98%) create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html rename tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/{iframe_sandbox_popups_helper.html => iframe_sandbox_popups_helper-1.html} (96%) create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_helper-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_helper-3.html rename tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/{iframe_sandbox_popups_nonescaping.html => iframe_sandbox_popups_nonescaping-1.html} (90%) create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/data-url.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/usemap-casing.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-object-element/historical.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-object-element/usemap-casing.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered.html delete mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/.gitkeep create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1d.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1e.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-popup.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-1.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/data-url.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-1.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onload-insertion-point.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onerror-insertion-point-1-helper.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onerror-insertion-point-2-helper.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onload-insertion-point-helper.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onload-insertion-point-helper.js create mode 100644 tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-exception.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-iframe.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-invoked.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-multiple-calls.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-timeout.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/cancel-invoked.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/idlharness.html create mode 100644 tests/wpt/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https.html create mode 100644 tests/wpt/web-platform-tests/imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html create mode 100644 tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-creation-with-alpha.html create mode 100644 tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-creation.html create mode 100644 tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-preserves-canvas.html create mode 100644 tests/wpt/web-platform-tests/imagebitmap-renderingcontext/tranferFromImageBitmap-null.html create mode 100644 tests/wpt/web-platform-tests/imagebitmap-renderingcontext/transferFromImageBitmap-detached.html create mode 100644 tests/wpt/web-platform-tests/mathml/README.md create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-parameters-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-parameters-2.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-axis-height-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/radicals/root-parameters-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/subsup-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/subsup-2.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/subsup-3.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/subsup-4.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/subsup-5.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/subsup-parameters-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/underover-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/underover-parameters-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/underover-parameters-2.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/underover-parameters-3.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/underover-parameters-4.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/spaces/space-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/spaces/space-2-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/spaces/space-2.html create mode 100644 tests/wpt/web-platform-tests/mathml/presentation-markup/tables/table-axis-height.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/color-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/color-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/display-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/display-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/displaystyle-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/lengths-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/lengths-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/lengths-2-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/lengths-2.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/lengths-3.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-bold-fraktur.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-bold-italic-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-bold-italic.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-bold-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-bold-sans-serif-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-bold-sans-serif.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-bold-script-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-bold-script.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-bold.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-double-struck-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-double-struck.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-fraktur-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-fraktur.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-initial-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-initial.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-italic-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-italic.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-looped-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-looped.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-monospace-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-monospace.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-sans-serif-italic-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-sans-serif-italic.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-sans-serif-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-sans-serif.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-script-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-script.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-stretched-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-stretched.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-tailed-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/mathvariant-tailed.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/visibility-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/css-styling/visibility-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/class-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/class-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/class-2.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/color-attributes-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/color-attributes-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/display-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/dynamic-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/dynamic-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-2-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-click-2.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/href-manual.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/integration-point-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/integration-point-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/integration-point-2-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/integration-point-2.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/integration-point-3-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/integration-point-3.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/required-extensions-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/required-extensions-2-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/required-extensions-2.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/unique-identifier-1-iframe.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/unique-identifier-1-ref-iframe.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/unique-identifier-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/unique-identifier-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/unique-identifier-2.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/unique-identifier-3-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/html5-tree/unique-identifier-3.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/text-and-math/use-typo-metrics-1-ref.html create mode 100644 tests/wpt/web-platform-tests/mathml/relations/text-and-math/use-typo-metrics-1.html create mode 100644 tests/wpt/web-platform-tests/mathml/tools/axisheight.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/fractions.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/largeop.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/limits.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/mathvariant-transforms.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/radicals.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/scripts.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/stacks.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/stretchstacks.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/underover.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/use-typo-lineheight.py rename tests/wpt/web-platform-tests/{html/semantics/grouping-content/the-li-element/.gitkeep => mathml/tools/utils/__init__.py} (100%) create mode 100644 tests/wpt/web-platform-tests/mathml/tools/utils/mathfont.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/utils/misc.py create mode 100644 tests/wpt/web-platform-tests/mathml/tools/xHeight.py create mode 100644 tests/wpt/web-platform-tests/mediacapture-record/BlobEvent-constructor.html create mode 100644 tests/wpt/web-platform-tests/mediacapture-record/OWNERS create mode 100644 tests/wpt/web-platform-tests/performance-timeline/case-sensitivity.html create mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_element_haspointercapture_release_pending_capture-manual.html rename tests/wpt/web-platform-tests/pointerevents/{pointerevent_pointermove-on-chorded-mouse-button.html => pointerevent_pointermove_on_chorded_mouse_button-manual.html} (100%) create mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_releasepointercapture_release_right_after_capture-manual.html create mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_override_pending_capture_element-manual.html create mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_to_same_element_twice-manual.html create mode 100644 tests/wpt/web-platform-tests/pointerlock/pointerlock_shadow-manual.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_onconnectionavailable-manual.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/common.js delete mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/reconnectToPresentation_error-manual.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/reconnectToPresentation_notfound_error.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/startNewPresentation_displaynotallowed-manual.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/startNewPresentation_displaynotfound-manual.html delete mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/startNewPresentation_error-manual.html create mode 100644 tests/wpt/web-platform-tests/presentation-api/controlling-ua/startNewPresentation_unsettledpromise-manual.html create mode 100644 tests/wpt/web-platform-tests/resource-timing/resources/gzip_xml.py create mode 100644 tests/wpt/web-platform-tests/secure-contexts/basic-dedicated-worker.html create mode 100644 tests/wpt/web-platform-tests/secure-contexts/basic-dedicated-worker.https.html create mode 100644 tests/wpt/web-platform-tests/secure-contexts/basic-shared-worker.html create mode 100644 tests/wpt/web-platform-tests/secure-contexts/basic-shared-worker.https.html create mode 100644 tests/wpt/web-platform-tests/secure-contexts/shared-worker-insecure-first.https.html create mode 100644 tests/wpt/web-platform-tests/secure-contexts/shared-worker-secure-first.https.html create mode 100644 tests/wpt/web-platform-tests/secure-contexts/support/dedicated-worker-script.js create mode 100644 tests/wpt/web-platform-tests/secure-contexts/support/https-subframe-dedicated.html create mode 100644 tests/wpt/web-platform-tests/secure-contexts/support/https-subframe-shared.html create mode 100644 tests/wpt/web-platform-tests/secure-contexts/support/parent-dedicated-worker-script.js create mode 100644 tests/wpt/web-platform-tests/secure-contexts/support/parent-shared-worker-script.js create mode 100644 tests/wpt/web-platform-tests/secure-contexts/support/shared-worker-insecure-popup.html create mode 100644 tests/wpt/web-platform-tests/secure-contexts/support/shared-worker-script.js create mode 100644 tests/wpt/web-platform-tests/selectors/child-indexed-pseudo-class.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/serviceworker-message-event-historical.https.html delete mode 100644 tests/wpt/web-platform-tests/svg/import/shapes-rect-01-t-manual.svg create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-a-element-attr-change.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-a-element-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-feImage-element-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-feImage-element.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-filter-element-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-filter-element.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-gradient-element-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-gradient-element.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-image-element-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-image-element.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-pattern-element-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-pattern-element.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-textPath-element-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-textPath-element.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-use-element-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/href-use-element.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/scripted/href-animate-element.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/scripted/href-mpath-element.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/scripted/href-script-element-markup.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/scripted/href-script-element.html create mode 100644 tests/wpt/web-platform-tests/svg/linking/scripted/testScripts/dummyScript.js create mode 100644 tests/wpt/web-platform-tests/svg/linking/scripted/testScripts/externalScript1.js create mode 100644 tests/wpt/web-platform-tests/svg/linking/scripted/testScripts/externalScript2.js create mode 100644 tests/wpt/web-platform-tests/svg/linking/scripted/testcommon.js create mode 100644 tests/wpt/web-platform-tests/svg/shapes/rect-01-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/shapes/rect-01.svg create mode 100644 tests/wpt/web-platform-tests/svg/shapes/rect-02-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/shapes/rect-02.svg create mode 100644 tests/wpt/web-platform-tests/svg/shapes/rect-03-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/shapes/rect-03.svg create mode 100644 tests/wpt/web-platform-tests/svg/shapes/rect-04-ref.html create mode 100644 tests/wpt/web-platform-tests/svg/shapes/rect-04.svg create mode 100644 tests/wpt/web-platform-tests/tools/appveyor.yml create mode 100644 tests/wpt/web-platform-tests/tools/lint/fnmatch.py create mode 100644 tests/wpt/web-platform-tests/tools/lint/tests/base.py create mode 100644 tests/wpt/web-platform-tests/tools/manifest/tests/test_utils.py create mode 100644 tests/wpt/web-platform-tests/tools/webdriver/COPYING create mode 100644 tests/wpt/web-platform-tests/uievents/order-of-events/focus-events/focus-contained-manual.html create mode 100644 tests/wpt/web-platform-tests/uievents/order-of-events/mouse-events/click-cancel-manual.html create mode 100644 tests/wpt/web-platform-tests/uievents/order-of-events/mouse-events/click-order-manual.html create mode 100644 tests/wpt/web-platform-tests/uievents/order-of-events/mouse-events/mousemove-across-manual.html create mode 100644 tests/wpt/web-platform-tests/uievents/order-of-events/mouse-events/mousemove-between-manual.html create mode 100644 tests/wpt/web-platform-tests/web-animations/interfaces/Animation/effect.html create mode 100644 tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/iterationComposite.html create mode 100644 tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/spacing.html create mode 100644 tests/wpt/web-platform-tests/web-animations/timing-model/animations/set-the-target-effect-of-an-animation.html create mode 100644 tests/wpt/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html create mode 100644 tests/wpt/web-platform-tests/webauthn/interfaces.https.html create mode 100644 tests/wpt/web-platform-tests/webauthn/interfaces.idl create mode 100644 tests/wpt/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html create mode 100644 tests/wpt/web-platform-tests/websockets/multi-globals/message-received.html create mode 100644 tests/wpt/web-platform-tests/websockets/multi-globals/support/incumbent.sub.html create mode 100644 tests/wpt/web-platform-tests/websockets/multi-globals/support/relevant.html create mode 100644 tests/wpt/web-platform-tests/workers/Worker_ErrorEvent_error.htm create mode 100644 tests/wpt/web-platform-tests/workers/data-url-shared.html create mode 100644 tests/wpt/web-platform-tests/workers/data-url.html delete mode 100644 tests/wpt/web-platform-tests/workers/interfaces/WorkerUtils/navigator/window-only.worker.js create mode 100644 tests/wpt/web-platform-tests/workers/support/ErrorEvent-error.js diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html.ini new file mode 100644 index 00000000000..0a475462eca --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsl-1.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsl-1] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html.ini new file mode 100644 index 00000000000..315f1b77815 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsl-2.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsl-2] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html.ini new file mode 100644 index 00000000000..6d0c4fe4879 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsl-3.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsl-3] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html.ini new file mode 100644 index 00000000000..f13a1878cb0 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsl-4.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsl-4] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html.ini new file mode 100644 index 00000000000..b3b4fa258ea --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsl-5.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsl-5] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html.ini new file mode 100644 index 00000000000..979b13418d2 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsl-6.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsl-6] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html.ini new file mode 100644 index 00000000000..346881a91d3 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsl-7.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsl-7] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html.ini new file mode 100644 index 00000000000..77331fbc02a --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsl-8.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsl-8] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html.ini new file mode 100644 index 00000000000..f06dce0fa82 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsl-9.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsl-9] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html.ini new file mode 100644 index 00000000000..07eff7c118c --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsla-1.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsla-1] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html.ini new file mode 100644 index 00000000000..2074d83d9c5 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsla-2.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsla-2] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html.ini new file mode 100644 index 00000000000..629b598de19 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsla-3.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsla-3] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html.ini new file mode 100644 index 00000000000..5ecb867f752 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsla-4.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsla-4] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html.ini new file mode 100644 index 00000000000..73ec9374c24 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsla-5.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsla-5] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html.ini new file mode 100644 index 00000000000..2a9e01d706c --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsla-6.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsla-6] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html.ini new file mode 100644 index 00000000000..84cb1a69296 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsla-7.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsla-7] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html.ini new file mode 100644 index 00000000000..5736436b063 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsla-8.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsla-8] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html.ini new file mode 100644 index 00000000000..684d29b06c4 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-hsla-9.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-hsla-9] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html.ini new file mode 100644 index 00000000000..ccef8774341 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgb-1.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgb-1] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html.ini new file mode 100644 index 00000000000..01bb5fd598c --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgb-2.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgb-2] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html.ini new file mode 100644 index 00000000000..4f27a04d6ec --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgb-3.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgb-3] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html.ini new file mode 100644 index 00000000000..25e2f86c36e --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgb-4.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgb-4] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html.ini new file mode 100644 index 00000000000..0c9af172107 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgb-5.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgb-5] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html.ini new file mode 100644 index 00000000000..2e9d183a6ee --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgb-6.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgb-6] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html.ini new file mode 100644 index 00000000000..774515ed0f0 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgba-1.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgba-1] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html.ini new file mode 100644 index 00000000000..2059cb3cdc8 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgba-3.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgba-3] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html.ini new file mode 100644 index 00000000000..66054fea435 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgba-4.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgba-4] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html.ini new file mode 100644 index 00000000000..f1886f1771a --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgba-5.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgba-5] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html.ini new file mode 100644 index 00000000000..a45a7f41e47 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html.ini @@ -0,0 +1,5 @@ +[2d.fillStyle.parse.css-color-4-rgba-6.html] + type: testharness + [Canvas test: 2d.fillStyle.parse.css-color-4-rgba-6] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/line-styles/setLineDash.html.ini b/tests/wpt/metadata/2dcontext/line-styles/setLineDash.html.ini new file mode 100644 index 00000000000..8ed6b0a36ab --- /dev/null +++ b/tests/wpt/metadata/2dcontext/line-styles/setLineDash.html.ini @@ -0,0 +1,8 @@ +[setLineDash.html] + type: testharness + [Invalid arguments to setLineDash()] + expected: FAIL + + [setLineDash] + expected: FAIL + diff --git a/tests/wpt/metadata/FileAPI/FileReaderSync.worker.js.ini b/tests/wpt/metadata/FileAPI/FileReaderSync.worker.js.ini index 249873f6547..4643890d804 100644 --- a/tests/wpt/metadata/FileAPI/FileReaderSync.worker.js.ini +++ b/tests/wpt/metadata/FileAPI/FileReaderSync.worker.js.ini @@ -1,4 +1,4 @@ -[FileReaderSync.worker] +[FileReaderSync.worker.html] type: testharness [readAsText] expected: FAIL diff --git a/tests/wpt/metadata/FileAPI/idlharness.worker.js.ini b/tests/wpt/metadata/FileAPI/idlharness.worker.js.ini index 8e58f76bca3..fc33de592fa 100644 --- a/tests/wpt/metadata/FileAPI/idlharness.worker.js.ini +++ b/tests/wpt/metadata/FileAPI/idlharness.worker.js.ini @@ -1,39 +1,9 @@ -[idlharness.worker] +[idlharness.worker.html] type: testharness - [URL interface: operation createFor(Blob)] - expected: FAIL - - [FileReaderSync interface: operation readAsArrayBuffer(Blob)] - expected: FAIL - - [FileReaderSync interface: operation readAsText(Blob,DOMString)] - expected: FAIL - - [FileReaderSync interface: operation readAsDataURL(Blob)] - expected: FAIL - - [FileReaderSync interface: new FileReaderSync() must inherit property "readAsArrayBuffer" with the proper type (0)] - expected: FAIL - - [FileReaderSync interface: calling readAsArrayBuffer(Blob) on new FileReaderSync() with too few arguments must throw TypeError] - expected: FAIL - - [FileReaderSync interface: new FileReaderSync() must inherit property "readAsText" with the proper type (1)] - expected: FAIL - - [FileReaderSync interface: calling readAsText(Blob,DOMString) on new FileReaderSync() with too few arguments must throw TypeError] - expected: FAIL - - [FileReaderSync interface: new FileReaderSync() must inherit property "readAsDataURL" with the proper type (2)] - expected: FAIL - - [FileReaderSync interface: calling readAsDataURL(Blob) on new FileReaderSync() with too few arguments must throw TypeError] - expected: FAIL - [ArrayBuffer interface: existence and properties of interface object] expected: FAIL - [URL interface: existence and properties of interface object] + [URL interface: operation createFor(Blob)] expected: FAIL [EventTarget interface: existence and properties of interface object] @@ -51,9 +21,24 @@ [FileReader interface: calling readAsBinaryString(Blob) on new FileReader() with too few arguments must throw TypeError] expected: FAIL + [FileReaderSync interface: operation readAsArrayBuffer(Blob)] + expected: FAIL + [FileReaderSync interface: operation readAsBinaryString(Blob)] expected: FAIL + [FileReaderSync interface: operation readAsText(Blob,DOMString)] + expected: FAIL + + [FileReaderSync interface: operation readAsDataURL(Blob)] + expected: FAIL + + [FileReaderSync interface: new FileReaderSync() must inherit property "readAsArrayBuffer" with the proper type (0)] + expected: FAIL + + [FileReaderSync interface: calling readAsArrayBuffer(Blob) on new FileReaderSync() with too few arguments must throw TypeError] + expected: FAIL + [FileReaderSync interface: new FileReaderSync() must inherit property "readAsBinaryString" with the proper type (1)] expected: FAIL @@ -63,6 +48,12 @@ [FileReaderSync interface: new FileReaderSync() must inherit property "readAsText" with the proper type (2)] expected: FAIL + [FileReaderSync interface: calling readAsText(Blob,DOMString) on new FileReaderSync() with too few arguments must throw TypeError] + expected: FAIL + [FileReaderSync interface: new FileReaderSync() must inherit property "readAsDataURL" with the proper type (3)] expected: FAIL + [FileReaderSync interface: calling readAsDataURL(Blob) on new FileReaderSync() with too few arguments must throw TypeError] + expected: FAIL + diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index fe62fb8536a..ec8882320d8 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -113,6 +113,22 @@ "path": "annotation-model/annotations/annotationsAgentOptionals-manual.html", "url": "/annotation-model/annotations/annotationsAgentOptionals-manual.html" }, + { + "path": "annotation-model/collections/collectionMusts-manual.html", + "url": "/annotation-model/collections/collectionMusts-manual.html" + }, + { + "path": "annotation-model/collections/collectionOptionals-manual.html", + "url": "/annotation-model/collections/collectionOptionals-manual.html" + }, + { + "path": "annotation-model/collections/pages/pageMusts-manual.html", + "url": "/annotation-model/collections/pages/pageMusts-manual.html" + }, + { + "path": "annotation-model/collections/pages/pageOptionals-manual.html", + "url": "/annotation-model/collections/pages/pageOptionals-manual.html" + }, { "path": "annotation-protocol/server/server-manual.html", "url": "/annotation-protocol/server/server-manual.html" @@ -137,6 +153,82 @@ "path": "battery-status/battery-unplugging-manual.html", "url": "/battery-status/battery-unplugging-manual.html" }, + { + "path": "fullscreen/api/document-exit-fullscreen-manual.html", + "url": "/fullscreen/api/document-exit-fullscreen-manual.html" + }, + { + "path": "fullscreen/api/document-fullscreen-element-manual.html", + "url": "/fullscreen/api/document-fullscreen-element-manual.html" + }, + { + "path": "fullscreen/api/document-onfullscreenchange-manual.html", + "url": "/fullscreen/api/document-onfullscreenchange-manual.html" + }, + { + "path": "fullscreen/api/element-ready-check-containing-iframe-manual.html", + "url": "/fullscreen/api/element-ready-check-containing-iframe-manual.html" + }, + { + "path": "fullscreen/api/element-ready-check-enabled-flag-not-set-manual.html", + "url": "/fullscreen/api/element-ready-check-enabled-flag-not-set-manual.html" + }, + { + "path": "fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html", + "url": "/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html" + }, + { + "path": "fullscreen/api/element-ready-check-fullscreen-iframe-child-manual.html", + "url": "/fullscreen/api/element-ready-check-fullscreen-iframe-child-manual.html" + }, + { + "path": "fullscreen/api/element-ready-check-iframe-child-manual.html", + "url": "/fullscreen/api/element-ready-check-iframe-child-manual.html" + }, + { + "path": "fullscreen/api/element-ready-check-not-in-document-manual.html", + "url": "/fullscreen/api/element-ready-check-not-in-document-manual.html" + }, + { + "path": "fullscreen/api/element-request-fullscreen-manual.html", + "url": "/fullscreen/api/element-request-fullscreen-manual.html" + }, + { + "path": "fullscreen/api/element-request-fullscreen-non-top-manual.html", + "url": "/fullscreen/api/element-request-fullscreen-non-top-manual.html" + }, + { + "path": "fullscreen/api/element-request-fullscreen-svg-rect-manual.html", + "url": "/fullscreen/api/element-request-fullscreen-svg-rect-manual.html" + }, + { + "path": "fullscreen/api/element-request-fullscreen-svg-svg-manual.html", + "url": "/fullscreen/api/element-request-fullscreen-svg-svg-manual.html" + }, + { + "path": "fullscreen/api/element-request-fullscreen-top-manual.html", + "url": "/fullscreen/api/element-request-fullscreen-top-manual.html" + }, + { + "path": "fullscreen/model/remove-child-manual.html", + "url": "/fullscreen/model/remove-child-manual.html" + }, + { + "path": "fullscreen/model/remove-first-manual.html", + "url": "/fullscreen/model/remove-first-manual.html" + }, + { + "path": "fullscreen/model/remove-last-manual.html", + "url": "/fullscreen/model/remove-last-manual.html" + }, + { + "path": "fullscreen/model/remove-parent-manual.html", + "url": "/fullscreen/model/remove-parent-manual.html" + }, + { + "path": "fullscreen/model/remove-single-manual.html", + "url": "/fullscreen/model/remove-single-manual.html" + }, { "path": "gamepad/events-manual.html", "url": "/gamepad/events-manual.html" @@ -293,6 +385,10 @@ "path": "html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_2-manual.html", "url": "/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_2-manual.html" }, + { + "path": "html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1-manual.html", + "url": "/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1-manual.html" + }, { "path": "html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-manual.html", "url": "/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-manual.html" @@ -413,10 +509,22 @@ "path": "html/browsers/the-window-object/the-windowproxy-object/test-window-proxy-toolbar-manual.html", "url": "/html/browsers/the-window-object/the-windowproxy-object/test-window-proxy-toolbar-manual.html" }, + { + "path": "html/browsers/windows/noreferrer-cross-origin-close-manual.sub.html", + "url": "/html/browsers/windows/noreferrer-cross-origin-close-manual.sub.html" + }, { "path": "html/browsers/windows/noreferrer-cross-origin-manual.html", "url": "/html/browsers/windows/noreferrer-cross-origin-manual.html" }, + { + "path": "html/browsers/windows/targeting-multiple-cross-origin-manual.sub.html", + "url": "/html/browsers/windows/targeting-multiple-cross-origin-manual.sub.html" + }, + { + "path": "html/editing/activation/click-manual.html", + "url": "/html/editing/activation/click-manual.html" + }, { "path": "html/editing/dnd/datastore/015-manual.html", "url": "/html/editing/dnd/datastore/015-manual.html" @@ -833,6 +941,14 @@ "path": "html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual.html", "url": "/html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual.html" }, + { + "path": "mathml/relations/html5-tree/href-manual.html", + "url": "/mathml/relations/html5-tree/href-manual.html" + }, + { + "path": "mediacapture-streams/MediaStream-id-manual.https.html", + "url": "/mediacapture-streams/MediaStream-id-manual.https.html" + }, { "path": "notifications/body-basic-manual.html", "url": "/notifications/body-basic-manual.html" @@ -1081,6 +1197,10 @@ "path": "pointerevents/pointerevent_element_haspointercapture-manual.html", "url": "/pointerevents/pointerevent_element_haspointercapture-manual.html" }, + { + "path": "pointerevents/pointerevent_element_haspointercapture_release_pending_capture-manual.html", + "url": "/pointerevents/pointerevent_element_haspointercapture_release_pending_capture-manual.html" + }, { "path": "pointerevents/pointerevent_gotpointercapture_before_first_pointerevent-manual.html", "url": "/pointerevents/pointerevent_gotpointercapture_before_first_pointerevent-manual.html" @@ -1137,6 +1257,10 @@ "path": "pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown-manual.html", "url": "/pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown-manual.html" }, + { + "path": "pointerevents/pointerevent_pointermove_on_chorded_mouse_button-manual.html", + "url": "/pointerevents/pointerevent_pointermove_on_chorded_mouse_button-manual.html" + }, { "path": "pointerevents/pointerevent_pointerout_after_pointercancel_touch-manual.html", "url": "/pointerevents/pointerevent_pointerout_after_pointercancel_touch-manual.html" @@ -1165,6 +1289,10 @@ "path": "pointerevents/pointerevent_releasepointercapture_onpointerup_mouse-manual.html", "url": "/pointerevents/pointerevent_releasepointercapture_onpointerup_mouse-manual.html" }, + { + "path": "pointerevents/pointerevent_releasepointercapture_release_right_after_capture-manual.html", + "url": "/pointerevents/pointerevent_releasepointercapture_release_right_after_capture-manual.html" + }, { "path": "pointerevents/pointerevent_setpointercapture_disconnected-manual.html", "url": "/pointerevents/pointerevent_setpointercapture_disconnected-manual.html" @@ -1177,10 +1305,18 @@ "path": "pointerevents/pointerevent_setpointercapture_invalid_pointerid-manual.html", "url": "/pointerevents/pointerevent_setpointercapture_invalid_pointerid-manual.html" }, + { + "path": "pointerevents/pointerevent_setpointercapture_override_pending_capture_element-manual.html", + "url": "/pointerevents/pointerevent_setpointercapture_override_pending_capture_element-manual.html" + }, { "path": "pointerevents/pointerevent_setpointercapture_relatedtarget-manual.html", "url": "/pointerevents/pointerevent_setpointercapture_relatedtarget-manual.html" }, + { + "path": "pointerevents/pointerevent_setpointercapture_to_same_element_twice-manual.html", + "url": "/pointerevents/pointerevent_setpointercapture_to_same_element_twice-manual.html" + }, { "path": "pointerevents/pointerevent_suppress_compat_events_on_click-manual.html", "url": "/pointerevents/pointerevent_suppress_compat_events_on_click-manual.html" @@ -1309,6 +1445,10 @@ "path": "pointerlock/pointerlock_remove_target-manual.html", "url": "/pointerlock/pointerlock_remove_target-manual.html" }, + { + "path": "pointerlock/pointerlock_shadow-manual.html", + "url": "/pointerlock/pointerlock_shadow-manual.html" + }, { "path": "presentation-api/controlling-ua/PresentationConnection_onclosed-manual.html", "url": "/presentation-api/controlling-ua/PresentationConnection_onclosed-manual.html" @@ -1322,20 +1462,32 @@ "url": "/presentation-api/controlling-ua/PresentationConnection_onterminated-manual.html" }, { - "path": "presentation-api/controlling-ua/defaultRequest_success-manual.html", - "url": "/presentation-api/controlling-ua/defaultRequest_success-manual.html" + "path": "presentation-api/controlling-ua/PresentationRequest_onconnectionavailable-manual.html", + "url": "/presentation-api/controlling-ua/PresentationRequest_onconnectionavailable-manual.html" }, { - "path": "presentation-api/controlling-ua/reconnectToPresentation_error-manual.html", - "url": "/presentation-api/controlling-ua/reconnectToPresentation_error-manual.html" + "path": "presentation-api/controlling-ua/defaultRequest_success-manual.html", + "url": "/presentation-api/controlling-ua/defaultRequest_success-manual.html" }, { "path": "presentation-api/controlling-ua/reconnectToPresentation_success-manual.html", "url": "/presentation-api/controlling-ua/reconnectToPresentation_success-manual.html" }, { - "path": "presentation-api/controlling-ua/startNewPresentation_error-manual.html", - "url": "/presentation-api/controlling-ua/startNewPresentation_error-manual.html" + "path": "presentation-api/controlling-ua/startNewPresentation_displaynotallowed-manual.html", + "url": "/presentation-api/controlling-ua/startNewPresentation_displaynotallowed-manual.html" + }, + { + "path": "presentation-api/controlling-ua/startNewPresentation_displaynotfound-manual.html", + "url": "/presentation-api/controlling-ua/startNewPresentation_displaynotfound-manual.html" + }, + { + "path": "presentation-api/controlling-ua/startNewPresentation_mixedcontent-manual.https.html", + "url": "/presentation-api/controlling-ua/startNewPresentation_mixedcontent-manual.https.html" + }, + { + "path": "presentation-api/controlling-ua/startNewPresentation_mixedcontent_multiple-manual.https.html", + "url": "/presentation-api/controlling-ua/startNewPresentation_mixedcontent_multiple-manual.https.html" }, { "path": "presentation-api/controlling-ua/startNewPresentation_sandboxing_error-manual.html", @@ -1349,6 +1501,10 @@ "path": "presentation-api/controlling-ua/startNewPresentation_success-manual.html", "url": "/presentation-api/controlling-ua/startNewPresentation_success-manual.html" }, + { + "path": "presentation-api/controlling-ua/startNewPresentation_unsettledpromise-manual.html", + "url": "/presentation-api/controlling-ua/startNewPresentation_unsettledpromise-manual.html" + }, { "path": "quirks-mode/active-and-hover-manual.html", "url": "/quirks-mode/active-and-hover-manual.html" @@ -2761,10 +2917,6 @@ "path": "svg/import/shapes-polyline-02-t-manual.svg", "url": "/svg/import/shapes-polyline-02-t-manual.svg" }, - { - "path": "svg/import/shapes-rect-01-t-manual.svg", - "url": "/svg/import/shapes-rect-01-t-manual.svg" - }, { "path": "svg/import/shapes-rect-02-t-manual.svg", "url": "/svg/import/shapes-rect-02-t-manual.svg" @@ -3477,6 +3629,10 @@ "path": "uievents/keyboard/key-manual.js", "url": "/uievents/keyboard/key-manual.js" }, + { + "path": "uievents/order-of-events/focus-events/focus-contained-manual.html", + "url": "/uievents/order-of-events/focus-events/focus-contained-manual.html" + }, { "path": "uievents/order-of-events/focus-events/focus-manual.html", "url": "/uievents/order-of-events/focus-events/focus-manual.html" @@ -3485,6 +3641,10 @@ "path": "uievents/order-of-events/focus-events/legacy-manual.html", "url": "/uievents/order-of-events/focus-events/legacy-manual.html" }, + { + "path": "uievents/order-of-events/mouse-events/click-cancel-manual.html", + "url": "/uievents/order-of-events/mouse-events/click-cancel-manual.html" + }, { "path": "uievents/order-of-events/mouse-events/click-on-body-manual.html", "url": "/uievents/order-of-events/mouse-events/click-on-body-manual.html" @@ -3497,10 +3657,22 @@ "path": "uievents/order-of-events/mouse-events/click-on-html-manual.html", "url": "/uievents/order-of-events/mouse-events/click-on-html-manual.html" }, + { + "path": "uievents/order-of-events/mouse-events/click-order-manual.html", + "url": "/uievents/order-of-events/mouse-events/click-order-manual.html" + }, { "path": "uievents/order-of-events/mouse-events/mouseevents-mousemove-manual.htm", "url": "/uievents/order-of-events/mouse-events/mouseevents-mousemove-manual.htm" }, + { + "path": "uievents/order-of-events/mouse-events/mousemove-across-manual.html", + "url": "/uievents/order-of-events/mouse-events/mousemove-across-manual.html" + }, + { + "path": "uievents/order-of-events/mouse-events/mousemove-between-manual.html", + "url": "/uievents/order-of-events/mouse-events/mousemove-between-manual.html" + }, { "path": "uievents/order-of-events/mouse-events/mouseover-out-manual.html", "url": "/uievents/order-of-events/mouse-events/mouseover-out-manual.html" @@ -4015,6 +4187,26 @@ ], "url": "/compat/webkit-text-fill-color-property-006.html" }, + { + "path": "content-security-policy/font-src/font-blacklisted.html", + "references": [ + [ + "/content-security-policy/font-src/font-blacklisted-ref.html", + "!=" + ] + ], + "url": "/content-security-policy/font-src/font-blacklisted.html" + }, + { + "path": "content-security-policy/font-src/font-whitelisted.html", + "references": [ + [ + "/content-security-policy/font-src/font-whitelisted-ref.html", + "==" + ] + ], + "url": "/content-security-policy/font-src/font-whitelisted.html" + }, { "path": "custom-elements/v0/registering/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-custom-tag.html", "references": [ @@ -5535,6 +5727,26 @@ ], "url": "/html/rendering/replaced-elements/images/space.html" }, + { + "path": "html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html", + "references": [ + [ + "/html/semantics/document-metadata/the-link-element/stylesheet-empty-href-ref.html", + "==" + ] + ], + "url": "/html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html" + }, + { + "path": "html/semantics/document-metadata/the-link-element/stylesheet-media.html", + "references": [ + [ + "/html/semantics/document-metadata/the-link-element/stylesheet-media-ref.html", + "==" + ] + ], + "url": "/html/semantics/document-metadata/the-link-element/stylesheet-media.html" + }, { "path": "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html", "references": [ @@ -5745,6 +5957,106 @@ ], "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-002.html" }, + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item.html" + }, + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu.html" + }, + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed.html" + }, + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir.html" + }, + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol.html" + }, + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent.html" + }, + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html" + }, + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul.html" + }, + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner.html" + }, + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered.html" + }, { "path": "html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001.html", "references": [ @@ -5805,6 +6117,56 @@ ], "url": "/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003.html" }, + { + "path": "html/semantics/grouping-content/the-ol-element/reversed-1a.html", + "references": [ + [ + "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-ol-element/reversed-1a.html" + }, + { + "path": "html/semantics/grouping-content/the-ol-element/reversed-1b.html", + "references": [ + [ + "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-ol-element/reversed-1b.html" + }, + { + "path": "html/semantics/grouping-content/the-ol-element/reversed-1c.html", + "references": [ + [ + "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-ol-element/reversed-1c.html" + }, + { + "path": "html/semantics/grouping-content/the-ol-element/reversed-1d.html", + "references": [ + [ + "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-ol-element/reversed-1d.html" + }, + { + "path": "html/semantics/grouping-content/the-ol-element/reversed-1e.html", + "references": [ + [ + "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-ol-element/reversed-1e.html" + }, { "path": "html/semantics/grouping-content/the-ol-element/reversed-2.html", "references": [ @@ -6115,6 +6477,356 @@ ], "url": "/http/basic-auth-cache-test.html" }, + { + "path": "mathml/presentation-markup/spaces/space-2.html", + "references": [ + [ + "/mathml/presentation-markup/spaces/space-2-ref.html", + "==" + ] + ], + "url": "/mathml/presentation-markup/spaces/space-2.html" + }, + { + "path": "mathml/relations/css-styling/color-1.html", + "references": [ + [ + "/mathml/relations/css-styling/color-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/color-1.html" + }, + { + "path": "mathml/relations/css-styling/display-1.html", + "references": [ + [ + "/mathml/relations/css-styling/display-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/display-1.html" + }, + { + "path": "mathml/relations/css-styling/lengths-1.html", + "references": [ + [ + "/mathml/relations/css-styling/lengths-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/lengths-1.html" + }, + { + "path": "mathml/relations/css-styling/lengths-2.html", + "references": [ + [ + "/mathml/relations/css-styling/lengths-2-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/lengths-2.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-bold-fraktur.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-bold-fraktur.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-bold-italic.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-bold-italic-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-bold-italic.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-bold-sans-serif.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-bold-sans-serif-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-bold-sans-serif.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-bold-script.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-bold-script-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-bold-script.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-bold.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-bold-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-bold.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-double-struck.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-double-struck-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-double-struck.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-fraktur.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-fraktur-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-fraktur.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-initial.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-initial-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-initial.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-italic.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-italic-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-italic.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-looped.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-looped-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-looped.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-monospace.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-monospace-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-monospace.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-sans-serif-italic.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-sans-serif-italic-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-sans-serif-italic.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-sans-serif.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-sans-serif-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-sans-serif.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-script.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-script-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-script.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-stretched.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-stretched-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-stretched.html" + }, + { + "path": "mathml/relations/css-styling/mathvariant-tailed.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-tailed-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-tailed.html" + }, + { + "path": "mathml/relations/css-styling/visibility-1.html", + "references": [ + [ + "/mathml/relations/css-styling/visibility-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/visibility-1.html" + }, + { + "path": "mathml/relations/html5-tree/class-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/class-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/class-1.html" + }, + { + "path": "mathml/relations/html5-tree/color-attributes-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/color-attributes-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/color-attributes-1.html" + }, + { + "path": "mathml/relations/html5-tree/dynamic-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/dynamic-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/dynamic-1.html" + }, + { + "path": "mathml/relations/html5-tree/href-click-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/href-click-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/href-click-1.html" + }, + { + "path": "mathml/relations/html5-tree/href-click-2.html", + "references": [ + [ + "/mathml/relations/html5-tree/href-click-2-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/href-click-2.html" + }, + { + "path": "mathml/relations/html5-tree/integration-point-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/integration-point-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/integration-point-1.html" + }, + { + "path": "mathml/relations/html5-tree/integration-point-2.html", + "references": [ + [ + "/mathml/relations/html5-tree/integration-point-2-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/integration-point-2.html" + }, + { + "path": "mathml/relations/html5-tree/integration-point-3.html", + "references": [ + [ + "/mathml/relations/html5-tree/integration-point-3-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/integration-point-3.html" + }, + { + "path": "mathml/relations/html5-tree/required-extensions-2.html", + "references": [ + [ + "/mathml/relations/html5-tree/required-extensions-2-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/required-extensions-2.html" + }, + { + "path": "mathml/relations/html5-tree/unique-identifier-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/unique-identifier-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/unique-identifier-1.html" + }, + { + "path": "mathml/relations/html5-tree/unique-identifier-3.html", + "references": [ + [ + "/mathml/relations/html5-tree/unique-identifier-3-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/unique-identifier-3.html" + }, + { + "path": "mathml/relations/text-and-math/use-typo-metrics-1.html", + "references": [ + [ + "/mathml/relations/text-and-math/use-typo-metrics-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/text-and-math/use-typo-metrics-1.html" + }, { "path": "quirks-mode/historical/list-item-bullet-size.html", "references": [ @@ -6185,6 +6897,126 @@ ], "url": "/shadow-dom/untriaged/styles/not-apply-in-shadow-root-001.html" }, + { + "path": "svg/linking/reftests/href-a-element-attr-change.html", + "references": [ + [ + "/svg/linking/reftests/href-a-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-a-element-attr-change.html" + }, + { + "path": "svg/linking/reftests/href-feImage-element.html", + "references": [ + [ + "/svg/linking/reftests/href-feImage-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-feImage-element.html" + }, + { + "path": "svg/linking/reftests/href-filter-element.html", + "references": [ + [ + "/svg/linking/reftests/href-filter-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-filter-element.html" + }, + { + "path": "svg/linking/reftests/href-gradient-element.html", + "references": [ + [ + "/svg/linking/reftests/href-gradient-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-gradient-element.html" + }, + { + "path": "svg/linking/reftests/href-image-element.html", + "references": [ + [ + "/svg/linking/reftests/href-image-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-image-element.html" + }, + { + "path": "svg/linking/reftests/href-pattern-element.html", + "references": [ + [ + "/svg/linking/reftests/href-pattern-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-pattern-element.html" + }, + { + "path": "svg/linking/reftests/href-textPath-element.html", + "references": [ + [ + "/svg/linking/reftests/href-textPath-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-textPath-element.html" + }, + { + "path": "svg/linking/reftests/href-use-element.html", + "references": [ + [ + "/svg/linking/reftests/href-use-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-use-element.html" + }, + { + "path": "svg/shapes/rect-01.svg", + "references": [ + [ + "/svg/shapes/rect-01-ref.html", + "==" + ] + ], + "url": "/svg/shapes/rect-01.svg" + }, + { + "path": "svg/shapes/rect-02.svg", + "references": [ + [ + "/svg/shapes/rect-02-ref.html", + "==" + ] + ], + "url": "/svg/shapes/rect-02.svg" + }, + { + "path": "svg/shapes/rect-03.svg", + "references": [ + [ + "/svg/shapes/rect-03-ref.html", + "==" + ] + ], + "url": "/svg/shapes/rect-03.svg" + }, + { + "path": "svg/shapes/rect-04.svg", + "references": [ + [ + "/svg/shapes/rect-04-ref.html", + "==" + ] + ], + "url": "/svg/shapes/rect-04.svg" + }, { "path": "webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up.html", "references": [ @@ -8691,6 +9523,10 @@ "path": "2dcontext/compositing/2d.composite.globalAlpha.canvas.html", "url": "/2dcontext/compositing/2d.composite.globalAlpha.canvas.html" }, + { + "path": "2dcontext/compositing/2d.composite.globalAlpha.canvascopy.html", + "url": "/2dcontext/compositing/2d.composite.globalAlpha.canvascopy.html" + }, { "path": "2dcontext/compositing/2d.composite.globalAlpha.canvaspattern.html", "url": "/2dcontext/compositing/2d.composite.globalAlpha.canvaspattern.html" @@ -9395,6 +10231,126 @@ "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.invalidtype.html", "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.invalidtype.html" }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html" + }, { "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.current.basic.html", "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.current.basic.html" @@ -9503,6 +10459,70 @@ "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.html4.html", "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.html4.html" }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html" + }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html" + }, { "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.html", "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.html" @@ -9567,6 +10587,10 @@ "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.html", "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.html" }, + { + "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html", + "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html" + }, { "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.html", "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.html" @@ -9599,22 +10623,6 @@ "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html", "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html" }, - { - "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-4.html", - "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-4.html" - }, - { - "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-5.html", - "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-5.html" - }, - { - "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-6.html", - "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-6.html" - }, - { - "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-7.html", - "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-7.html" - }, { "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html", "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html" @@ -9635,14 +10643,6 @@ "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html", "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html" }, - { - "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-6.html", - "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-6.html" - }, - { - "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-7.html", - "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-7.html" - }, { "path": "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.html", "url": "/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.html" @@ -10263,6 +11263,10 @@ "path": "2dcontext/line-styles/2d.line.width.valid.html", "url": "/2dcontext/line-styles/2d.line.width.valid.html" }, + { + "path": "2dcontext/line-styles/setLineDash.html", + "url": "/2dcontext/line-styles/setLineDash.html" + }, { "path": "2dcontext/path-objects/2d.path.arc.angle.1.html", "url": "/2dcontext/path-objects/2d.path.arc.angle.1.html" @@ -10623,6 +11627,10 @@ "path": "2dcontext/path-objects/2d.path.lineTo.nextpoint.html", "url": "/2dcontext/path-objects/2d.path.lineTo.nextpoint.html" }, + { + "path": "2dcontext/path-objects/2d.path.lineTo.nonfinite.details.html", + "url": "/2dcontext/path-objects/2d.path.lineTo.nonfinite.details.html" + }, { "path": "2dcontext/path-objects/2d.path.lineTo.nonfinite.html", "url": "/2dcontext/path-objects/2d.path.lineTo.nonfinite.html" @@ -11529,7 +12537,7 @@ }, { "path": "FileAPI/FileReaderSync.worker.js", - "url": "/FileAPI/FileReaderSync.worker" + "url": "/FileAPI/FileReaderSync.worker.html" }, { "path": "FileAPI/blob/Blob-XHR-revoke.html", @@ -11545,7 +12553,7 @@ }, { "path": "FileAPI/blob/Blob-in-worker.worker.js", - "url": "/FileAPI/blob/Blob-in-worker.worker" + "url": "/FileAPI/blob/Blob-in-worker.worker.html" }, { "path": "FileAPI/blob/Blob-slice-overflow.html", @@ -11561,7 +12569,7 @@ }, { "path": "FileAPI/file/Worker-read-file-constructor.worker.js", - "url": "/FileAPI/file/Worker-read-file-constructor.worker" + "url": "/FileAPI/file/Worker-read-file-constructor.worker.html" }, { "path": "FileAPI/fileReader.html", @@ -11581,7 +12589,7 @@ }, { "path": "FileAPI/idlharness.worker.js", - "url": "/FileAPI/idlharness.worker" + "url": "/FileAPI/idlharness.worker.html" }, { "path": "FileAPI/reading-data-section/Determining-Encoding.html", @@ -12123,6 +13131,18 @@ "path": "IndexedDB/idbindex-multientry.htm", "url": "/IndexedDB/idbindex-multientry.htm" }, + { + "path": "IndexedDB/idbindex-rename-abort.html", + "url": "/IndexedDB/idbindex-rename-abort.html" + }, + { + "path": "IndexedDB/idbindex-rename-errors.html", + "url": "/IndexedDB/idbindex-rename-errors.html" + }, + { + "path": "IndexedDB/idbindex-rename.html", + "url": "/IndexedDB/idbindex-rename.html" + }, { "path": "IndexedDB/idbindex_count.htm", "url": "/IndexedDB/idbindex_count.htm" @@ -12255,6 +13275,18 @@ "path": "IndexedDB/idbkeyrange_incorrect.htm", "url": "/IndexedDB/idbkeyrange_incorrect.htm" }, + { + "path": "IndexedDB/idbobjectstore-rename-abort.html", + "url": "/IndexedDB/idbobjectstore-rename-abort.html" + }, + { + "path": "IndexedDB/idbobjectstore-rename-errors.html", + "url": "/IndexedDB/idbobjectstore-rename-errors.html" + }, + { + "path": "IndexedDB/idbobjectstore-rename-store.html", + "url": "/IndexedDB/idbobjectstore-rename-store.html" + }, { "path": "IndexedDB/idbobjectstore_add.htm", "url": "/IndexedDB/idbobjectstore_add.htm" @@ -12581,7 +13613,7 @@ }, { "path": "IndexedDB/interfaces.worker.js", - "url": "/IndexedDB/interfaces.worker" + "url": "/IndexedDB/interfaces.worker.html" }, { "path": "IndexedDB/key_invalid.htm", @@ -12627,6 +13659,22 @@ "path": "IndexedDB/string-list-ordering.htm", "url": "/IndexedDB/string-list-ordering.htm" }, + { + "path": "IndexedDB/transaction-abort-generator-revert.html", + "url": "/IndexedDB/transaction-abort-generator-revert.html" + }, + { + "path": "IndexedDB/transaction-abort-index-metadata-revert.html", + "url": "/IndexedDB/transaction-abort-index-metadata-revert.html" + }, + { + "path": "IndexedDB/transaction-abort-multiple-metadata-revert.html", + "url": "/IndexedDB/transaction-abort-multiple-metadata-revert.html" + }, + { + "path": "IndexedDB/transaction-abort-object-store-metadata-revert.html", + "url": "/IndexedDB/transaction-abort-object-store-metadata-revert.html" + }, { "path": "IndexedDB/transaction-create_in_versionchange.htm", "url": "/IndexedDB/transaction-create_in_versionchange.htm" @@ -12661,131 +13709,131 @@ }, { "path": "WebCryptoAPI/derive_bits_keys/ecdh_bits.worker.js", - "url": "/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker" + "url": "/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker.html" }, { "path": "WebCryptoAPI/derive_bits_keys/ecdh_keys.worker.js", - "url": "/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker" + "url": "/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker.html" }, { "path": "WebCryptoAPI/derive_bits_keys/hkdf.worker.js", - "url": "/WebCryptoAPI/derive_bits_keys/hkdf.worker" + "url": "/WebCryptoAPI/derive_bits_keys/hkdf.worker.html" }, { "path": "WebCryptoAPI/derive_bits_keys/pbkdf2.worker.js", - "url": "/WebCryptoAPI/derive_bits_keys/pbkdf2.worker" + "url": "/WebCryptoAPI/derive_bits_keys/pbkdf2.worker.html" }, { "path": "WebCryptoAPI/digest/digest.worker.js", - "url": "/WebCryptoAPI/digest/digest.worker" + "url": "/WebCryptoAPI/digest/digest.worker.html" }, { "path": "WebCryptoAPI/encrypt_decrypt/aes_cbc.worker.js", - "url": "/WebCryptoAPI/encrypt_decrypt/aes_cbc.worker" + "url": "/WebCryptoAPI/encrypt_decrypt/aes_cbc.worker.html" }, { "path": "WebCryptoAPI/encrypt_decrypt/aes_ctr.worker.js", - "url": "/WebCryptoAPI/encrypt_decrypt/aes_ctr.worker" + "url": "/WebCryptoAPI/encrypt_decrypt/aes_ctr.worker.html" }, { "path": "WebCryptoAPI/encrypt_decrypt/aes_gcm.worker.js", - "url": "/WebCryptoAPI/encrypt_decrypt/aes_gcm.worker" + "url": "/WebCryptoAPI/encrypt_decrypt/aes_gcm.worker.html" }, { "path": "WebCryptoAPI/encrypt_decrypt/rsa.worker.js", - "url": "/WebCryptoAPI/encrypt_decrypt/rsa.worker" + "url": "/WebCryptoAPI/encrypt_decrypt/rsa.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures.worker.js", - "url": "/WebCryptoAPI/generateKey/failures.worker" + "url": "/WebCryptoAPI/generateKey/failures.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures_AES-CBC.worker.js", - "url": "/WebCryptoAPI/generateKey/failures_AES-CBC.worker" + "url": "/WebCryptoAPI/generateKey/failures_AES-CBC.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures_AES-CTR.worker.js", - "url": "/WebCryptoAPI/generateKey/failures_AES-CTR.worker" + "url": "/WebCryptoAPI/generateKey/failures_AES-CTR.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures_AES-GCM.worker.js", - "url": "/WebCryptoAPI/generateKey/failures_AES-GCM.worker" + "url": "/WebCryptoAPI/generateKey/failures_AES-GCM.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures_AES-KW.worker.js", - "url": "/WebCryptoAPI/generateKey/failures_AES-KW.worker" + "url": "/WebCryptoAPI/generateKey/failures_AES-KW.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures_ECDH.worker.js", - "url": "/WebCryptoAPI/generateKey/failures_ECDH.worker" + "url": "/WebCryptoAPI/generateKey/failures_ECDH.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures_ECDSA.worker.js", - "url": "/WebCryptoAPI/generateKey/failures_ECDSA.worker" + "url": "/WebCryptoAPI/generateKey/failures_ECDSA.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures_HMAC.worker.js", - "url": "/WebCryptoAPI/generateKey/failures_HMAC.worker" + "url": "/WebCryptoAPI/generateKey/failures_HMAC.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures_RSA-OAEP.worker.js", - "url": "/WebCryptoAPI/generateKey/failures_RSA-OAEP.worker" + "url": "/WebCryptoAPI/generateKey/failures_RSA-OAEP.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures_RSA-PSS.worker.js", - "url": "/WebCryptoAPI/generateKey/failures_RSA-PSS.worker" + "url": "/WebCryptoAPI/generateKey/failures_RSA-PSS.worker.html" }, { "path": "WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.worker.js", - "url": "/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.worker" + "url": "/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes.worker.js", - "url": "/WebCryptoAPI/generateKey/successes.worker" + "url": "/WebCryptoAPI/generateKey/successes.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes_AES-CBC.worker.js", - "url": "/WebCryptoAPI/generateKey/successes_AES-CBC.worker" + "url": "/WebCryptoAPI/generateKey/successes_AES-CBC.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes_AES-CTR.worker.js", - "url": "/WebCryptoAPI/generateKey/successes_AES-CTR.worker" + "url": "/WebCryptoAPI/generateKey/successes_AES-CTR.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes_AES-GCM.worker.js", - "url": "/WebCryptoAPI/generateKey/successes_AES-GCM.worker" + "url": "/WebCryptoAPI/generateKey/successes_AES-GCM.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes_AES-KW.worker.js", - "url": "/WebCryptoAPI/generateKey/successes_AES-KW.worker" + "url": "/WebCryptoAPI/generateKey/successes_AES-KW.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes_ECDH.worker.js", - "url": "/WebCryptoAPI/generateKey/successes_ECDH.worker" + "url": "/WebCryptoAPI/generateKey/successes_ECDH.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes_ECDSA.worker.js", - "url": "/WebCryptoAPI/generateKey/successes_ECDSA.worker" + "url": "/WebCryptoAPI/generateKey/successes_ECDSA.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes_HMAC.worker.js", - "url": "/WebCryptoAPI/generateKey/successes_HMAC.worker" + "url": "/WebCryptoAPI/generateKey/successes_HMAC.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes_RSA-OAEP.worker.js", - "url": "/WebCryptoAPI/generateKey/successes_RSA-OAEP.worker" + "url": "/WebCryptoAPI/generateKey/successes_RSA-OAEP.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes_RSA-PSS.worker.js", - "url": "/WebCryptoAPI/generateKey/successes_RSA-PSS.worker" + "url": "/WebCryptoAPI/generateKey/successes_RSA-PSS.worker.html" }, { "path": "WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.worker.js", - "url": "/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.worker" + "url": "/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.worker.html" }, { "path": "WebCryptoAPI/getRandomValues.worker.js", - "url": "/WebCryptoAPI/getRandomValues.worker" + "url": "/WebCryptoAPI/getRandomValues.worker.html" }, { "path": "WebCryptoAPI/idlharness.html", @@ -12793,19 +13841,19 @@ }, { "path": "WebCryptoAPI/idlharness.worker.js", - "url": "/WebCryptoAPI/idlharness.worker" + "url": "/WebCryptoAPI/idlharness.worker.html" }, { "path": "WebCryptoAPI/import_export/ec_importKey.worker.js", - "url": "/WebCryptoAPI/import_export/ec_importKey.worker" + "url": "/WebCryptoAPI/import_export/ec_importKey.worker.html" }, { "path": "WebCryptoAPI/import_export/rsa_importKey.worker.js", - "url": "/WebCryptoAPI/import_export/rsa_importKey.worker" + "url": "/WebCryptoAPI/import_export/rsa_importKey.worker.html" }, { "path": "WebCryptoAPI/import_export/symmetric_importKey.worker.js", - "url": "/WebCryptoAPI/import_export/symmetric_importKey.worker" + "url": "/WebCryptoAPI/import_export/symmetric_importKey.worker.html" }, { "path": "WebCryptoAPI/import_export/test_ec_importKey.html", @@ -12821,19 +13869,19 @@ }, { "path": "WebCryptoAPI/sign_verify/ecdsa.worker.js", - "url": "/WebCryptoAPI/sign_verify/ecdsa.worker" + "url": "/WebCryptoAPI/sign_verify/ecdsa.worker.html" }, { "path": "WebCryptoAPI/sign_verify/hmac.worker.js", - "url": "/WebCryptoAPI/sign_verify/hmac.worker" + "url": "/WebCryptoAPI/sign_verify/hmac.worker.html" }, { "path": "WebCryptoAPI/sign_verify/rsa_pkcs.worker.js", - "url": "/WebCryptoAPI/sign_verify/rsa_pkcs.worker" + "url": "/WebCryptoAPI/sign_verify/rsa_pkcs.worker.html" }, { "path": "WebCryptoAPI/sign_verify/rsa_pss.worker.js", - "url": "/WebCryptoAPI/sign_verify/rsa_pss.worker" + "url": "/WebCryptoAPI/sign_verify/rsa_pss.worker.html" }, { "path": "WebCryptoAPI/test_getRandomValues.html", @@ -12841,7 +13889,11 @@ }, { "path": "WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.js", - "url": "/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker" + "url": "/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.html" + }, + { + "path": "WebIDL/current-realm.html", + "url": "/WebIDL/current-realm.html" }, { "path": "WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html", @@ -12857,7 +13909,7 @@ }, { "path": "WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js", - "url": "/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker" + "url": "/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.html" }, { "path": "WebIDL/ecmascript-binding/es-exceptions/exceptions.html", @@ -12881,7 +13933,7 @@ }, { "path": "XMLHttpRequest/XMLHttpRequest-withCredentials.any.js", - "url": "/XMLHttpRequest/XMLHttpRequest-withCredentials.any.worker" + "url": "/XMLHttpRequest/XMLHttpRequest-withCredentials.any.worker.html" }, { "path": "XMLHttpRequest/abort-after-receive.htm", @@ -12909,7 +13961,7 @@ }, { "path": "XMLHttpRequest/abort-during-open.worker.js", - "url": "/XMLHttpRequest/abort-during-open.worker" + "url": "/XMLHttpRequest/abort-during-open.worker.html" }, { "path": "XMLHttpRequest/abort-during-unsent.htm", @@ -12996,8 +14048,8 @@ "url": "/XMLHttpRequest/event-timeout.htm" }, { - "path": "XMLHttpRequest/event-upload-progress-crossorigin.sub.htm", - "url": "/XMLHttpRequest/event-upload-progress-crossorigin.sub.htm" + "path": "XMLHttpRequest/event-upload-progress-crossorigin.htm", + "url": "/XMLHttpRequest/event-upload-progress-crossorigin.htm" }, { "path": "XMLHttpRequest/event-upload-progress.htm", @@ -13444,8 +14496,8 @@ "url": "/XMLHttpRequest/send-no-response-event-order.htm" }, { - "path": "XMLHttpRequest/send-non-same-origin.sub.htm", - "url": "/XMLHttpRequest/send-non-same-origin.sub.htm" + "path": "XMLHttpRequest/send-non-same-origin.htm", + "url": "/XMLHttpRequest/send-non-same-origin.htm" }, { "path": "XMLHttpRequest/send-receive-utf16.htm", @@ -13505,7 +14557,7 @@ }, { "path": "XMLHttpRequest/send-send.worker.js", - "url": "/XMLHttpRequest/send-send.worker" + "url": "/XMLHttpRequest/send-send.worker.html" }, { "path": "XMLHttpRequest/send-sync-blocks-async.htm", @@ -13541,7 +14593,7 @@ }, { "path": "XMLHttpRequest/send-usp.worker.js", - "url": "/XMLHttpRequest/send-usp.worker" + "url": "/XMLHttpRequest/send-usp.worker.html" }, { "path": "XMLHttpRequest/setrequestheader-after-send.htm", @@ -13679,6 +14731,18 @@ "path": "battery-status/battery-promise.html", "url": "/battery-status/battery-promise.html" }, + { + "path": "compat/webkit-text-fill-color-currentColor.html", + "url": "/compat/webkit-text-fill-color-currentColor.html" + }, + { + "path": "console/console-is-a-namespace.any.js", + "url": "/console/console-is-a-namespace.any.html" + }, + { + "path": "console/console-is-a-namespace.any.js", + "url": "/console/console-is-a-namespace.any.worker.html" + }, { "path": "content-security-policy/blink-contrib-2/base-uri-allow.sub.html", "url": "/content-security-policy/blink-contrib-2/base-uri-allow.sub.html" @@ -14279,6 +15343,10 @@ "path": "content-security-policy/meta/meta-modified.html", "url": "/content-security-policy/meta/meta-modified.html" }, + { + "path": "content-security-policy/navigation/to-javascript-url.html", + "url": "/content-security-policy/navigation/to-javascript-url.html" + }, { "path": "content-security-policy/reporting/securitypolicyviolation-idl.html", "url": "/content-security-policy/reporting/securitypolicyviolation-idl.html" @@ -14319,6 +15387,82 @@ "path": "content-security-policy/script-src/script-src-1_4_2.html", "url": "/content-security-policy/script-src/script-src-1_4_2.html" }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_eval.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_eval.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_new_function.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_new_function.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_discard_whitelist.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_discard_whitelist.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_double_policy_different_nonce.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_double_policy_different_nonce.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_whitelist.sub.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_whitelist.sub.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_double_policy_report_only.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_double_policy_report_only.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_eval.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_eval.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_hashes.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_hashes.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_meta_tag.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_meta_tag.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_new_function.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_new_function.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted_incorrect_nonce.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted_incorrect_nonce.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html" + }, + { + "path": "content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_correct_nonce.html", + "url": "/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_correct_nonce.html" + }, + { + "path": "content-security-policy/securitypolicyviolation/blockeduri-eval.html", + "url": "/content-security-policy/securitypolicyviolation/blockeduri-eval.html" + }, + { + "path": "content-security-policy/securitypolicyviolation/blockeduri-inline.html", + "url": "/content-security-policy/securitypolicyviolation/blockeduri-inline.html" + }, + { + "path": "content-security-policy/securitypolicyviolation/idl.html", + "url": "/content-security-policy/securitypolicyviolation/idl.html" + }, + { + "path": "content-security-policy/securitypolicyviolation/targeting.html", + "url": "/content-security-policy/securitypolicyviolation/targeting.html" + }, { "path": "content-security-policy/style-src/style-src-3_1.html", "url": "/content-security-policy/style-src/style-src-3_1.html" @@ -14351,6 +15495,70 @@ "path": "content-security-policy/svg/svg-policy-with-resource.html", "url": "/content-security-policy/svg/svg-policy-with-resource.html" }, + { + "path": "content-security-policy/worker-src/dedicated-child.sub.html", + "url": "/content-security-policy/worker-src/dedicated-child.sub.html" + }, + { + "path": "content-security-policy/worker-src/dedicated-fallback.sub.html", + "url": "/content-security-policy/worker-src/dedicated-fallback.sub.html" + }, + { + "path": "content-security-policy/worker-src/dedicated-list.sub.html", + "url": "/content-security-policy/worker-src/dedicated-list.sub.html" + }, + { + "path": "content-security-policy/worker-src/dedicated-none.sub.html", + "url": "/content-security-policy/worker-src/dedicated-none.sub.html" + }, + { + "path": "content-security-policy/worker-src/dedicated-self.sub.html", + "url": "/content-security-policy/worker-src/dedicated-self.sub.html" + }, + { + "path": "content-security-policy/worker-src/service-child.https.sub.html", + "url": "/content-security-policy/worker-src/service-child.https.sub.html" + }, + { + "path": "content-security-policy/worker-src/service-fallback.https.sub.html", + "url": "/content-security-policy/worker-src/service-fallback.https.sub.html" + }, + { + "path": "content-security-policy/worker-src/service-list.https.sub.html", + "url": "/content-security-policy/worker-src/service-list.https.sub.html" + }, + { + "path": "content-security-policy/worker-src/service-none.https.sub.html", + "url": "/content-security-policy/worker-src/service-none.https.sub.html" + }, + { + "path": "content-security-policy/worker-src/service-self.https.sub.html", + "url": "/content-security-policy/worker-src/service-self.https.sub.html" + }, + { + "path": "content-security-policy/worker-src/shared-child.sub.html", + "url": "/content-security-policy/worker-src/shared-child.sub.html" + }, + { + "path": "content-security-policy/worker-src/shared-fallback.sub.html", + "url": "/content-security-policy/worker-src/shared-fallback.sub.html" + }, + { + "path": "content-security-policy/worker-src/shared-list.sub.html", + "url": "/content-security-policy/worker-src/shared-list.sub.html" + }, + { + "path": "content-security-policy/worker-src/shared-none.sub.html", + "url": "/content-security-policy/worker-src/shared-none.sub.html" + }, + { + "path": "content-security-policy/worker-src/shared-self.sub.html", + "url": "/content-security-policy/worker-src/shared-self.sub.html" + }, + { + "path": "cookies/path/match.html", + "url": "/cookies/path/match.html" + }, { "path": "cookies/secure/set-from-dom.https.sub.html", "url": "/cookies/secure/set-from-dom.https.sub.html" @@ -14443,6 +15651,10 @@ "path": "cssom-view/HTMLBody-ScrollArea_quirksmode.html", "url": "/cssom-view/HTMLBody-ScrollArea_quirksmode.html" }, + { + "path": "cssom-view/MediaQueryList-with-empty-string.html", + "url": "/cssom-view/MediaQueryList-with-empty-string.html" + }, { "path": "cssom-view/elementFromPoint.html", "url": "/cssom-view/elementFromPoint.html" @@ -14467,18 +15679,194 @@ "path": "cssom-view/scrollingElement.html", "url": "/cssom-view/scrollingElement.html" }, + { + "path": "cssom/serialize-values.html", + "url": "/cssom/serialize-values.html" + }, + { + "path": "custom-elements/CustomElementRegistry.html", + "url": "/custom-elements/CustomElementRegistry.html" + }, + { + "path": "custom-elements/Document-createElement.html", + "url": "/custom-elements/Document-createElement.html" + }, { "path": "custom-elements/HTMLElement-constructor.html", "url": "/custom-elements/HTMLElement-constructor.html" }, + { + "path": "custom-elements/adopted-callback.html", + "url": "/custom-elements/adopted-callback.html" + }, + { + "path": "custom-elements/attribute-changed-callback.html", + "url": "/custom-elements/attribute-changed-callback.html" + }, + { + "path": "custom-elements/connected-callbacks.html", + "url": "/custom-elements/connected-callbacks.html" + }, + { + "path": "custom-elements/custom-element-reaction-queue.html", + "url": "/custom-elements/custom-element-reaction-queue.html" + }, { "path": "custom-elements/custom-element-registry/define.html", "url": "/custom-elements/custom-element-registry/define.html" }, + { + "path": "custom-elements/disconnected-callbacks.html", + "url": "/custom-elements/disconnected-callbacks.html" + }, { "path": "custom-elements/htmlconstructor/newtarget.html", "url": "/custom-elements/htmlconstructor/newtarget.html" }, + { + "path": "custom-elements/parser/parser-constructs-custom-element-in-document-write.html", + "url": "/custom-elements/parser/parser-constructs-custom-element-in-document-write.html" + }, + { + "path": "custom-elements/parser/parser-constructs-custom-element-synchronously.html", + "url": "/custom-elements/parser/parser-constructs-custom-element-synchronously.html" + }, + { + "path": "custom-elements/parser/parser-constructs-custom-elements.html", + "url": "/custom-elements/parser/parser-constructs-custom-elements.html" + }, + { + "path": "custom-elements/parser/parser-fallsback-to-unknown-element.html", + "url": "/custom-elements/parser/parser-fallsback-to-unknown-element.html" + }, + { + "path": "custom-elements/parser/parser-sets-attributes-and-children.html", + "url": "/custom-elements/parser/parser-sets-attributes-and-children.html" + }, + { + "path": "custom-elements/parser/parser-uses-constructed-element.html", + "url": "/custom-elements/parser/parser-uses-constructed-element.html" + }, + { + "path": "custom-elements/parser/parser-uses-registry-of-owner-document.html", + "url": "/custom-elements/parser/parser-uses-registry-of-owner-document.html" + }, + { + "path": "custom-elements/reaction-timing.html", + "url": "/custom-elements/reaction-timing.html" + }, + { + "path": "custom-elements/reactions/Attr.html", + "url": "/custom-elements/reactions/Attr.html" + }, + { + "path": "custom-elements/reactions/CSSStyleDeclaration.html", + "url": "/custom-elements/reactions/CSSStyleDeclaration.html" + }, + { + "path": "custom-elements/reactions/ChildNode.html", + "url": "/custom-elements/reactions/ChildNode.html" + }, + { + "path": "custom-elements/reactions/DOMStringMap.html", + "url": "/custom-elements/reactions/DOMStringMap.html" + }, + { + "path": "custom-elements/reactions/DOMTokenList.html", + "url": "/custom-elements/reactions/DOMTokenList.html" + }, + { + "path": "custom-elements/reactions/Document.html", + "url": "/custom-elements/reactions/Document.html" + }, + { + "path": "custom-elements/reactions/Element.html", + "url": "/custom-elements/reactions/Element.html" + }, + { + "path": "custom-elements/reactions/ElementContentEditable.html", + "url": "/custom-elements/reactions/ElementContentEditable.html" + }, + { + "path": "custom-elements/reactions/HTMLAnchorElement.html", + "url": "/custom-elements/reactions/HTMLAnchorElement.html" + }, + { + "path": "custom-elements/reactions/HTMLElement.html", + "url": "/custom-elements/reactions/HTMLElement.html" + }, + { + "path": "custom-elements/reactions/HTMLOptionElement.html", + "url": "/custom-elements/reactions/HTMLOptionElement.html" + }, + { + "path": "custom-elements/reactions/HTMLOptionsCollection.html", + "url": "/custom-elements/reactions/HTMLOptionsCollection.html" + }, + { + "path": "custom-elements/reactions/HTMLOutputElement.html", + "url": "/custom-elements/reactions/HTMLOutputElement.html" + }, + { + "path": "custom-elements/reactions/HTMLSelectElement.html", + "url": "/custom-elements/reactions/HTMLSelectElement.html" + }, + { + "path": "custom-elements/reactions/HTMLTableElement.html", + "url": "/custom-elements/reactions/HTMLTableElement.html" + }, + { + "path": "custom-elements/reactions/HTMLTableRowElement.html", + "url": "/custom-elements/reactions/HTMLTableRowElement.html" + }, + { + "path": "custom-elements/reactions/HTMLTableSectionElement.html", + "url": "/custom-elements/reactions/HTMLTableSectionElement.html" + }, + { + "path": "custom-elements/reactions/HTMLTitleElement.html", + "url": "/custom-elements/reactions/HTMLTitleElement.html" + }, + { + "path": "custom-elements/reactions/NamedNodeMap.html", + "url": "/custom-elements/reactions/NamedNodeMap.html" + }, + { + "path": "custom-elements/reactions/Node.html", + "url": "/custom-elements/reactions/Node.html" + }, + { + "path": "custom-elements/reactions/ParentNode.html", + "url": "/custom-elements/reactions/ParentNode.html" + }, + { + "path": "custom-elements/reactions/Range.html", + "url": "/custom-elements/reactions/Range.html" + }, + { + "path": "custom-elements/reactions/Selection.html", + "url": "/custom-elements/reactions/Selection.html" + }, + { + "path": "custom-elements/reactions/ShadowRoot.html", + "url": "/custom-elements/reactions/ShadowRoot.html" + }, + { + "path": "custom-elements/upgrading.html", + "url": "/custom-elements/upgrading.html" + }, + { + "path": "custom-elements/upgrading/Node-cloneNode.html", + "url": "/custom-elements/upgrading/Node-cloneNode.html" + }, + { + "path": "custom-elements/upgrading/upgrading-enqueue-reactions.html", + "url": "/custom-elements/upgrading/upgrading-enqueue-reactions.html" + }, + { + "path": "custom-elements/upgrading/upgrading-parser-created-element.html", + "url": "/custom-elements/upgrading/upgrading-parser-created-element.html" + }, { "path": "custom-elements/v0/concepts/custom-elements-type-naming.html", "url": "/custom-elements/v0/concepts/custom-elements-type-naming.html" @@ -14759,6 +16147,10 @@ "path": "dom/events/Event-dispatch-bubbles-true.html", "url": "/dom/events/Event-dispatch-bubbles-true.html" }, + { + "path": "dom/events/Event-dispatch-click.html", + "url": "/dom/events/Event-dispatch-click.html" + }, { "path": "dom/events/Event-dispatch-detached-click.html", "url": "/dom/events/Event-dispatch-detached-click.html" @@ -14779,6 +16171,10 @@ "path": "dom/events/Event-dispatch-order.html", "url": "/dom/events/Event-dispatch-order.html" }, + { + "path": "dom/events/Event-dispatch-other-document.html", + "url": "/dom/events/Event-dispatch-other-document.html" + }, { "path": "dom/events/Event-dispatch-propagation-stopped.html", "url": "/dom/events/Event-dispatch-propagation-stopped.html" @@ -15711,10 +17107,6 @@ "path": "domparsing/innerhtml-01.xhtml", "url": "/domparsing/innerhtml-01.xhtml" }, - { - "path": "domparsing/innerhtml-02.html", - "url": "/domparsing/innerhtml-02.html" - }, { "path": "domparsing/innerhtml-03.xhtml", "url": "/domparsing/innerhtml-03.xhtml" @@ -15787,6 +17179,10 @@ "path": "editing/other/delete.html", "url": "/editing/other/delete.html" }, + { + "path": "editing/other/restoration.html", + "url": "/editing/other/restoration.html" + }, { "path": "editing/run/backcolor.html", "url": "/editing/run/backcolor.html" @@ -15987,94 +17383,14 @@ "path": "encoding/textencoder-utf16-surrogates.html", "url": "/encoding/textencoder-utf16-surrogates.html" }, - { - "path": "encrypted-media/Google/encrypted-media-clear-key-invalid-license.html", - "url": "/encrypted-media/Google/encrypted-media-clear-key-invalid-license.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-clearkey-update-non-ascii-input.html", - "url": "/encrypted-media/Google/encrypted-media-clearkey-update-non-ascii-input.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-onencrypted.html", - "url": "/encrypted-media/Google/encrypted-media-onencrypted.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-playback-encrypted-and-clear-sources.html", - "url": "/encrypted-media/Google/encrypted-media-playback-encrypted-and-clear-sources.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-requestmediakeysystemaccess.html", - "url": "/encrypted-media/Google/encrypted-media-requestmediakeysystemaccess.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-reset-src-after-setmediakeys.html", - "url": "/encrypted-media/Google/encrypted-media-reset-src-after-setmediakeys.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-session-closed-event.html", - "url": "/encrypted-media/Google/encrypted-media-session-closed-event.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-setmediakeys-again-after-playback.html", - "url": "/encrypted-media/Google/encrypted-media-setmediakeys-again-after-playback.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-setmediakeys-again-after-resetting-src.html", - "url": "/encrypted-media/Google/encrypted-media-setmediakeys-again-after-resetting-src.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-setmediakeys-at-same-time.html", - "url": "/encrypted-media/Google/encrypted-media-setmediakeys-at-same-time.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html", - "url": "/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html", - "url": "/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-setmediakeys-to-multiple-video-elements.html", - "url": "/encrypted-media/Google/encrypted-media-setmediakeys-to-multiple-video-elements.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-setmediakeys.html", - "url": "/encrypted-media/Google/encrypted-media-setmediakeys.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-syntax.html", - "url": "/encrypted-media/Google/encrypted-media-syntax.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-unique-origin.html", - "url": "/encrypted-media/Google/encrypted-media-unique-origin.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-update-disallowed-input.html", - "url": "/encrypted-media/Google/encrypted-media-update-disallowed-input.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-waiting-for-a-key.html", - "url": "/encrypted-media/Google/encrypted-media-waiting-for-a-key.html" - }, - { - "path": "encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-sessions.html", - "url": "/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-sessions.html" - }, - { - "path": "encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-updates.html", - "url": "/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-updates.html" - }, - { - "path": "encrypted-media/Google/migrated_to_root_disabled/encrypted-media-playback-multiple-sessions.html", - "url": "/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-playback-multiple-sessions.html" - }, { "path": "encrypted-media/clearkey-check-initdata-type.html", "url": "/encrypted-media/clearkey-check-initdata-type.html" }, + { + "path": "encrypted-media/clearkey-events-session-closed-event.html", + "url": "/encrypted-media/clearkey-events-session-closed-event.html" + }, { "path": "encrypted-media/clearkey-events.html", "url": "/encrypted-media/clearkey-events.html" @@ -16083,6 +17399,10 @@ "path": "encrypted-media/clearkey-generate-request-disallowed-input.html", "url": "/encrypted-media/clearkey-generate-request-disallowed-input.html" }, + { + "path": "encrypted-media/clearkey-invalid-license.html", + "url": "/encrypted-media/clearkey-invalid-license.html" + }, { "path": "encrypted-media/clearkey-keystatuses-multiple-sessions.html", "url": "/encrypted-media/clearkey-keystatuses-multiple-sessions.html" @@ -16123,6 +17443,14 @@ "path": "encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html", "url": "/encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html" }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.html" + }, { "path": "encrypted-media/clearkey-mp4-playback-temporary-events.html", "url": "/encrypted-media/clearkey-mp4-playback-temporary-events.html" @@ -16159,22 +17487,94 @@ "path": "encrypted-media/clearkey-mp4-playback-temporary.html", "url": "/encrypted-media/clearkey-mp4-playback-temporary.html" }, + { + "path": "encrypted-media/clearkey-mp4-reset-src-after-setmediakeys.html", + "url": "/encrypted-media/clearkey-mp4-reset-src-after-setmediakeys.html" + }, + { + "path": "encrypted-media/clearkey-mp4-setmediakeys-again-after-playback.html", + "url": "/encrypted-media/clearkey-mp4-setmediakeys-again-after-playback.html" + }, + { + "path": "encrypted-media/clearkey-mp4-setmediakeys-again-after-resetting-src.html", + "url": "/encrypted-media/clearkey-mp4-setmediakeys-again-after-resetting-src.html" + }, + { + "path": "encrypted-media/clearkey-mp4-setmediakeys-at-same-time.html", + "url": "/encrypted-media/clearkey-mp4-setmediakeys-at-same-time.html" + }, + { + "path": "encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-different-mediakeys.html", + "url": "/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-different-mediakeys.html" + }, + { + "path": "encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html", + "url": "/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html" + }, + { + "path": "encrypted-media/clearkey-mp4-setmediakeys-to-multiple-video-elements.html", + "url": "/encrypted-media/clearkey-mp4-setmediakeys-to-multiple-video-elements.html" + }, + { + "path": "encrypted-media/clearkey-mp4-setmediakeys.html", + "url": "/encrypted-media/clearkey-mp4-setmediakeys.html" + }, + { + "path": "encrypted-media/clearkey-mp4-syntax-mediakeys.html", + "url": "/encrypted-media/clearkey-mp4-syntax-mediakeys.html" + }, + { + "path": "encrypted-media/clearkey-mp4-syntax-mediakeysession.html", + "url": "/encrypted-media/clearkey-mp4-syntax-mediakeysession.html" + }, + { + "path": "encrypted-media/clearkey-mp4-syntax-mediakeysystemaccess.html", + "url": "/encrypted-media/clearkey-mp4-syntax-mediakeysystemaccess.html" + }, + { + "path": "encrypted-media/clearkey-mp4-unique-origin.html", + "url": "/encrypted-media/clearkey-mp4-unique-origin.html" + }, + { + "path": "encrypted-media/clearkey-mp4-update-disallowed-input.html", + "url": "/encrypted-media/clearkey-mp4-update-disallowed-input.html" + }, + { + "path": "encrypted-media/clearkey-mp4-waiting-for-a-key.html", + "url": "/encrypted-media/clearkey-mp4-waiting-for-a-key.html" + }, { "path": "encrypted-media/clearkey-not-callable-after-createsession.html", "url": "/encrypted-media/clearkey-not-callable-after-createsession.html" }, + { + "path": "encrypted-media/clearkey-update-non-ascii-input.html", + "url": "/encrypted-media/clearkey-update-non-ascii-input.html" + }, { "path": "encrypted-media/drm-check-initdata-type.html", "url": "/encrypted-media/drm-check-initdata-type.html" }, + { + "path": "encrypted-media/drm-events-session-closed-event.html", + "url": "/encrypted-media/drm-events-session-closed-event.html" + }, { "path": "encrypted-media/drm-events.html", "url": "/encrypted-media/drm-events.html" }, + { + "path": "encrypted-media/drm-expiration.html", + "url": "/encrypted-media/drm-expiration.html" + }, { "path": "encrypted-media/drm-generate-request-disallowed-input.html", "url": "/encrypted-media/drm-generate-request-disallowed-input.html" }, + { + "path": "encrypted-media/drm-invalid-license.html", + "url": "/encrypted-media/drm-invalid-license.html" + }, { "path": "encrypted-media/drm-keystatuses-multiple-sessions.html", "url": "/encrypted-media/drm-keystatuses-multiple-sessions.html" @@ -16183,6 +17583,10 @@ "path": "encrypted-media/drm-keystatuses.html", "url": "/encrypted-media/drm-keystatuses.html" }, + { + "path": "encrypted-media/drm-mp4-onencrypted.html", + "url": "/encrypted-media/drm-mp4-onencrypted.html" + }, { "path": "encrypted-media/drm-mp4-playback-destroy-persistent-license.html", "url": "/encrypted-media/drm-mp4-playback-destroy-persistent-license.html" @@ -16203,6 +17607,14 @@ "path": "encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.html", "url": "/encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.html" }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-clear-encrypted.html", + "url": "/encrypted-media/drm-mp4-playback-temporary-clear-encrypted.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-encrypted-clear.html", + "url": "/encrypted-media/drm-mp4-playback-temporary-encrypted-clear.html" + }, { "path": "encrypted-media/drm-mp4-playback-temporary-multikey.html", "url": "/encrypted-media/drm-mp4-playback-temporary-multikey.html" @@ -16239,10 +17651,66 @@ "path": "encrypted-media/drm-mp4-playback-temporary.html", "url": "/encrypted-media/drm-mp4-playback-temporary.html" }, + { + "path": "encrypted-media/drm-mp4-reset-src-after-setmediakeys.html", + "url": "/encrypted-media/drm-mp4-reset-src-after-setmediakeys.html" + }, + { + "path": "encrypted-media/drm-mp4-setmediakeys-again-after-playback.html", + "url": "/encrypted-media/drm-mp4-setmediakeys-again-after-playback.html" + }, + { + "path": "encrypted-media/drm-mp4-setmediakeys-again-after-resetting-src.html", + "url": "/encrypted-media/drm-mp4-setmediakeys-again-after-resetting-src.html" + }, + { + "path": "encrypted-media/drm-mp4-setmediakeys-at-same-time.html", + "url": "/encrypted-media/drm-mp4-setmediakeys-at-same-time.html" + }, + { + "path": "encrypted-media/drm-mp4-setmediakeys-multiple-times-with-different-mediakeys.html", + "url": "/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-different-mediakeys.html" + }, + { + "path": "encrypted-media/drm-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html", + "url": "/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html" + }, + { + "path": "encrypted-media/drm-mp4-setmediakeys-to-multiple-video-elements.html", + "url": "/encrypted-media/drm-mp4-setmediakeys-to-multiple-video-elements.html" + }, + { + "path": "encrypted-media/drm-mp4-setmediakeys.html", + "url": "/encrypted-media/drm-mp4-setmediakeys.html" + }, + { + "path": "encrypted-media/drm-mp4-syntax-mediakeys.html", + "url": "/encrypted-media/drm-mp4-syntax-mediakeys.html" + }, + { + "path": "encrypted-media/drm-mp4-syntax-mediakeysession.html", + "url": "/encrypted-media/drm-mp4-syntax-mediakeysession.html" + }, + { + "path": "encrypted-media/drm-mp4-syntax-mediakeysystemaccess.html", + "url": "/encrypted-media/drm-mp4-syntax-mediakeysystemaccess.html" + }, + { + "path": "encrypted-media/drm-mp4-unique-origin.html", + "url": "/encrypted-media/drm-mp4-unique-origin.html" + }, + { + "path": "encrypted-media/drm-mp4-waiting-for-a-key.html", + "url": "/encrypted-media/drm-mp4-waiting-for-a-key.html" + }, { "path": "encrypted-media/drm-not-callable-after-createsession.html", "url": "/encrypted-media/drm-not-callable-after-createsession.html" }, + { + "path": "encrypted-media/drm-temporary-license-type.html", + "url": "/encrypted-media/drm-temporary-license-type.html" + }, { "path": "encrypted-media/idlharness.html", "url": "/encrypted-media/idlharness.html" @@ -16257,7 +17725,7 @@ }, { "path": "eventsource/dedicated-worker/eventsource-eventtarget.worker.js", - "url": "/eventsource/dedicated-worker/eventsource-eventtarget.worker" + "url": "/eventsource/dedicated-worker/eventsource-eventtarget.worker.html" }, { "path": "eventsource/dedicated-worker/eventsource-onmesage.htm", @@ -16307,6 +17775,10 @@ "path": "eventsource/eventsource-eventtarget.htm", "url": "/eventsource/eventsource-eventtarget.htm" }, + { + "path": "eventsource/eventsource-onmessage-realm.htm", + "url": "/eventsource/eventsource-onmessage-realm.htm" + }, { "path": "eventsource/eventsource-onmessage.htm", "url": "/eventsource/eventsource-onmessage.htm" @@ -16479,6 +17951,18 @@ "path": "fetch/api/basic/accept-header.html", "url": "/fetch/api/basic/accept-header.html" }, + { + "path": "fetch/api/basic/conditional-get.html", + "url": "/fetch/api/basic/conditional-get.html" + }, + { + "path": "fetch/api/basic/error-after-response.html", + "url": "/fetch/api/basic/error-after-response.html" + }, + { + "path": "fetch/api/basic/integrity-sharedworker.html", + "url": "/fetch/api/basic/integrity-sharedworker.html" + }, { "path": "fetch/api/basic/integrity-worker.html", "url": "/fetch/api/basic/integrity-worker.html" @@ -16539,6 +18023,14 @@ "path": "fetch/api/basic/request-referrer.html", "url": "/fetch/api/basic/request-referrer.html" }, + { + "path": "fetch/api/basic/request-upload-worker.html", + "url": "/fetch/api/basic/request-upload-worker.html" + }, + { + "path": "fetch/api/basic/request-upload.html", + "url": "/fetch/api/basic/request-upload.html" + }, { "path": "fetch/api/basic/response-url-worker.html", "url": "/fetch/api/basic/response-url-worker.html" @@ -16831,6 +18323,38 @@ "path": "fetch/api/redirect/redirect-to-dataurl.html", "url": "/fetch/api/redirect/redirect-to-dataurl.html" }, + { + "path": "fetch/api/request/multi-globals/url-parsing.html", + "url": "/fetch/api/request/multi-globals/url-parsing.html" + }, + { + "path": "fetch/api/request/request-cache-default-conditional.html", + "url": "/fetch/api/request/request-cache-default-conditional.html" + }, + { + "path": "fetch/api/request/request-cache-default.html", + "url": "/fetch/api/request/request-cache-default.html" + }, + { + "path": "fetch/api/request/request-cache-force-cache.html", + "url": "/fetch/api/request/request-cache-force-cache.html" + }, + { + "path": "fetch/api/request/request-cache-no-cache.html", + "url": "/fetch/api/request/request-cache-no-cache.html" + }, + { + "path": "fetch/api/request/request-cache-no-store.html", + "url": "/fetch/api/request/request-cache-no-store.html" + }, + { + "path": "fetch/api/request/request-cache-only-if-cached.html", + "url": "/fetch/api/request/request-cache-only-if-cached.html" + }, + { + "path": "fetch/api/request/request-cache-reload.html", + "url": "/fetch/api/request/request-cache-reload.html" + }, { "path": "fetch/api/request/request-clone.sub.html", "url": "/fetch/api/request/request-clone.sub.html" @@ -16875,6 +18399,10 @@ "path": "fetch/api/request/request-structure.html", "url": "/fetch/api/request/request-structure.html" }, + { + "path": "fetch/api/response/multi-globals/url-parsing.html", + "url": "/fetch/api/response/multi-globals/url-parsing.html" + }, { "path": "fetch/api/response/response-cancel-stream.html", "url": "/fetch/api/response/response-cancel-stream.html" @@ -17021,7 +18549,7 @@ }, { "path": "hr-time/basic.worker.js", - "url": "/hr-time/basic.worker" + "url": "/hr-time/basic.worker.html" }, { "path": "hr-time/idlharness.html", @@ -17435,6 +18963,10 @@ "path": "html/browsers/history/the-history-interface/history_go_plus.html", "url": "/html/browsers/history/the-history-interface/history_go_plus.html" }, + { + "path": "html/browsers/history/the-history-interface/history_go_to_uri.html", + "url": "/html/browsers/history/the-history-interface/history_go_to_uri.html" + }, { "path": "html/browsers/history/the-history-interface/history_go_undefined.html", "url": "/html/browsers/history/the-history-interface/history_go_undefined.html" @@ -17479,10 +19011,6 @@ "path": "html/browsers/history/the-history-interface/joint_session_history/002.html", "url": "/html/browsers/history/the-history-interface/joint_session_history/002.html" }, - { - "path": "html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html", - "url": "/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html" - }, { "path": "html/browsers/history/the-history-interface/traverse_the_history_1.html", "url": "/html/browsers/history/the-history-interface/traverse_the_history_1.html" @@ -17539,6 +19067,10 @@ "path": "html/browsers/history/the-location-interface/document_location.html", "url": "/html/browsers/history/the-location-interface/document_location.html" }, + { + "path": "html/browsers/history/the-location-interface/location-prototype-setting.html", + "url": "/html/browsers/history/the-location-interface/location-prototype-setting.html" + }, { "path": "html/browsers/history/the-location-interface/location-stringifier.html", "url": "/html/browsers/history/the-location-interface/location-stringifier.html" @@ -17624,8 +19156,8 @@ "url": "/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html" }, { - "path": "html/browsers/history/the-location-interface/security_location_0.sub.htm", - "url": "/html/browsers/history/the-location-interface/security_location_0.sub.htm" + "path": "html/browsers/history/the-location-interface/security_location_0.htm", + "url": "/html/browsers/history/the-location-interface/security_location_0.htm" }, { "path": "html/browsers/offline/application-cache-api/api_status_idle.html", @@ -17679,6 +19211,22 @@ "path": "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain.html", "url": "/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain.html" }, + { + "path": "html/browsers/sandboxing/sandbox-allow-same-origin.html", + "url": "/html/browsers/sandboxing/sandbox-allow-same-origin.html" + }, + { + "path": "html/browsers/sandboxing/sandbox-allow-scripts.html", + "url": "/html/browsers/sandboxing/sandbox-allow-scripts.html" + }, + { + "path": "html/browsers/sandboxing/sandbox-disallow-same-origin.html", + "url": "/html/browsers/sandboxing/sandbox-disallow-same-origin.html" + }, + { + "path": "html/browsers/sandboxing/sandbox-disallow-scripts.html", + "url": "/html/browsers/sandboxing/sandbox-disallow-scripts.html" + }, { "path": "html/browsers/the-window-object/Document-defaultView.html", "url": "/html/browsers/the-window-object/Document-defaultView.html" @@ -17744,8 +19292,8 @@ "url": "/html/browsers/the-window-object/named-access-on-the-window-object/window-null-names.html" }, { - "path": "html/browsers/the-window-object/security-window/window-security.sub.html", - "url": "/html/browsers/the-window-object/security-window/window-security.sub.html" + "path": "html/browsers/the-window-object/security-window/window-security.html", + "url": "/html/browsers/the-window-object/security-window/window-security.html" }, { "path": "html/browsers/the-window-object/window-aliases.html", @@ -17763,6 +19311,10 @@ "path": "html/browsers/the-window-object/window-named-properties.html", "url": "/html/browsers/the-window-object/window-named-properties.html" }, + { + "path": "html/browsers/the-window-object/window-open-noopener.html", + "url": "/html/browsers/the-window-object/window-open-noopener.html" + }, { "path": "html/browsers/the-window-object/window-properties.html", "url": "/html/browsers/the-window-object/window-properties.html" @@ -17804,8 +19356,8 @@ "url": "/html/browsers/windows/browsing-context-names/browsing-context-default-name.html" }, { - "path": "html/browsers/windows/nested-browsing-contexts/frameElement.sub.html", - "url": "/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html" + "path": "html/browsers/windows/nested-browsing-contexts/frameElement.html", + "url": "/html/browsers/windows/nested-browsing-contexts/frameElement.html" }, { "path": "html/browsers/windows/nested-browsing-contexts/window-top-001.html", @@ -17820,16 +19372,16 @@ "url": "/html/browsers/windows/noreferrer.html" }, { - "path": "html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.sub.html", - "url": "/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.sub.html" + "path": "html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html", + "url": "/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html" }, { "path": "html/dom/documents/dom-tree-accessors/Document.body.html", "url": "/html/dom/documents/dom-tree-accessors/Document.body.html" }, { - "path": "html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html", - "url": "/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html" + "path": "html/dom/documents/dom-tree-accessors/Document.currentScript.html", + "url": "/html/dom/documents/dom-tree-accessors/Document.currentScript.html" }, { "path": "html/dom/documents/dom-tree-accessors/Document.getElementsByClassName-null-undef.html", @@ -18591,10 +20143,18 @@ "path": "html/editing/focus/focus-management/focus-events.html", "url": "/html/editing/focus/focus-management/focus-events.html" }, + { + "path": "html/editing/focus/processing-model/focus-fixup-rule-one-no-dialogs.html", + "url": "/html/editing/focus/processing-model/focus-fixup-rule-one-no-dialogs.html" + }, { "path": "html/editing/focus/sequential-focus-navigation-and-the-tabindex-attribute/focus-tabindex-default-value.html", "url": "/html/editing/focus/sequential-focus-navigation-and-the-tabindex-attribute/focus-tabindex-default-value.html" }, + { + "path": "html/infrastructure/common-dom-interfaces/collections/historical.html", + "url": "/html/infrastructure/common-dom-interfaces/collections/historical.html" + }, { "path": "html/infrastructure/common-dom-interfaces/collections/htmlallcollection.html", "url": "/html/infrastructure/common-dom-interfaces/collections/htmlallcollection.html" @@ -18704,8 +20264,8 @@ "url": "/html/semantics/document-metadata/the-base-element/base_href_invalid.html" }, { - "path": "html/semantics/document-metadata/the-base-element/base_href_specified.sub.html", - "url": "/html/semantics/document-metadata/the-base-element/base_href_specified.sub.html" + "path": "html/semantics/document-metadata/the-base-element/base_href_specified.html", + "url": "/html/semantics/document-metadata/the-base-element/base_href_specified.html" }, { "path": "html/semantics/document-metadata/the-base-element/base_href_unspecified.html", @@ -19987,6 +21547,10 @@ "path": "html/semantics/embedded-content/the-embed-element/embed-in-object-fallback.html", "url": "/html/semantics/embedded-content/the-embed-element/embed-in-object-fallback.html" }, + { + "path": "html/semantics/embedded-content/the-embed-element/historical.html", + "url": "/html/semantics/embedded-content/the-embed-element/historical.html" + }, { "path": "html/semantics/embedded-content/the-iframe-element/change_parentage.html", "url": "/html/semantics/embedded-content/the-iframe-element/change_parentage.html" @@ -20003,6 +21567,10 @@ "path": "html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html", "url": "/html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html" }, + { + "path": "html/semantics/embedded-content/the-iframe-element/iframe-append-to-child-document.html", + "url": "/html/semantics/embedded-content/the-iframe-element/iframe-append-to-child-document.html" + }, { "path": "html/semantics/embedded-content/the-iframe-element/iframe-load-event.html", "url": "/html/semantics/embedded-content/the-iframe-element/iframe-load-event.html" @@ -20016,12 +21584,28 @@ "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_allow_script.html" }, { - "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping.html", - "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping.html" + "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html", + "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html" }, { - "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping.html", - "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping.html" + "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html", + "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html" + }, + { + "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html", + "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html" + }, + { + "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html", + "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html" + }, + { + "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html", + "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html" + }, + { + "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html", + "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html" }, { "path": "html/semantics/embedded-content/the-iframe-element/move_iframe_in_dom_01.html", @@ -20055,6 +21639,10 @@ "path": "html/semantics/embedded-content/the-img-element/current-pixel-density/error.html", "url": "/html/semantics/embedded-content/the-img-element/current-pixel-density/error.html" }, + { + "path": "html/semantics/embedded-content/the-img-element/data-url.html", + "url": "/html/semantics/embedded-content/the-img-element/data-url.html" + }, { "path": "html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html", "url": "/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html" @@ -20095,6 +21683,14 @@ "path": "html/semantics/embedded-content/the-img-element/update-the-source-set.html", "url": "/html/semantics/embedded-content/the-img-element/update-the-source-set.html" }, + { + "path": "html/semantics/embedded-content/the-img-element/usemap-casing.html", + "url": "/html/semantics/embedded-content/the-img-element/usemap-casing.html" + }, + { + "path": "html/semantics/embedded-content/the-object-element/historical.html", + "url": "/html/semantics/embedded-content/the-object-element/historical.html" + }, { "path": "html/semantics/embedded-content/the-object-element/object-attributes.html", "url": "/html/semantics/embedded-content/the-object-element/object-attributes.html" @@ -20111,6 +21707,10 @@ "path": "html/semantics/embedded-content/the-object-element/object-handler.html", "url": "/html/semantics/embedded-content/the-object-element/object-handler.html" }, + { + "path": "html/semantics/embedded-content/the-object-element/usemap-casing.html", + "url": "/html/semantics/embedded-content/the-object-element/usemap-casing.html" + }, { "path": "html/semantics/embedded-content/the-video-element/video-tabindex.html", "url": "/html/semantics/embedded-content/the-video-element/video-tabindex.html" @@ -20271,6 +21871,10 @@ "path": "html/semantics/forms/the-fieldset-element/disabled-002.xhtml", "url": "/html/semantics/forms/the-fieldset-element/disabled-002.xhtml" }, + { + "path": "html/semantics/forms/the-form-element/form-action-url.html", + "url": "/html/semantics/forms/the-form-element/form-action-url.html" + }, { "path": "html/semantics/forms/the-form-element/form-autocomplete.html", "url": "/html/semantics/forms/the-form-element/form-autocomplete.html" @@ -20503,6 +22107,10 @@ "path": "html/semantics/forms/the-progress-element/progress.html", "url": "/html/semantics/forms/the-progress-element/progress.html" }, + { + "path": "html/semantics/forms/the-select-element/common-HTMLOptionsCollection-add.html", + "url": "/html/semantics/forms/the-select-element/common-HTMLOptionsCollection-add.html" + }, { "path": "html/semantics/forms/the-select-element/common-HTMLOptionsCollection-namedItem.html", "url": "/html/semantics/forms/the-select-element/common-HTMLOptionsCollection-namedItem.html" @@ -20523,6 +22131,10 @@ "path": "html/semantics/forms/the-select-element/select-remove.html", "url": "/html/semantics/forms/the-select-element/select-remove.html" }, + { + "path": "html/semantics/forms/the-select-element/selected-index.html", + "url": "/html/semantics/forms/the-select-element/selected-index.html" + }, { "path": "html/semantics/forms/the-textarea-element/cloning-steps.html", "url": "/html/semantics/forms/the-textarea-element/cloning-steps.html" @@ -20619,6 +22231,10 @@ "path": "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_getter.html", "url": "/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_getter.html" }, + { + "path": "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html", + "url": "/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html" + }, { "path": "html/semantics/scripting-1/the-script-element/async_001.htm", "url": "/html/semantics/scripting-1/the-script-element/async_001.htm" @@ -20663,6 +22279,10 @@ "path": "html/semantics/scripting-1/the-script-element/async_011.htm", "url": "/html/semantics/scripting-1/the-script-element/async_011.htm" }, + { + "path": "html/semantics/scripting-1/the-script-element/data-url.html", + "url": "/html/semantics/scripting-1/the-script-element/data-url.html" + }, { "path": "html/semantics/scripting-1/the-script-element/fetch-src/alpha/base.html", "url": "/html/semantics/scripting-1/the-script-element/fetch-src/alpha/base.html" @@ -20739,6 +22359,18 @@ "path": "html/semantics/scripting-1/the-script-element/script-not-found-not-executed.html", "url": "/html/semantics/scripting-1/the-script-element/script-not-found-not-executed.html" }, + { + "path": "html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-1.html", + "url": "/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-1.html" + }, + { + "path": "html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html", + "url": "/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html" + }, + { + "path": "html/semantics/scripting-1/the-script-element/script-onload-insertion-point.html", + "url": "/html/semantics/scripting-1/the-script-element/script-onload-insertion-point.html" + }, { "path": "html/semantics/scripting-1/the-script-element/script-onload-string.html", "url": "/html/semantics/scripting-1/the-script-element/script-onload-string.html" @@ -21223,6 +22855,34 @@ "path": "html/webappapis/atob/base64.html", "url": "/html/webappapis/atob/base64.html" }, + { + "path": "html/webappapis/idle-callbacks/callback-exception.html", + "url": "/html/webappapis/idle-callbacks/callback-exception.html" + }, + { + "path": "html/webappapis/idle-callbacks/callback-iframe.html", + "url": "/html/webappapis/idle-callbacks/callback-iframe.html" + }, + { + "path": "html/webappapis/idle-callbacks/callback-invoked.html", + "url": "/html/webappapis/idle-callbacks/callback-invoked.html" + }, + { + "path": "html/webappapis/idle-callbacks/callback-multiple-calls.html", + "url": "/html/webappapis/idle-callbacks/callback-multiple-calls.html" + }, + { + "path": "html/webappapis/idle-callbacks/callback-timeout.html", + "url": "/html/webappapis/idle-callbacks/callback-timeout.html" + }, + { + "path": "html/webappapis/idle-callbacks/cancel-invoked.html", + "url": "/html/webappapis/idle-callbacks/cancel-invoked.html" + }, + { + "path": "html/webappapis/idle-callbacks/idlharness.html", + "url": "/html/webappapis/idle-callbacks/idlharness.html" + }, { "path": "html/webappapis/scripting/event-loops/microtask_after_raf.html", "url": "/html/webappapis/scripting/event-loops/microtask_after_raf.html" @@ -21271,10 +22931,18 @@ "path": "html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-once.html", "url": "/html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-once.html" }, + { + "path": "html/webappapis/scripting/events/messageevent-constructor.https.html", + "url": "/html/webappapis/scripting/events/messageevent-constructor.https.html" + }, { "path": "html/webappapis/scripting/events/onerroreventhandler.html", "url": "/html/webappapis/scripting/events/onerroreventhandler.html" }, + { + "path": "html/webappapis/scripting/events/uncompiled_event_handler_with_scripting_disabled.html", + "url": "/html/webappapis/scripting/events/uncompiled_event_handler_with_scripting_disabled.html" + }, { "path": "html/webappapis/scripting/processing-model-2/addEventListener.html", "url": "/html/webappapis/scripting/processing-model-2/addEventListener.html" @@ -21409,7 +23077,7 @@ }, { "path": "html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker.js", - "url": "/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker" + "url": "/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker.html" }, { "path": "html/webappapis/system-state-and-capabilities/the-navigator-object/content.html", @@ -21483,6 +23151,30 @@ "path": "http/content_length.html", "url": "/http/content_length.html" }, + { + "path": "imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html", + "url": "/imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html" + }, + { + "path": "imagebitmap-renderingcontext/context-creation-with-alpha.html", + "url": "/imagebitmap-renderingcontext/context-creation-with-alpha.html" + }, + { + "path": "imagebitmap-renderingcontext/context-creation.html", + "url": "/imagebitmap-renderingcontext/context-creation.html" + }, + { + "path": "imagebitmap-renderingcontext/context-preserves-canvas.html", + "url": "/imagebitmap-renderingcontext/context-preserves-canvas.html" + }, + { + "path": "imagebitmap-renderingcontext/tranferFromImageBitmap-null.html", + "url": "/imagebitmap-renderingcontext/tranferFromImageBitmap-null.html" + }, + { + "path": "imagebitmap-renderingcontext/transferFromImageBitmap-detached.html", + "url": "/imagebitmap-renderingcontext/transferFromImageBitmap-detached.html" + }, { "path": "infrastructure/failing-test.html", "url": "/infrastructure/failing-test.html" @@ -21551,6 +23243,102 @@ "path": "js/builtins/WeakMap.prototype-properties.html", "url": "/js/builtins/WeakMap.prototype-properties.html" }, + { + "path": "mathml/presentation-markup/fractions/frac-1.html", + "url": "/mathml/presentation-markup/fractions/frac-1.html" + }, + { + "path": "mathml/presentation-markup/fractions/frac-parameters-1.html", + "url": "/mathml/presentation-markup/fractions/frac-parameters-1.html" + }, + { + "path": "mathml/presentation-markup/fractions/frac-parameters-2.html", + "url": "/mathml/presentation-markup/fractions/frac-parameters-2.html" + }, + { + "path": "mathml/presentation-markup/operators/mo-axis-height-1.html", + "url": "/mathml/presentation-markup/operators/mo-axis-height-1.html" + }, + { + "path": "mathml/presentation-markup/radicals/root-parameters-1.html", + "url": "/mathml/presentation-markup/radicals/root-parameters-1.html" + }, + { + "path": "mathml/presentation-markup/scripts/subsup-1.html", + "url": "/mathml/presentation-markup/scripts/subsup-1.html" + }, + { + "path": "mathml/presentation-markup/scripts/subsup-2.html", + "url": "/mathml/presentation-markup/scripts/subsup-2.html" + }, + { + "path": "mathml/presentation-markup/scripts/subsup-3.html", + "url": "/mathml/presentation-markup/scripts/subsup-3.html" + }, + { + "path": "mathml/presentation-markup/scripts/subsup-4.html", + "url": "/mathml/presentation-markup/scripts/subsup-4.html" + }, + { + "path": "mathml/presentation-markup/scripts/subsup-5.html", + "url": "/mathml/presentation-markup/scripts/subsup-5.html" + }, + { + "path": "mathml/presentation-markup/scripts/subsup-parameters-1.html", + "url": "/mathml/presentation-markup/scripts/subsup-parameters-1.html" + }, + { + "path": "mathml/presentation-markup/scripts/underover-1.html", + "url": "/mathml/presentation-markup/scripts/underover-1.html" + }, + { + "path": "mathml/presentation-markup/scripts/underover-parameters-1.html", + "url": "/mathml/presentation-markup/scripts/underover-parameters-1.html" + }, + { + "path": "mathml/presentation-markup/scripts/underover-parameters-2.html", + "url": "/mathml/presentation-markup/scripts/underover-parameters-2.html" + }, + { + "path": "mathml/presentation-markup/scripts/underover-parameters-3.html", + "url": "/mathml/presentation-markup/scripts/underover-parameters-3.html" + }, + { + "path": "mathml/presentation-markup/scripts/underover-parameters-4.html", + "url": "/mathml/presentation-markup/scripts/underover-parameters-4.html" + }, + { + "path": "mathml/presentation-markup/spaces/space-1.html", + "url": "/mathml/presentation-markup/spaces/space-1.html" + }, + { + "path": "mathml/presentation-markup/tables/table-axis-height.html", + "url": "/mathml/presentation-markup/tables/table-axis-height.html" + }, + { + "path": "mathml/relations/css-styling/displaystyle-1.html", + "url": "/mathml/relations/css-styling/displaystyle-1.html" + }, + { + "path": "mathml/relations/css-styling/lengths-3.html", + "url": "/mathml/relations/css-styling/lengths-3.html" + }, + { + "path": "mathml/relations/html5-tree/class-2.html", + "url": "/mathml/relations/html5-tree/class-2.html" + }, + { + "path": "mathml/relations/html5-tree/display-1.html", + "url": "/mathml/relations/html5-tree/display-1.html" + }, + { + "path": "mathml/relations/html5-tree/required-extensions-1.html", + "url": "/mathml/relations/html5-tree/required-extensions-1.html" + }, + { + "path": "mathml/relations/html5-tree/unique-identifier-2.html", + "url": "/mathml/relations/html5-tree/unique-identifier-2.html" + }, { "path": "media-source/SourceBuffer-abort-removed.html", "url": "/media-source/SourceBuffer-abort-removed.html" @@ -21775,6 +23563,10 @@ "path": "media-source/mediasource-trackdefaultlist.html", "url": "/media-source/mediasource-trackdefaultlist.html" }, + { + "path": "mediacapture-record/BlobEvent-constructor.html", + "url": "/mediacapture-record/BlobEvent-constructor.html" + }, { "path": "mediacapture-streams/GUM-api.https.html", "url": "/mediacapture-streams/GUM-api.https.html" @@ -21835,10 +23627,6 @@ "path": "mediacapture-streams/MediaStream-gettrackid.https.html", "url": "/mediacapture-streams/MediaStream-gettrackid.https.html" }, - { - "path": "mediacapture-streams/MediaStream-id-manual.https.html", - "url": "/mediacapture-streams/MediaStream-id-manual.https.html" - }, { "path": "mediacapture-streams/MediaStream-idl.https.html", "url": "/mediacapture-streams/MediaStream-idl.https.html" @@ -23923,6 +25711,10 @@ "path": "payment-request/payment-request-in-iframe.html", "url": "/payment-request/payment-request-in-iframe.html" }, + { + "path": "performance-timeline/case-sensitivity.html", + "url": "/performance-timeline/case-sensitivity.html" + }, { "path": "performance-timeline/idlharness.html", "url": "/performance-timeline/idlharness.html" @@ -23955,10 +25747,6 @@ "path": "pointerevents/pointerevent_constructor.html", "url": "/pointerevents/pointerevent_constructor.html" }, - { - "path": "pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html", - "url": "/pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html" - }, { "path": "pointerevents/pointerevent_touch-action-illegal.html", "url": "/pointerevents/pointerevent_touch-action-illegal.html" @@ -24007,6 +25795,10 @@ "path": "presentation-api/controlling-ua/reconnectToPresentation_mixedcontent.https.html", "url": "/presentation-api/controlling-ua/reconnectToPresentation_mixedcontent.https.html" }, + { + "path": "presentation-api/controlling-ua/reconnectToPresentation_notfound_error.html", + "url": "/presentation-api/controlling-ua/reconnectToPresentation_notfound_error.html" + }, { "path": "presentation-api/controlling-ua/reconnectToPresentation_sandboxing_error.html", "url": "/presentation-api/controlling-ua/reconnectToPresentation_sandboxing_error.html" @@ -24019,14 +25811,6 @@ "path": "presentation-api/controlling-ua/startNewPresentation_error.html", "url": "/presentation-api/controlling-ua/startNewPresentation_error.html" }, - { - "path": "presentation-api/controlling-ua/startNewPresentation_mixedcontent-manual.https.html", - "url": "/presentation-api/controlling-ua/startNewPresentation_mixedcontent-manual.https.html" - }, - { - "path": "presentation-api/controlling-ua/startNewPresentation_mixedcontent_multiple-manual.https.html", - "url": "/presentation-api/controlling-ua/startNewPresentation_mixedcontent_multiple-manual.https.html" - }, { "path": "presentation-api/receiving-ua/idlharness.html", "url": "/presentation-api/receiving-ua/idlharness.html" @@ -29447,6 +31231,14 @@ "path": "screen-orientation/orientation-reading.html", "url": "/screen-orientation/orientation-reading.html" }, + { + "path": "secure-contexts/basic-dedicated-worker.html", + "url": "/secure-contexts/basic-dedicated-worker.html" + }, + { + "path": "secure-contexts/basic-dedicated-worker.https.html", + "url": "/secure-contexts/basic-dedicated-worker.https.html" + }, { "path": "secure-contexts/basic-popup-and-iframe-tests.html", "url": "/secure-contexts/basic-popup-and-iframe-tests.html" @@ -29455,6 +31247,22 @@ "path": "secure-contexts/basic-popup-and-iframe-tests.https.html", "url": "/secure-contexts/basic-popup-and-iframe-tests.https.html" }, + { + "path": "secure-contexts/basic-shared-worker.html", + "url": "/secure-contexts/basic-shared-worker.html" + }, + { + "path": "secure-contexts/basic-shared-worker.https.html", + "url": "/secure-contexts/basic-shared-worker.https.html" + }, + { + "path": "secure-contexts/shared-worker-insecure-first.https.html", + "url": "/secure-contexts/shared-worker-insecure-first.https.html" + }, + { + "path": "secure-contexts/shared-worker-secure-first.https.html", + "url": "/secure-contexts/shared-worker-secure-first.https.html" + }, { "path": "selection/Document-open.html", "url": "/selection/Document-open.html" @@ -29507,6 +31315,10 @@ "path": "selectors/attribute-selectors/attribute-case/syntax.html", "url": "/selectors/attribute-selectors/attribute-case/syntax.html" }, + { + "path": "selectors/child-indexed-pseudo-class.html", + "url": "/selectors/child-indexed-pseudo-class.html" + }, { "path": "service-workers/cache-storage/serviceworker/credentials.html", "url": "/service-workers/cache-storage/serviceworker/credentials.html" @@ -29799,6 +31611,10 @@ "path": "service-workers/service-worker/service-worker-csp-script.https.html", "url": "/service-workers/service-worker/service-worker-csp-script.https.html" }, + { + "path": "service-workers/service-worker/serviceworker-message-event-historical.https.html", + "url": "/service-workers/service-worker/serviceworker-message-event-historical.https.html" + }, { "path": "service-workers/service-worker/serviceworkerobject-scripturl.https.html", "url": "/service-workers/service-worker/serviceworkerobject-scripturl.https.html" @@ -30271,6 +32087,22 @@ "path": "svg/interfaces.html", "url": "/svg/interfaces.html" }, + { + "path": "svg/linking/scripted/href-animate-element.html", + "url": "/svg/linking/scripted/href-animate-element.html" + }, + { + "path": "svg/linking/scripted/href-mpath-element.html", + "url": "/svg/linking/scripted/href-mpath-element.html" + }, + { + "path": "svg/linking/scripted/href-script-element-markup.html", + "url": "/svg/linking/scripted/href-script-element-markup.html" + }, + { + "path": "svg/linking/scripted/href-script-element.html", + "url": "/svg/linking/scripted/href-script-element.html" + }, { "path": "touch-events/create-touch-touchlist.html", "url": "/touch-events/create-touch-touchlist.html" @@ -30357,7 +32189,7 @@ }, { "path": "url/historical.worker.js", - "url": "/url/historical.worker" + "url": "/url/historical.worker.html" }, { "path": "url/interfaces.html", @@ -30367,10 +32199,6 @@ "path": "url/url-constructor.html", "url": "/url/url-constructor.html" }, - { - "path": "url/url-domainToUnicode.html", - "url": "/url/url-domainToUnicode.html" - }, { "path": "url/url-setters.html", "url": "/url/url-setters.html" @@ -30507,6 +32335,10 @@ "path": "web-animations/interfaces/Animation/constructor.html", "url": "/web-animations/interfaces/Animation/constructor.html" }, + { + "path": "web-animations/interfaces/Animation/effect.html", + "url": "/web-animations/interfaces/Animation/effect.html" + }, { "path": "web-animations/interfaces/Animation/finish.html", "url": "/web-animations/interfaces/Animation/finish.html" @@ -30623,6 +32455,10 @@ "path": "web-animations/interfaces/KeyframeEffect/getComputedTiming.html", "url": "/web-animations/interfaces/KeyframeEffect/getComputedTiming.html" }, + { + "path": "web-animations/interfaces/KeyframeEffect/iterationComposite.html", + "url": "/web-animations/interfaces/KeyframeEffect/iterationComposite.html" + }, { "path": "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html", "url": "/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html" @@ -30635,6 +32471,10 @@ "path": "web-animations/interfaces/KeyframeEffect/setTarget.html", "url": "/web-animations/interfaces/KeyframeEffect/setTarget.html" }, + { + "path": "web-animations/interfaces/KeyframeEffect/spacing.html", + "url": "/web-animations/interfaces/KeyframeEffect/spacing.html" + }, { "path": "web-animations/interfaces/KeyframeEffectReadOnly/spacing.html", "url": "/web-animations/interfaces/KeyframeEffectReadOnly/spacing.html" @@ -30663,6 +32503,10 @@ "path": "web-animations/timing-model/animations/set-the-animation-start-time.html", "url": "/web-animations/timing-model/animations/set-the-animation-start-time.html" }, + { + "path": "web-animations/timing-model/animations/set-the-target-effect-of-an-animation.html", + "url": "/web-animations/timing-model/animations/set-the-target-effect-of-an-animation.html" + }, { "path": "web-animations/timing-model/animations/set-the-timeline-of-an-animation.html", "url": "/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html" @@ -30695,6 +32539,10 @@ "path": "webaudio/the-audio-api/the-audioparam-interface/setValueAtTime-within-block.html", "url": "/webaudio/the-audio-api/the-audioparam-interface/setValueAtTime-within-block.html" }, + { + "path": "webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html", + "url": "/webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html" + }, { "path": "webaudio/the-audio-api/the-delaynode-interface/idl-test.html", "url": "/webaudio/the-audio-api/the-delaynode-interface/idl-test.html" @@ -30727,6 +32575,10 @@ "path": "webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html", "url": "/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html" }, + { + "path": "webauthn/interfaces.https.html", + "url": "/webauthn/interfaces.https.html" + }, { "path": "webdriver/interface.html", "url": "/webdriver/interface.html" @@ -33827,6 +35679,10 @@ "path": "webrtc/promises-call.html", "url": "/webrtc/promises-call.html" }, + { + "path": "webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html", + "url": "/webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html" + }, { "path": "webrtc/rtcpeerconnection/rtcpeerconnection-idl.html", "url": "/webrtc/rtcpeerconnection/rtcpeerconnection-idl.html" @@ -34149,7 +36005,7 @@ }, { "path": "websockets/Send-data.worker.js", - "url": "/websockets/Send-data.worker" + "url": "/websockets/Send-data.worker.html" }, { "path": "websockets/Send-null.htm", @@ -34959,6 +36815,10 @@ "path": "websockets/interfaces/WebSocket/url/resolve.html", "url": "/websockets/interfaces/WebSocket/url/resolve.html?wss" }, + { + "path": "websockets/multi-globals/message-received.html", + "url": "/websockets/multi-globals/message-received.html" + }, { "path": "websockets/opening-handshake/001.html", "url": "/websockets/opening-handshake/001.html" @@ -34969,7 +36829,7 @@ }, { "path": "websockets/opening-handshake/003-sets-origin.worker.js", - "url": "/websockets/opening-handshake/003-sets-origin.worker" + "url": "/websockets/opening-handshake/003-sets-origin.worker.html" }, { "path": "websockets/opening-handshake/003.html", @@ -35323,6 +37183,10 @@ "path": "workers/Worker_ErrorEvent_bubbles_cancelable.htm", "url": "/workers/Worker_ErrorEvent_bubbles_cancelable.htm" }, + { + "path": "workers/Worker_ErrorEvent_error.htm", + "url": "/workers/Worker_ErrorEvent_error.htm" + }, { "path": "workers/Worker_ErrorEvent_filename.htm", "url": "/workers/Worker_ErrorEvent_filename.htm" @@ -35461,7 +37325,7 @@ }, { "path": "workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker.js", - "url": "/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker" + "url": "/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker.html" }, { "path": "workers/constructors/Worker/ctor-1.html", @@ -35477,7 +37341,7 @@ }, { "path": "workers/constructors/Worker/expected-self-properties.worker.js", - "url": "/workers/constructors/Worker/expected-self-properties.worker" + "url": "/workers/constructors/Worker/expected-self-properties.worker.html" }, { "path": "workers/constructors/Worker/no-arguments-ctor.html", @@ -35497,7 +37361,7 @@ }, { "path": "workers/constructors/Worker/unexpected-self-properties.worker.js", - "url": "/workers/constructors/Worker/unexpected-self-properties.worker" + "url": "/workers/constructors/Worker/unexpected-self-properties.worker.html" }, { "path": "workers/constructors/Worker/unresolvable-url.html", @@ -35507,17 +37371,25 @@ "path": "workers/constructors/Worker/use-base-url.html", "url": "/workers/constructors/Worker/use-base-url.html" }, + { + "path": "workers/data-url-shared.html", + "url": "/workers/data-url-shared.html" + }, + { + "path": "workers/data-url.html", + "url": "/workers/data-url.html" + }, { "path": "workers/interfaces.worker.js", - "url": "/workers/interfaces.worker" + "url": "/workers/interfaces.worker.html" }, { "path": "workers/interfaces/DedicatedWorkerGlobalScope/EventTarget.worker.js", - "url": "/workers/interfaces/DedicatedWorkerGlobalScope/EventTarget.worker" + "url": "/workers/interfaces/DedicatedWorkerGlobalScope/EventTarget.worker.html" }, { "path": "workers/interfaces/DedicatedWorkerGlobalScope/onmessage.worker.js", - "url": "/workers/interfaces/DedicatedWorkerGlobalScope/onmessage.worker" + "url": "/workers/interfaces/DedicatedWorkerGlobalScope/onmessage.worker.html" }, { "path": "workers/interfaces/DedicatedWorkerGlobalScope/postMessage/event-ports-dedicated.html", @@ -35533,7 +37405,7 @@ }, { "path": "workers/interfaces/DedicatedWorkerGlobalScope/postMessage/return-value.worker.js", - "url": "/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/return-value.worker" + "url": "/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/return-value.worker.html" }, { "path": "workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null-in-array.html", @@ -35645,11 +37517,11 @@ }, { "path": "workers/interfaces/WorkerUtils/importScripts/001.worker.js", - "url": "/workers/interfaces/WorkerUtils/importScripts/001.worker" + "url": "/workers/interfaces/WorkerUtils/importScripts/001.worker.html" }, { "path": "workers/interfaces/WorkerUtils/importScripts/002.worker.js", - "url": "/workers/interfaces/WorkerUtils/importScripts/002.worker" + "url": "/workers/interfaces/WorkerUtils/importScripts/002.worker.html" }, { "path": "workers/interfaces/WorkerUtils/importScripts/003.html", @@ -35719,13 +37591,9 @@ "path": "workers/interfaces/WorkerUtils/navigator/language.html", "url": "/workers/interfaces/WorkerUtils/navigator/language.html" }, - { - "path": "workers/interfaces/WorkerUtils/navigator/window-only.worker.js", - "url": "/workers/interfaces/WorkerUtils/navigator/window-only.worker" - }, { "path": "workers/nested_worker.worker.js", - "url": "/workers/nested_worker.worker" + "url": "/workers/nested_worker.worker.html" }, { "path": "workers/postMessage_DataCloneErr.htm", @@ -35769,15 +37637,15 @@ }, { "path": "workers/semantics/encodings/004.worker.js", - "url": "/workers/semantics/encodings/004.worker" + "url": "/workers/semantics/encodings/004.worker.html" }, { "path": "workers/semantics/interface-objects/001.worker.js", - "url": "/workers/semantics/interface-objects/001.worker" + "url": "/workers/semantics/interface-objects/001.worker.html" }, { "path": "workers/semantics/interface-objects/002.worker.js", - "url": "/workers/semantics/interface-objects/002.worker" + "url": "/workers/semantics/interface-objects/002.worker.html" }, { "path": "workers/semantics/interface-objects/003.html", @@ -35887,6 +37755,11 @@ "path": "workers/semantics/xhr/006.html", "url": "/workers/semantics/xhr/006.html" }, + { + "path": "IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm", + "timeout": "long", + "url": "/IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm" + }, { "path": "IndexedDB/idbdatabase_createObjectStore10-1000ends.htm", "timeout": "long", @@ -36313,9 +38186,54 @@ "url": "/dom/ranges/Range-isPointInRange.html" }, { - "path": "dom/ranges/Range-mutations.html", + "path": "dom/ranges/Range-mutations-appendChild.html", "timeout": "long", - "url": "/dom/ranges/Range-mutations.html" + "url": "/dom/ranges/Range-mutations-appendChild.html" + }, + { + "path": "dom/ranges/Range-mutations-appendData.html", + "timeout": "long", + "url": "/dom/ranges/Range-mutations-appendData.html" + }, + { + "path": "dom/ranges/Range-mutations-dataChange.html", + "timeout": "long", + "url": "/dom/ranges/Range-mutations-dataChange.html" + }, + { + "path": "dom/ranges/Range-mutations-deleteData.html", + "timeout": "long", + "url": "/dom/ranges/Range-mutations-deleteData.html" + }, + { + "path": "dom/ranges/Range-mutations-insertBefore.html", + "timeout": "long", + "url": "/dom/ranges/Range-mutations-insertBefore.html" + }, + { + "path": "dom/ranges/Range-mutations-insertData.html", + "timeout": "long", + "url": "/dom/ranges/Range-mutations-insertData.html" + }, + { + "path": "dom/ranges/Range-mutations-removeChild.html", + "timeout": "long", + "url": "/dom/ranges/Range-mutations-removeChild.html" + }, + { + "path": "dom/ranges/Range-mutations-replaceChild.html", + "timeout": "long", + "url": "/dom/ranges/Range-mutations-replaceChild.html" + }, + { + "path": "dom/ranges/Range-mutations-replaceData.html", + "timeout": "long", + "url": "/dom/ranges/Range-mutations-replaceData.html" + }, + { + "path": "dom/ranges/Range-mutations-splitText.html", + "timeout": "long", + "url": "/dom/ranges/Range-mutations-splitText.html" }, { "path": "dom/ranges/Range-selectNode.html", @@ -36367,11 +38285,31 @@ "timeout": "long", "url": "/encoding/single-byte-decoder.html" }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear-sources.html", + "timeout": "long", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear-sources.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential-readyState.html", + "timeout": "long", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential-readyState.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.html", + "timeout": "long", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.html" + }, { "path": "encrypted-media/clearkey-mp4-playback-temporary-two-videos.html", "timeout": "long", "url": "/encrypted-media/clearkey-mp4-playback-temporary-two-videos.html" }, + { + "path": "encrypted-media/clearkey-mp4-requestmediakeysystemaccess.html", + "timeout": "long", + "url": "/encrypted-media/clearkey-mp4-requestmediakeysystemaccess.html" + }, { "path": "encrypted-media/drm-mp4-playback-persistent-usage-record.html", "timeout": "long", @@ -36387,11 +38325,36 @@ "timeout": "long", "url": "/encrypted-media/drm-mp4-playback-retrieve-persistent-license.html" }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-encrypted-clear-sources.html", + "timeout": "long", + "url": "/encrypted-media/drm-mp4-playback-temporary-encrypted-clear-sources.html" + }, { "path": "encrypted-media/drm-mp4-playback-temporary-events.html", "timeout": "long", "url": "/encrypted-media/drm-mp4-playback-temporary-events.html" }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-expired.html", + "timeout": "long", + "url": "/encrypted-media/drm-mp4-playback-temporary-expired.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-multikey-sequential-readyState.html", + "timeout": "long", + "url": "/encrypted-media/drm-mp4-playback-temporary-multikey-sequential-readyState.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html", + "timeout": "long", + "url": "/encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html" + }, + { + "path": "encrypted-media/drm-mp4-requestmediakeysystemaccess.html", + "timeout": "long", + "url": "/encrypted-media/drm-mp4-requestmediakeysystemaccess.html" + }, { "path": "eventsource/dedicated-worker/eventsource-constructor-non-same-origin.htm", "timeout": "long", @@ -36407,11 +38370,6 @@ "timeout": "long", "url": "/eventsource/shared-worker/eventsource-constructor-non-same-origin.htm" }, - { - "path": "fetch/api/request/request-cache.html", - "timeout": "long", - "url": "/fetch/api/request/request-cache.html" - }, { "path": "html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html", "timeout": "long", @@ -37715,109 +39673,20 @@ ] }, "local_changes": { - "deleted": [ - "url/url-domainToUnicode.html" - ], + "deleted": [], "deleted_reftests": {}, "items": { - "reftest": { - "html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html": [ - { - "path": "html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html", - "references": [ - [ - "/html/semantics/document-metadata/the-link-element/stylesheet-empty-href-ref.html", - "==" - ] - ], - "url": "/html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html" - } - ], - "html/semantics/document-metadata/the-link-element/stylesheet-media.html": [ - { - "path": "html/semantics/document-metadata/the-link-element/stylesheet-media.html", - "references": [ - [ - "/html/semantics/document-metadata/the-link-element/stylesheet-media-ref.html", - "==" - ] - ], - "url": "/html/semantics/document-metadata/the-link-element/stylesheet-media.html" - } - ] - }, "testharness": { - "cookies/path/match.html": [ - { - "path": "cookies/path/match.html", - "url": "/cookies/path/match.html" - } - ], - "cssom-view/MediaQueryList-with-empty-string.html": [ - { - "path": "cssom-view/MediaQueryList-with-empty-string.html", - "url": "/cssom-view/MediaQueryList-with-empty-string.html" - } - ], "html/semantics/forms/form-submission-0/submit-entity-body.html": [ { "path": "html/semantics/forms/form-submission-0/submit-entity-body.html", "timeout": "long", "url": "/html/semantics/forms/form-submission-0/submit-entity-body.html" } - ], - "html/semantics/forms/the-form-element/form-action-url.html": [ - { - "path": "html/semantics/forms/the-form-element/form-action-url.html", - "url": "/html/semantics/forms/the-form-element/form-action-url.html" - } - ], - "html/semantics/forms/the-select-element/common-HTMLOptionsCollection-add.html": [ - { - "path": "html/semantics/forms/the-select-element/common-HTMLOptionsCollection-add.html", - "url": "/html/semantics/forms/the-select-element/common-HTMLOptionsCollection-add.html" - } - ], - "html/semantics/forms/the-select-element/selected-index.html": [ - { - "path": "html/semantics/forms/the-select-element/selected-index.html", - "url": "/html/semantics/forms/the-select-element/selected-index.html" - } - ], - "html/webappapis/scripting/events/uncompiled_event_handler_with_scripting_disabled.html": [ - { - "path": "html/webappapis/scripting/events/uncompiled_event_handler_with_scripting_disabled.html", - "url": "/html/webappapis/scripting/events/uncompiled_event_handler_with_scripting_disabled.html" - } ] } }, - "reftest_nodes": { - "html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html": [ - { - "path": "html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html", - "references": [ - [ - "/html/semantics/document-metadata/the-link-element/stylesheet-empty-href-ref.html", - "==" - ] - ], - "url": "/html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html" - } - ], - "html/semantics/document-metadata/the-link-element/stylesheet-media.html": [ - { - "path": "html/semantics/document-metadata/the-link-element/stylesheet-media.html", - "references": [ - [ - "/html/semantics/document-metadata/the-link-element/stylesheet-media-ref.html", - "==" - ] - ], - "url": "/html/semantics/document-metadata/the-link-element/stylesheet-media.html" - } - ] - } + "reftest_nodes": {} }, "reftest_nodes": { "2dcontext/building-paths/canvas_complexshapes_arcto_001.htm": [ @@ -38372,6 +40241,30 @@ "url": "/compat/webkit-text-fill-color-property-006.html" } ], + "content-security-policy/font-src/font-blacklisted.html": [ + { + "path": "content-security-policy/font-src/font-blacklisted.html", + "references": [ + [ + "/content-security-policy/font-src/font-blacklisted-ref.html", + "!=" + ] + ], + "url": "/content-security-policy/font-src/font-blacklisted.html" + } + ], + "content-security-policy/font-src/font-whitelisted.html": [ + { + "path": "content-security-policy/font-src/font-whitelisted.html", + "references": [ + [ + "/content-security-policy/font-src/font-whitelisted-ref.html", + "==" + ] + ], + "url": "/content-security-policy/font-src/font-whitelisted.html" + } + ], "custom-elements/v0/registering/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-custom-tag.html": [ { "path": "custom-elements/v0/registering/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-custom-tag.html", @@ -40220,6 +42113,30 @@ "url": "/html/rendering/replaced-elements/images/space.html" } ], + "html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html": [ + { + "path": "html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html", + "references": [ + [ + "/html/semantics/document-metadata/the-link-element/stylesheet-empty-href-ref.html", + "==" + ] + ], + "url": "/html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html" + } + ], + "html/semantics/document-metadata/the-link-element/stylesheet-media.html": [ + { + "path": "html/semantics/document-metadata/the-link-element/stylesheet-media.html", + "references": [ + [ + "/html/semantics/document-metadata/the-link-element/stylesheet-media-ref.html", + "==" + ] + ], + "url": "/html/semantics/document-metadata/the-link-element/stylesheet-media.html" + } + ], "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html": [ { "path": "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html", @@ -40472,6 +42389,126 @@ "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-002.html" } ], + "html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item.html": [ + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item.html" + } + ], + "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu.html": [ + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu.html" + } + ], + "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed.html": [ + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed.html" + } + ], + "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir.html": [ + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir.html" + } + ], + "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol.html": [ + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol.html" + } + ], + "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent.html": [ + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent.html" + } + ], + "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html": [ + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html" + } + ], + "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul.html": [ + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul.html" + } + ], + "html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner.html": [ + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner.html" + } + ], + "html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered.html": [ + { + "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered.html", + "references": [ + [ + "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered.html" + } + ], "html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001.html": [ { "path": "html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001.html", @@ -40544,6 +42581,66 @@ "url": "/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003.html" } ], + "html/semantics/grouping-content/the-ol-element/reversed-1a.html": [ + { + "path": "html/semantics/grouping-content/the-ol-element/reversed-1a.html", + "references": [ + [ + "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-ol-element/reversed-1a.html" + } + ], + "html/semantics/grouping-content/the-ol-element/reversed-1b.html": [ + { + "path": "html/semantics/grouping-content/the-ol-element/reversed-1b.html", + "references": [ + [ + "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-ol-element/reversed-1b.html" + } + ], + "html/semantics/grouping-content/the-ol-element/reversed-1c.html": [ + { + "path": "html/semantics/grouping-content/the-ol-element/reversed-1c.html", + "references": [ + [ + "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-ol-element/reversed-1c.html" + } + ], + "html/semantics/grouping-content/the-ol-element/reversed-1d.html": [ + { + "path": "html/semantics/grouping-content/the-ol-element/reversed-1d.html", + "references": [ + [ + "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-ol-element/reversed-1d.html" + } + ], + "html/semantics/grouping-content/the-ol-element/reversed-1e.html": [ + { + "path": "html/semantics/grouping-content/the-ol-element/reversed-1e.html", + "references": [ + [ + "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/grouping-content/the-ol-element/reversed-1e.html" + } + ], "html/semantics/grouping-content/the-ol-element/reversed-2.html": [ { "path": "html/semantics/grouping-content/the-ol-element/reversed-2.html", @@ -40916,6 +43013,438 @@ "url": "/http/basic-auth-cache-test.html" } ], + "mathml/presentation-markup/spaces/space-2.html": [ + { + "path": "mathml/presentation-markup/spaces/space-2.html", + "references": [ + [ + "/mathml/presentation-markup/spaces/space-2-ref.html", + "==" + ] + ], + "url": "/mathml/presentation-markup/spaces/space-2.html" + } + ], + "mathml/relations/css-styling/color-1.html": [ + { + "path": "mathml/relations/css-styling/color-1.html", + "references": [ + [ + "/mathml/relations/css-styling/color-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/color-1.html" + } + ], + "mathml/relations/css-styling/display-1.html": [ + { + "path": "mathml/relations/css-styling/display-1.html", + "references": [ + [ + "/mathml/relations/css-styling/display-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/display-1.html" + } + ], + "mathml/relations/css-styling/lengths-1-ref.html": [ + { + "path": "mathml/relations/css-styling/lengths-1-ref.html", + "references": [ + [ + "/mathml/relations/css-styling/lengths-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/lengths-1-ref.html" + } + ], + "mathml/relations/css-styling/lengths-1.html": [ + { + "path": "mathml/relations/css-styling/lengths-1.html", + "references": [ + [ + "/mathml/relations/css-styling/lengths-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/lengths-1.html" + } + ], + "mathml/relations/css-styling/lengths-2.html": [ + { + "path": "mathml/relations/css-styling/lengths-2.html", + "references": [ + [ + "/mathml/relations/css-styling/lengths-2-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/lengths-2.html" + } + ], + "mathml/relations/css-styling/mathvariant-bold-fraktur.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-bold-fraktur.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-bold-fraktur.html" + } + ], + "mathml/relations/css-styling/mathvariant-bold-italic.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-bold-italic.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-bold-italic-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-bold-italic.html" + } + ], + "mathml/relations/css-styling/mathvariant-bold-sans-serif.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-bold-sans-serif.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-bold-sans-serif-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-bold-sans-serif.html" + } + ], + "mathml/relations/css-styling/mathvariant-bold-script.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-bold-script.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-bold-script-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-bold-script.html" + } + ], + "mathml/relations/css-styling/mathvariant-bold.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-bold.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-bold-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-bold.html" + } + ], + "mathml/relations/css-styling/mathvariant-double-struck.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-double-struck.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-double-struck-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-double-struck.html" + } + ], + "mathml/relations/css-styling/mathvariant-fraktur.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-fraktur.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-fraktur-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-fraktur.html" + } + ], + "mathml/relations/css-styling/mathvariant-initial.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-initial.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-initial-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-initial.html" + } + ], + "mathml/relations/css-styling/mathvariant-italic.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-italic.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-italic-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-italic.html" + } + ], + "mathml/relations/css-styling/mathvariant-looped.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-looped.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-looped-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-looped.html" + } + ], + "mathml/relations/css-styling/mathvariant-monospace.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-monospace.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-monospace-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-monospace.html" + } + ], + "mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html" + } + ], + "mathml/relations/css-styling/mathvariant-sans-serif-italic.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-sans-serif-italic.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-sans-serif-italic-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-sans-serif-italic.html" + } + ], + "mathml/relations/css-styling/mathvariant-sans-serif.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-sans-serif.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-sans-serif-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-sans-serif.html" + } + ], + "mathml/relations/css-styling/mathvariant-script.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-script.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-script-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-script.html" + } + ], + "mathml/relations/css-styling/mathvariant-stretched.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-stretched.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-stretched-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-stretched.html" + } + ], + "mathml/relations/css-styling/mathvariant-tailed.html": [ + { + "path": "mathml/relations/css-styling/mathvariant-tailed.html", + "references": [ + [ + "/mathml/relations/css-styling/mathvariant-tailed-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/mathvariant-tailed.html" + } + ], + "mathml/relations/css-styling/visibility-1.html": [ + { + "path": "mathml/relations/css-styling/visibility-1.html", + "references": [ + [ + "/mathml/relations/css-styling/visibility-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/css-styling/visibility-1.html" + } + ], + "mathml/relations/html5-tree/class-1.html": [ + { + "path": "mathml/relations/html5-tree/class-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/class-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/class-1.html" + } + ], + "mathml/relations/html5-tree/color-attributes-1.html": [ + { + "path": "mathml/relations/html5-tree/color-attributes-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/color-attributes-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/color-attributes-1.html" + } + ], + "mathml/relations/html5-tree/dynamic-1.html": [ + { + "path": "mathml/relations/html5-tree/dynamic-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/dynamic-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/dynamic-1.html" + } + ], + "mathml/relations/html5-tree/href-click-1.html": [ + { + "path": "mathml/relations/html5-tree/href-click-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/href-click-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/href-click-1.html" + } + ], + "mathml/relations/html5-tree/href-click-2.html": [ + { + "path": "mathml/relations/html5-tree/href-click-2.html", + "references": [ + [ + "/mathml/relations/html5-tree/href-click-2-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/href-click-2.html" + } + ], + "mathml/relations/html5-tree/integration-point-1.html": [ + { + "path": "mathml/relations/html5-tree/integration-point-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/integration-point-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/integration-point-1.html" + } + ], + "mathml/relations/html5-tree/integration-point-2.html": [ + { + "path": "mathml/relations/html5-tree/integration-point-2.html", + "references": [ + [ + "/mathml/relations/html5-tree/integration-point-2-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/integration-point-2.html" + } + ], + "mathml/relations/html5-tree/integration-point-3.html": [ + { + "path": "mathml/relations/html5-tree/integration-point-3.html", + "references": [ + [ + "/mathml/relations/html5-tree/integration-point-3-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/integration-point-3.html" + } + ], + "mathml/relations/html5-tree/required-extensions-2.html": [ + { + "path": "mathml/relations/html5-tree/required-extensions-2.html", + "references": [ + [ + "/mathml/relations/html5-tree/required-extensions-2-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/required-extensions-2.html" + } + ], + "mathml/relations/html5-tree/unique-identifier-1.html": [ + { + "path": "mathml/relations/html5-tree/unique-identifier-1.html", + "references": [ + [ + "/mathml/relations/html5-tree/unique-identifier-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/unique-identifier-1.html" + } + ], + "mathml/relations/html5-tree/unique-identifier-3.html": [ + { + "path": "mathml/relations/html5-tree/unique-identifier-3.html", + "references": [ + [ + "/mathml/relations/html5-tree/unique-identifier-3-ref.html", + "==" + ] + ], + "url": "/mathml/relations/html5-tree/unique-identifier-3.html" + } + ], + "mathml/relations/text-and-math/use-typo-metrics-1.html": [ + { + "path": "mathml/relations/text-and-math/use-typo-metrics-1.html", + "references": [ + [ + "/mathml/relations/text-and-math/use-typo-metrics-1-ref.html", + "==" + ] + ], + "url": "/mathml/relations/text-and-math/use-typo-metrics-1.html" + } + ], "quirks-mode/historical/list-item-bullet-size.html": [ { "path": "quirks-mode/historical/list-item-bullet-size.html", @@ -41000,6 +43529,150 @@ "url": "/shadow-dom/untriaged/styles/not-apply-in-shadow-root-001.html" } ], + "svg/linking/reftests/href-a-element-attr-change.html": [ + { + "path": "svg/linking/reftests/href-a-element-attr-change.html", + "references": [ + [ + "/svg/linking/reftests/href-a-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-a-element-attr-change.html" + } + ], + "svg/linking/reftests/href-feImage-element.html": [ + { + "path": "svg/linking/reftests/href-feImage-element.html", + "references": [ + [ + "/svg/linking/reftests/href-feImage-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-feImage-element.html" + } + ], + "svg/linking/reftests/href-filter-element.html": [ + { + "path": "svg/linking/reftests/href-filter-element.html", + "references": [ + [ + "/svg/linking/reftests/href-filter-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-filter-element.html" + } + ], + "svg/linking/reftests/href-gradient-element.html": [ + { + "path": "svg/linking/reftests/href-gradient-element.html", + "references": [ + [ + "/svg/linking/reftests/href-gradient-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-gradient-element.html" + } + ], + "svg/linking/reftests/href-image-element.html": [ + { + "path": "svg/linking/reftests/href-image-element.html", + "references": [ + [ + "/svg/linking/reftests/href-image-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-image-element.html" + } + ], + "svg/linking/reftests/href-pattern-element.html": [ + { + "path": "svg/linking/reftests/href-pattern-element.html", + "references": [ + [ + "/svg/linking/reftests/href-pattern-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-pattern-element.html" + } + ], + "svg/linking/reftests/href-textPath-element.html": [ + { + "path": "svg/linking/reftests/href-textPath-element.html", + "references": [ + [ + "/svg/linking/reftests/href-textPath-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-textPath-element.html" + } + ], + "svg/linking/reftests/href-use-element.html": [ + { + "path": "svg/linking/reftests/href-use-element.html", + "references": [ + [ + "/svg/linking/reftests/href-use-element-ref.html", + "==" + ] + ], + "url": "/svg/linking/reftests/href-use-element.html" + } + ], + "svg/shapes/rect-01.svg": [ + { + "path": "svg/shapes/rect-01.svg", + "references": [ + [ + "/svg/shapes/rect-01-ref.html", + "==" + ] + ], + "url": "/svg/shapes/rect-01.svg" + } + ], + "svg/shapes/rect-02.svg": [ + { + "path": "svg/shapes/rect-02.svg", + "references": [ + [ + "/svg/shapes/rect-02-ref.html", + "==" + ] + ], + "url": "/svg/shapes/rect-02.svg" + } + ], + "svg/shapes/rect-03.svg": [ + { + "path": "svg/shapes/rect-03.svg", + "references": [ + [ + "/svg/shapes/rect-03-ref.html", + "==" + ] + ], + "url": "/svg/shapes/rect-03.svg" + } + ], + "svg/shapes/rect-04.svg": [ + { + "path": "svg/shapes/rect-04.svg", + "references": [ + [ + "/svg/shapes/rect-04-ref.html", + "==" + ] + ], + "url": "/svg/shapes/rect-04.svg" + } + ], "webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up.html": [ { "path": "webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up.html", @@ -43653,7 +46326,7 @@ } ] }, - "rev": "3b3585e368841b77caea8576fa56cef91c3fbdf0", + "rev": "e8bfc205e36ad699601212cd50083870bad9a75d", "url_base": "/", "version": 3 } diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker.js.ini index a38bb6334e6..73885505831 100644 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker.js.ini @@ -1,3 +1,3 @@ -[ecdh_bits.worker] +[ecdh_bits.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker.js.ini index d06f90911fe..9f20f554ccb 100644 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker.js.ini @@ -1,3 +1,3 @@ -[ecdh_keys.worker] +[ecdh_keys.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/hkdf.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/hkdf.worker.js.ini index c036e5efc17..4831ce66875 100644 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/hkdf.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/hkdf.worker.js.ini @@ -1,3 +1,3 @@ -[hkdf.worker] +[hkdf.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/pbkdf2.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/pbkdf2.worker.js.ini index 449664ad47b..4b70f2b1f1d 100644 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/pbkdf2.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/pbkdf2.worker.js.ini @@ -1,3 +1,3 @@ -[pbkdf2.worker] +[pbkdf2.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/digest/digest.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/digest/digest.worker.js.ini index 715e7fa9097..ee646a95f38 100644 --- a/tests/wpt/metadata/WebCryptoAPI/digest/digest.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/digest/digest.worker.js.ini @@ -1,4 +1,4 @@ -[digest.worker] +[digest.worker.html] type: testharness [SHA-1 with empty source data] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.worker.js.ini index ad9373e870d..990ba43cd33 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_cbc.worker.js.ini @@ -1,3 +1,3 @@ -[aes_cbc.worker] +[aes_cbc.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.worker.js.ini index b65f0a6d0f5..f25976f5bca 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_ctr.worker.js.ini @@ -1,3 +1,3 @@ -[aes_ctr.worker] +[aes_ctr.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.worker.js.ini index a576b4e021b..79535257faf 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm.worker.js.ini @@ -1,3 +1,3 @@ -[aes_gcm.worker] +[aes_gcm.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.worker.js.ini index addfa4b287f..91d784e300c 100644 --- a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/rsa.worker.js.ini @@ -1,3 +1,3 @@ -[rsa.worker] +[rsa.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures.worker.js.ini index 1e4aabbea47..a28f0dff8e3 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures.worker.js.ini @@ -1,3 +1,3 @@ -[failures.worker] +[failures.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.worker.js.ini index 7b3310b78b5..077ac5f87ae 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CBC.worker.js.ini @@ -1,3 +1,3 @@ -[failures_AES-CBC.worker] +[failures_AES-CBC.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.worker.js.ini index 472b09dd1ee..478ee6b23c3 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-CTR.worker.js.ini @@ -1,3 +1,3 @@ -[failures_AES-CTR.worker] +[failures_AES-CTR.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.worker.js.ini index 64e9f58f061..0a0afaff0d7 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-GCM.worker.js.ini @@ -1,3 +1,3 @@ -[failures_AES-GCM.worker] +[failures_AES-GCM.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.worker.js.ini index 96031ce55c3..184df17d30b 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_AES-KW.worker.js.ini @@ -1,3 +1,3 @@ -[failures_AES-KW.worker] +[failures_AES-KW.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.worker.js.ini index 49ab628294f..d8a841420a8 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDH.worker.js.ini @@ -1,3 +1,3 @@ -[failures_ECDH.worker] +[failures_ECDH.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.worker.js.ini index 2fd250f4500..dff306cc4d1 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_ECDSA.worker.js.ini @@ -1,3 +1,3 @@ -[failures_ECDSA.worker] +[failures_ECDSA.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.worker.js.ini index 411ecbddac9..bc918d0a819 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_HMAC.worker.js.ini @@ -1,3 +1,3 @@ -[failures_HMAC.worker] +[failures_HMAC.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.worker.js.ini index 3ec9c3c5388..3fee657163c 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-OAEP.worker.js.ini @@ -1,3 +1,3 @@ -[failures_RSA-OAEP.worker] +[failures_RSA-OAEP.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.worker.js.ini index 7b28b2c0480..52ee9bde09d 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSA-PSS.worker.js.ini @@ -1,3 +1,3 @@ -[failures_RSA-PSS.worker] +[failures_RSA-PSS.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.worker.js.ini index 5cb45ae095b..b8b37f0b6e5 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.worker.js.ini @@ -1,3 +1,3 @@ -[failures_RSASSA-PKCS1-v1_5.worker] +[failures_RSASSA-PKCS1-v1_5.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes.worker.js.ini index f3a7d610c37..87f8db413bc 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes.worker.js.ini @@ -1,3 +1,3 @@ -[successes.worker] +[successes.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.worker.js.ini index e9a9e303a25..ec5ae4f0bef 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CBC.worker.js.ini @@ -1,3 +1,3 @@ -[successes_AES-CBC.worker] +[successes_AES-CBC.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.worker.js.ini index dcf7febafe5..662f8504734 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-CTR.worker.js.ini @@ -1,3 +1,3 @@ -[successes_AES-CTR.worker] +[successes_AES-CTR.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.worker.js.ini index 4b949a1b47d..180de54dad9 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-GCM.worker.js.ini @@ -1,3 +1,3 @@ -[successes_AES-GCM.worker] +[successes_AES-GCM.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.worker.js.ini index 5efa92cfc5d..6c38652867a 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_AES-KW.worker.js.ini @@ -1,3 +1,3 @@ -[successes_AES-KW.worker] +[successes_AES-KW.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.worker.js.ini index 42eac719df6..7d00784170d 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDH.worker.js.ini @@ -1,3 +1,3 @@ -[successes_ECDH.worker] +[successes_ECDH.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.worker.js.ini index 0d73e197cf9..5cb011f2614 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_ECDSA.worker.js.ini @@ -1,3 +1,3 @@ -[successes_ECDSA.worker] +[successes_ECDSA.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.worker.js.ini index 84b2544fd81..9296e99064e 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_HMAC.worker.js.ini @@ -1,3 +1,3 @@ -[successes_HMAC.worker] +[successes_HMAC.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.worker.js.ini index f4e683fa2df..61c9375046f 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-OAEP.worker.js.ini @@ -1,3 +1,3 @@ -[successes_RSA-OAEP.worker] +[successes_RSA-OAEP.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.worker.js.ini index 76a09318544..3b435eaa1ed 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSA-PSS.worker.js.ini @@ -1,3 +1,3 @@ -[successes_RSA-PSS.worker] +[successes_RSA-PSS.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.worker.js.ini index 95acb89f629..9247c718885 100644 --- a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.worker.js.ini @@ -1,3 +1,3 @@ -[successes_RSASSA-PKCS1-v1_5.worker] +[successes_RSASSA-PKCS1-v1_5.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/idlharness.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/idlharness.worker.js.ini index fa3b42951f7..71b1ea6c745 100644 --- a/tests/wpt/metadata/WebCryptoAPI/idlharness.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/idlharness.worker.js.ini @@ -1,5 +1,8 @@ -[idlharness.worker] +[idlharness.worker.html] type: testharness + [ArrayBuffer interface: existence and properties of interface object] + expected: FAIL + [Crypto interface: attribute subtle] expected: FAIL @@ -162,6 +165,3 @@ [SubtleCrypto interface: calling unwrapKey(KeyFormat,BufferSource,CryptoKey,AlgorithmIdentifier,AlgorithmIdentifier,boolean,[object Object\]) on crypto.subtle with too few arguments must throw TypeError] expected: FAIL - [ArrayBuffer interface: existence and properties of interface object] - expected: FAIL - diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/ec_importKey.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/ec_importKey.worker.js.ini index b9c9b687623..50b89ab7222 100644 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/ec_importKey.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/import_export/ec_importKey.worker.js.ini @@ -1,4 +1,4 @@ -[ec_importKey.worker] +[ec_importKey.worker.html] type: testharness [Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, [\])] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/rsa_importKey.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/rsa_importKey.worker.js.ini index c6e5bf65a4d..9f6f25dcca9 100644 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/rsa_importKey.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/import_export/rsa_importKey.worker.js.ini @@ -1,6 +1,5 @@ -[rsa_importKey.worker] +[rsa_importKey.worker.html] type: testharness - disabled: https://github.com/servo/servo/issues/12654 [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSA-OAEP}, true, [encrypt\])] expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/symmetric_importKey.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/symmetric_importKey.worker.js.ini index 5d98517ad63..d974812e8f6 100644 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/symmetric_importKey.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/import_export/symmetric_importKey.worker.js.ini @@ -1,4 +1,4 @@ -[symmetric_importKey.worker] +[symmetric_importKey.worker.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 diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.worker.js.ini index 50fe8b0f2f0..f1f9ac74838 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/ecdsa.worker.js.ini @@ -1,3 +1,3 @@ -[ecdsa.worker] +[ecdsa.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.worker.js.ini index 76f33a3d17d..3842f8812c6 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/hmac.worker.js.ini @@ -1,3 +1,3 @@ -[hmac.worker] +[hmac.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.worker.js.ini index 63b341c3b39..206f3c11726 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pkcs.worker.js.ini @@ -1,3 +1,3 @@ -[rsa_pkcs.worker] +[rsa_pkcs.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.worker.js.ini index 4b81358e800..89aa8859aff 100644 --- a/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/sign_verify/rsa_pss.worker.js.ini @@ -1,3 +1,3 @@ -[rsa_pss.worker] +[rsa_pss.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.js.ini index 1467e49622f..0726e6d35ef 100644 --- a/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.js.ini @@ -1,3 +1,3 @@ -[wrapKey_unwrapKey.worker] +[wrapKey_unwrapKey.worker.html] type: testharness expected: ERROR diff --git a/tests/wpt/metadata/WebIDL/current-realm.html.ini b/tests/wpt/metadata/WebIDL/current-realm.html.ini new file mode 100644 index 00000000000..f1c9625cf74 --- /dev/null +++ b/tests/wpt/metadata/WebIDL/current-realm.html.ini @@ -0,0 +1,95 @@ +[current-realm.html] + type: testharness + [querySelectorAll] + expected: FAIL + + [createElement] + expected: FAIL + + [createElementNS] + expected: FAIL + + [createDocumentFragment] + expected: FAIL + + [createTextNode] + expected: FAIL + + [createComment] + expected: FAIL + + [createProcessingInstruction] + expected: FAIL + + [createAttribute] + expected: FAIL + + [createAttributeNS] + expected: FAIL + + [createEvent] + expected: FAIL + + [createRange] + expected: FAIL + + [createNodeIterator] + expected: FAIL + + [createTreeWalker] + expected: FAIL + + [getElementsByTagName] + expected: FAIL + + [getElementsByTagNameNS] + expected: FAIL + + [getElementsByClassName] + expected: FAIL + + [createDocumentType] + expected: FAIL + + [createDocument] + expected: FAIL + + [createHTMLDocument] + expected: FAIL + + [NamedNodeMap item] + expected: FAIL + + [NamedNodeMap getNamedItem] + expected: FAIL + + [NamedNodeMap getNamedItemNS] + expected: FAIL + + [splitText] + expected: FAIL + + [extractContents] + expected: FAIL + + [cloneContents] + expected: FAIL + + [cloneRange] + expected: FAIL + + [getContext 2d] + expected: FAIL + + [getContext webgl] + expected: FAIL + + [createImageData] + expected: FAIL + + [getImageData] + expected: FAIL + + [FontFace's load()] + expected: FAIL + diff --git a/tests/wpt/metadata/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js.ini b/tests/wpt/metadata/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js.ini index 66a75c592b8..40ad9777f12 100644 --- a/tests/wpt/metadata/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js.ini +++ b/tests/wpt/metadata/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js.ini @@ -1,4 +1,4 @@ -[constructor-object.worker] +[constructor-object.worker.html] type: testharness [existence and properties of DOMException] expected: FAIL diff --git a/tests/wpt/metadata/XMLHttpRequest/abort-during-open.htm.ini b/tests/wpt/metadata/XMLHttpRequest/abort-during-open.htm.ini new file mode 100644 index 00000000000..eac211dc538 --- /dev/null +++ b/tests/wpt/metadata/XMLHttpRequest/abort-during-open.htm.ini @@ -0,0 +1,5 @@ +[abort-during-open.htm] + type: testharness + [XMLHttpRequest: abort() during OPEN] + expected: FAIL + diff --git a/tests/wpt/metadata/XMLHttpRequest/abort-during-open.worker.js.ini b/tests/wpt/metadata/XMLHttpRequest/abort-during-open.worker.js.ini new file mode 100644 index 00000000000..de95cce12e0 --- /dev/null +++ b/tests/wpt/metadata/XMLHttpRequest/abort-during-open.worker.js.ini @@ -0,0 +1,5 @@ +[abort-during-open.worker.html] + type: testharness + [Untitled] + expected: FAIL + diff --git a/tests/wpt/metadata/XMLHttpRequest/abort-event-abort.htm.ini b/tests/wpt/metadata/XMLHttpRequest/abort-event-abort.htm.ini new file mode 100644 index 00000000000..2804d13941b --- /dev/null +++ b/tests/wpt/metadata/XMLHttpRequest/abort-event-abort.htm.ini @@ -0,0 +1,5 @@ +[abort-event-abort.htm] + type: testharness + [XMLHttpRequest: The abort() method: do not fire abort event in OPENED state when send() flag is unset.] + expected: FAIL + diff --git a/tests/wpt/metadata/XMLHttpRequest/responsexml-basic.htm.ini b/tests/wpt/metadata/XMLHttpRequest/responsexml-basic.htm.ini index bf2383d17ac..df9151dc64c 100644 --- a/tests/wpt/metadata/XMLHttpRequest/responsexml-basic.htm.ini +++ b/tests/wpt/metadata/XMLHttpRequest/responsexml-basic.htm.ini @@ -1,8 +1,5 @@ [responsexml-basic.htm] type: testharness - [XMLHttpRequest: responseXML basic test] - expected: FAIL - [responseXML on empty response documents] expected: FAIL diff --git a/tests/wpt/metadata/XMLHttpRequest/send-after-setting-document-domain.htm.ini b/tests/wpt/metadata/XMLHttpRequest/send-after-setting-document-domain.htm.ini new file mode 100644 index 00000000000..cb48f45fae3 --- /dev/null +++ b/tests/wpt/metadata/XMLHttpRequest/send-after-setting-document-domain.htm.ini @@ -0,0 +1,3 @@ +[send-after-setting-document-domain.htm] + type: testharness + expected: ERROR diff --git a/tests/wpt/metadata/XMLHttpRequest/send-data-unexpected-tostring.htm.ini b/tests/wpt/metadata/XMLHttpRequest/send-data-unexpected-tostring.htm.ini new file mode 100644 index 00000000000..83018dbd05b --- /dev/null +++ b/tests/wpt/metadata/XMLHttpRequest/send-data-unexpected-tostring.htm.ini @@ -0,0 +1,5 @@ +[send-data-unexpected-tostring.htm] + type: testharness + [abort() called from data stringification] + expected: FAIL + diff --git a/tests/wpt/metadata/XMLHttpRequest/send-usp.worker.js.ini b/tests/wpt/metadata/XMLHttpRequest/send-usp.worker.js.ini deleted file mode 100644 index 0a4a9f9efa8..00000000000 --- a/tests/wpt/metadata/XMLHttpRequest/send-usp.worker.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[send-usp.worker] - type: testharness - disabled: https://github.com/servo/servo/issues/12654 diff --git a/tests/wpt/metadata/dom/collections/HTMLCollection-supported-property-indices.html.ini b/tests/wpt/metadata/dom/collections/HTMLCollection-supported-property-indices.html.ini index 14c378bc64b..d614757774d 100644 --- a/tests/wpt/metadata/dom/collections/HTMLCollection-supported-property-indices.html.ini +++ b/tests/wpt/metadata/dom/collections/HTMLCollection-supported-property-indices.html.ini @@ -6,3 +6,12 @@ [Handling of property names that look like integers around 2^32] expected: FAIL + [Trying to set an expando that would shadow an already-existing indexed property] + expected: FAIL + + [Trying to set an expando with an indexed property name past the end of the list] + expected: FAIL + + [Trying to delete an indexed property name should never work] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/collections/HTMLCollection-supported-property-names.html.ini b/tests/wpt/metadata/dom/collections/HTMLCollection-supported-property-names.html.ini new file mode 100644 index 00000000000..fce9ea38e42 --- /dev/null +++ b/tests/wpt/metadata/dom/collections/HTMLCollection-supported-property-names.html.ini @@ -0,0 +1,5 @@ +[HTMLCollection-supported-property-names.html] + type: testharness + [Trying to set an expando that would shadow an already-existing named property] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/events/Event-dispatch-click.html.ini b/tests/wpt/metadata/dom/events/Event-dispatch-click.html.ini new file mode 100644 index 00000000000..5daa842571a --- /dev/null +++ b/tests/wpt/metadata/dom/events/Event-dispatch-click.html.ini @@ -0,0 +1,24 @@ +[Event-dispatch-click.html] + type: testharness + expected: TIMEOUT + [basic with dispatchEvent()] + expected: FAIL + + [look at parents when event bubbles] + expected: FAIL + + [pick the first with activation behavior ] + expected: FAIL + + [pick the first with activation behavior ] + expected: FAIL + + [event state during post-click handling] + expected: TIMEOUT + + [redispatch during post-click handling] + expected: TIMEOUT + + [disconnected form should not submit] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/nodes/DOMImplementation-createDocument.html.ini b/tests/wpt/metadata/dom/nodes/DOMImplementation-createDocument.html.ini new file mode 100644 index 00000000000..2c96250d0b1 --- /dev/null +++ b/tests/wpt/metadata/dom/nodes/DOMImplementation-createDocument.html.ini @@ -0,0 +1,14 @@ +[DOMImplementation-createDocument.html] + type: testharness + [createDocument test: null,"ெfoo",null,"INVALID_CHARACTER_ERR"] + expected: FAIL + + [createDocument test: "http://example.com/","a:0",null,"NAMESPACE_ERR"] + expected: FAIL + + [createDocument test: "http://example.com/","a:ெ",null,"NAMESPACE_ERR"] + expected: FAIL + + [createDocument test: "http://example.com/","ெ:a",null,"INVALID_CHARACTER_ERR"] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/nodes/Document-createElement.html.ini b/tests/wpt/metadata/dom/nodes/Document-createElement.html.ini new file mode 100644 index 00000000000..94eefdcffa9 --- /dev/null +++ b/tests/wpt/metadata/dom/nodes/Document-createElement.html.ini @@ -0,0 +1,251 @@ +[Document-createElement.html] + type: testharness + [createElement(undefined) in XML document] + expected: FAIL + + [createElement(undefined) in XHTML document] + expected: FAIL + + [createElement(null) in XML document] + expected: FAIL + + [createElement(null) in XHTML document] + expected: FAIL + + [createElement("foo") in XML document] + expected: FAIL + + [createElement("foo") in XHTML document] + expected: FAIL + + [createElement("f1oo") in XML document] + expected: FAIL + + [createElement("f1oo") in XHTML document] + expected: FAIL + + [createElement("foo1") in XML document] + expected: FAIL + + [createElement("foo1") in XHTML document] + expected: FAIL + + [createElement("fெ") in XML document] + expected: FAIL + + [createElement("fெ") in XHTML document] + expected: FAIL + + [createElement("fooெ") in XML document] + expected: FAIL + + [createElement("fooெ") in XHTML document] + expected: FAIL + + [createElement(":") in XML document] + expected: FAIL + + [createElement(":foo") in XML document] + expected: FAIL + + [createElement(":foo") in XHTML document] + expected: FAIL + + [createElement("f:oo") in XML document] + expected: FAIL + + [createElement("f:oo") in XHTML document] + expected: FAIL + + [createElement("foo:") in XML document] + expected: FAIL + + [createElement("foo:") in XHTML document] + expected: FAIL + + [createElement("f:o:o") in XML document] + expected: FAIL + + [createElement("f:o:o") in XHTML document] + expected: FAIL + + [createElement("f::oo") in XML document] + expected: FAIL + + [createElement("f::oo") in XHTML document] + expected: FAIL + + [createElement("f::oo:") in XML document] + expected: FAIL + + [createElement("f::oo:") in XHTML document] + expected: FAIL + + [createElement("foo:0") in XML document] + expected: FAIL + + [createElement("foo:0") in XHTML document] + expected: FAIL + + [createElement("foo:_") in XML document] + expected: FAIL + + [createElement("foo:_") in XHTML document] + expected: FAIL + + [createElement("foo:ெ") in XML document] + expected: FAIL + + [createElement("foo:ெ") in XHTML document] + expected: FAIL + + [createElement("foo:fooெ") in XML document] + expected: FAIL + + [createElement("foo:fooெ") in XHTML document] + expected: FAIL + + [createElement("fooெ:foo") in XML document] + expected: FAIL + + [createElement("fooெ:foo") in XHTML document] + expected: FAIL + + [createElement("xml") in XML document] + expected: FAIL + + [createElement("xml") in XHTML document] + expected: FAIL + + [createElement("xmlns") in XML document] + expected: FAIL + + [createElement("xmlns") in XHTML document] + expected: FAIL + + [createElement("xmlfoo") in XML document] + expected: FAIL + + [createElement("xmlfoo") in XHTML document] + expected: FAIL + + [createElement("xml:foo") in XML document] + expected: FAIL + + [createElement("xml:foo") in XHTML document] + expected: FAIL + + [createElement("xmlns:foo") in XML document] + expected: FAIL + + [createElement("xmlns:foo") in XHTML document] + expected: FAIL + + [createElement("xmlfoo:bar") in XML document] + expected: FAIL + + [createElement("xmlfoo:bar") in XHTML document] + expected: FAIL + + [createElement("svg") in XML document] + expected: FAIL + + [createElement("svg") in XHTML document] + expected: FAIL + + [createElement("math") in XML document] + expected: FAIL + + [createElement("math") in XHTML document] + expected: FAIL + + [createElement("FOO") in XML document] + expected: FAIL + + [createElement("FOO") in XHTML document] + expected: FAIL + + [createElement("marK") in XML document] + expected: FAIL + + [createElement("marK") in XHTML document] + expected: FAIL + + [createElement("İnput") in XML document] + expected: FAIL + + [createElement("İnput") in XHTML document] + expected: FAIL + + [createElement("ınput") in XML document] + expected: FAIL + + [createElement("ınput") in XHTML document] + expected: FAIL + + [createElement("") in XML document] + expected: FAIL + + [createElement("1foo") in XML document] + expected: FAIL + + [createElement("1:foo") in XML document] + expected: FAIL + + [createElement("fo o") in XML document] + expected: FAIL + + [createElement("ெfoo") in HTML document] + expected: FAIL + + [createElement("ெfoo") in XML document] + expected: FAIL + + [createElement("ெfoo") in XHTML document] + expected: FAIL + + [createElement("}foo") in XML document] + expected: FAIL + + [createElement("f}oo") in XML document] + expected: FAIL + + [createElement("foo}") in XML document] + expected: FAIL + + [createElement("\\ufffffoo") in XML document] + expected: FAIL + + [createElement("f\\uffffoo") in XML document] + expected: FAIL + + [createElement("foo\\uffff") in XML document] + expected: FAIL + + [createElement("") in XML document] + expected: FAIL + + [createElement("") in XML document] + expected: FAIL + + [createElement("f","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: null,"","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: null,"f","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://example.com/","fo","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://example.com/","namespaceURI:,","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://example.com/","namespaceURI:a ","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://example.com/","namespaceURI:\\"","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "/","foo",null] + expected: FAIL + + [createElementNS test in XML document: "/","1foo","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "/","f1oo",null] + expected: FAIL + + [createElementNS test in XML document: "/","foo1",null] + expected: FAIL + + [createElementNS test in XML document: "/",":foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "/","f:oo",null] + expected: FAIL + + [createElementNS test in XML document: "/","foo:","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "/","xml",null] + expected: FAIL + + [createElementNS test in XML document: "/","xmlns","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "/","xmlfoo",null] + expected: FAIL + + [createElementNS test in XML document: "/","xml:foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "/","xmlns:foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "/","xmlfoo:bar",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","foo",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","1foo","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","f1oo",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","foo1",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace",":foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","f:oo",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","foo:","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xml",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xmlns","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xmlfoo",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xml:foo",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xmlns:foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xmlfoo:bar",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespaces","xml:foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/xml/1998/namespace","xml:foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","1foo","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","f1oo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","foo1","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/",":foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","f:oo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","foo:","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xml","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xmlns",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xmlfoo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xml:foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xmlns:foo",null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xmlfoo:bar","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","foo:xmlns","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "foo:","foo",null] + expected: FAIL + + [createElementNS test in XML document: "foo:","1foo","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "foo:","f1oo",null] + expected: FAIL + + [createElementNS test in XML document: "foo:","foo1",null] + expected: FAIL + + [createElementNS test in XML document: "foo:",":foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "foo:","f:oo",null] + expected: FAIL + + [createElementNS test in XML document: "foo:","foo:","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "foo:","xml",null] + expected: FAIL + + [createElementNS test in XML document: "foo:","xmlns","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "foo:","xmlfoo",null] + expected: FAIL + + [createElementNS test in XML document: "foo:","xml:foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "foo:","xmlns:foo","NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "foo:","xmlfoo:bar",null] + expected: FAIL + + [createElementNS test in XML document: "","","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: null,"","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: undefined,"","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://example.com/",null,null] + expected: FAIL + + [createElementNS test in XML document: "http://example.com/","","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "/",null,null] + expected: FAIL + + [createElementNS test in XML document: "/","","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace",null,null] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/",null,"NAMESPACE_ERR"] + expected: FAIL + + [createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","","INVALID_CHARACTER_ERR"] + expected: FAIL + + [createElementNS test in XML document: "foo:",null,null] + expected: FAIL + + [createElementNS test in XML document: "foo:","","INVALID_CHARACTER_ERR"] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/nodes/Element-matches.html.ini b/tests/wpt/metadata/dom/nodes/Element-matches.html.ini index eb4e7150cb8..a142fe86bf4 100644 --- a/tests/wpt/metadata/dom/nodes/Element-matches.html.ini +++ b/tests/wpt/metadata/dom/nodes/Element-matches.html.ini @@ -51,3 +51,69 @@ [In-document Element.matches: ID selector, matching id values using non-ASCII characters (with no refNodes): #台北Táiběi, #台北] expected: FAIL + [In-document Element.matches: Descendant combinator '>>', matching element that is a descendant of an element with id (with no refNodes): #descendant>>div] + expected: FAIL + + [In-document Element.matches: Descendant combinator '>>', matching element with id that is a descendant of an element (with no refNodes): body>>#descendant-div1] + expected: FAIL + + [In-document Element.matches: Descendant combinator '>>', matching element with id that is a descendant of an element (with no refNodes): div>>#descendant-div1] + expected: FAIL + + [In-document Element.matches: Descendant combinator '>>', matching element with id that is a descendant of an element with id (with no refNodes): #descendant>>#descendant-div2] + expected: FAIL + + [In-document Element.matches: Descendant combinator '>>', matching element with class that is a descendant of an element with id (with no refNodes): #descendant>>.descendant-div2] + expected: FAIL + + [In-document Element.matches: Descendant combinator '>>', matching element with class that is a descendant of an element with class (with no refNodes): .descendant-div1>>.descendant-div3] + expected: FAIL + + [Detached Element.matches: Descendant combinator '>>', matching element that is a descendant of an element with id (with no refNodes): #descendant>>div] + expected: FAIL + + [Detached Element.matches: Descendant combinator '>>', matching element with id that is a descendant of an element (with no refNodes): div>>#descendant-div1] + expected: FAIL + + [Detached Element.matches: Descendant combinator '>>', matching element with id that is a descendant of an element with id (with no refNodes): #descendant>>#descendant-div2] + expected: FAIL + + [Detached Element.matches: Descendant combinator '>>', matching element with class that is a descendant of an element with id (with no refNodes): #descendant>>.descendant-div2] + expected: FAIL + + [Detached Element.matches: Descendant combinator '>>', matching element with class that is a descendant of an element with class (with no refNodes): .descendant-div1>>.descendant-div3] + expected: FAIL + + [Fragment Element.matches: Descendant combinator '>>', matching element that is a descendant of an element with id (with no refNodes): #descendant>>div] + expected: FAIL + + [Fragment Element.matches: Descendant combinator '>>', matching element with id that is a descendant of an element (with no refNodes): div>>#descendant-div1] + expected: FAIL + + [Fragment Element.matches: Descendant combinator '>>', matching element with id that is a descendant of an element with id (with no refNodes): #descendant>>#descendant-div2] + expected: FAIL + + [Fragment Element.matches: Descendant combinator '>>', matching element with class that is a descendant of an element with id (with no refNodes): #descendant>>.descendant-div2] + expected: FAIL + + [Fragment Element.matches: Descendant combinator '>>', matching element with class that is a descendant of an element with class (with no refNodes): .descendant-div1>>.descendant-div3] + expected: FAIL + + [In-document Element.matches: Descendant combinator '>>', matching element that is a descendant of an element with id (1) (with no refNodes): #descendant>>div] + expected: FAIL + + [In-document Element.matches: Descendant combinator '>>', matching element with id that is a descendant of an element (1) (with no refNodes): body>>#descendant-div1] + expected: FAIL + + [In-document Element.matches: Descendant combinator '>>', matching element with id that is a descendant of an element (1) (with no refNodes): div>>#descendant-div1] + expected: FAIL + + [In-document Element.matches: Descendant combinator '>>', matching element with id that is a descendant of an element with id (1) (with no refNodes): #descendant>>#descendant-div2] + expected: FAIL + + [In-document Element.matches: Descendant combinator '>>', matching element with class that is a descendant of an element with id (1) (with no refNodes): #descendant>>.descendant-div2] + expected: FAIL + + [In-document Element.matches: Descendant combinator, '>>', matching element with class that is a descendant of an element with class (1) (with no refNodes): .descendant-div1>>.descendant-div3] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/nodes/ParentNode-querySelector-All-xht.xht.ini b/tests/wpt/metadata/dom/nodes/ParentNode-querySelector-All-xht.xht.ini index bf9ca1b19c3..e7b0b183659 100644 --- a/tests/wpt/metadata/dom/nodes/ParentNode-querySelector-All-xht.xht.ini +++ b/tests/wpt/metadata/dom/nodes/ParentNode-querySelector-All-xht.xht.ini @@ -216,3 +216,159 @@ [In-document Element.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter] expected: FAIL + [Document.querySelectorAll: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: body>>#descendant-div1] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: body>>#descendant-div1] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: body>>#descendant-div1] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: body>>#descendant-div1] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/nodes/ParentNode-querySelector-All.html.ini b/tests/wpt/metadata/dom/nodes/ParentNode-querySelector-All.html.ini index fee1e0a7f3c..4da980298cb 100644 --- a/tests/wpt/metadata/dom/nodes/ParentNode-querySelector-All.html.ini +++ b/tests/wpt/metadata/dom/nodes/ParentNode-querySelector-All.html.ini @@ -216,3 +216,159 @@ [In-document Element.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter] expected: FAIL + [Document.querySelectorAll: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: body>>#descendant-div1] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: body>>#descendant-div1] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Document.querySelectorAll: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [Document.querySelector: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Detached Element.querySelectorAll: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [Detached Element.querySelector: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [Fragment.querySelectorAll: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [Fragment.querySelector: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element that is a descendant of an element with id: #descendant>>div] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: body>>#descendant-div1] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: body>>#descendant-div1] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element: div>>#descendant-div1] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element with id that is a descendant of an element with id: #descendant>>#descendant-div2] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with id: #descendant>>.descendant-div2] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', matching element with class that is a descendant of an element with class: .descendant-div1>>.descendant-div3] + expected: FAIL + + [In-document Element.querySelectorAll: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + + [In-document Element.querySelector: Descendant combinator '>>', not matching element with id that is not a descendant of an element with id: #descendant-div1>>#descendant-div4] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/ranges/Range-mutations-appendChild.html.ini b/tests/wpt/metadata/dom/ranges/Range-mutations-appendChild.html.ini new file mode 100644 index 00000000000..4cc4866cf8a --- /dev/null +++ b/tests/wpt/metadata/dom/ranges/Range-mutations-appendChild.html.ini @@ -0,0 +1,107 @@ +[Range-mutations-appendChild.html] + type: testharness + [testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv.lastChild, 0)] + expected: FAIL + + [testDiv.appendChild(testDiv.lastChild), with selected range on testDiv.lastChild from 0 to 1] + expected: FAIL + + [testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv.lastChild, 1)] + expected: FAIL + + [testDiv.appendChild(testDiv.lastChild), with selected range on testDiv from testDiv.childNodes.length - 2 to testDiv.childNodes.length] + expected: FAIL + + [testDiv.appendChild(testDiv.lastChild), with selected range on testDiv from testDiv.childNodes.length - 2 to testDiv.childNodes.length - 1] + expected: FAIL + + [testDiv.appendChild(testDiv.lastChild), with selected range on testDiv from testDiv.childNodes.length - 1 to testDiv.childNodes.length] + expected: FAIL + + [testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv, testDiv.childNodes.length - 1)] + expected: FAIL + + [testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv, testDiv.childNodes.length)] + expected: FAIL + + [detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv.lastChild, 0)] + expected: FAIL + + [detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv.lastChild from 0 to 1] + expected: FAIL + + [detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv.lastChild, 1)] + expected: FAIL + + [detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv from detachedDiv.childNodes.length - 2 to detachedDiv.childNodes.length] + expected: FAIL + + [detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv from detachedDiv.childNodes.length - 2 to detachedDiv.childNodes.length - 1] + expected: FAIL + + [detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv from detachedDiv.childNodes.length - 1 to detachedDiv.childNodes.length] + expected: FAIL + + [detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv, detachedDiv.childNodes.length - 1)] + expected: FAIL + + [detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv, detachedDiv.childNodes.length)] + expected: FAIL + + [paras[0\].appendChild(paras[1\]), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].appendChild(paras[1\]), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].appendChild(paras[1\]), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].appendChild(paras[1\]), with selected range on testDiv from 0 to 1] + expected: FAIL + + [paras[0\].appendChild(paras[1\]), with selected range on testDiv from 0 to 2] + expected: FAIL + + [paras[0\].appendChild(paras[1\]), with selected range collapsed at (testDiv, 1)] + expected: FAIL + + [paras[0\].appendChild(paras[1\]), with selected range on testDiv from 1 to 2] + expected: FAIL + + [foreignDoc.appendChild(detachedComment), with selected range on foreignDoc from foreignDoc.childNodes.length - 1 to foreignDoc.childNodes.length] + expected: FAIL + + [foreignDoc.appendChild(detachedComment), with selected range collapsed at (foreignDoc, foreignDoc.childNodes.length - 1)] + expected: FAIL + + [foreignDoc.appendChild(detachedComment), with selected range collapsed at (foreignDoc, foreignDoc.childNodes.length)] + expected: FAIL + + [foreignDoc.appendChild(detachedComment), with selected range on detachedComment from 0 to 5] + expected: FAIL + + [paras[0\].appendChild(xmlTextNode), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].appendChild(xmlTextNode), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].appendChild(xmlTextNode), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].appendChild(paras[0\]), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].appendChild(testDiv), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].appendChild(document), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].appendChild(foreignDoc), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].appendChild(document.doctype), with selected range on paras[0\] from 0 to 1] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/ranges/Range-mutations-appendData.html.ini b/tests/wpt/metadata/dom/ranges/Range-mutations-appendData.html.ini new file mode 100644 index 00000000000..915229970ab --- /dev/null +++ b/tests/wpt/metadata/dom/ranges/Range-mutations-appendData.html.ini @@ -0,0 +1,578 @@ +[Range-mutations-appendData.html] + type: testharness + [paras[0\].firstChild.appendData("foo"), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range on paras[0\].firstChild from 0 to paras[0\].firstChild.length] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range on paras[0\].firstChild from 1 to paras[0\].firstChild.length] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range on paras[0\].firstChild from 0 to paras[0\].firstChild.length] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range on paras[0\].firstChild from 1 to paras[0\].firstChild.length] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.appendData("foo"), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.appendData("foo"), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.appendData("foo"), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.appendData("foo"), with selected range on paras[1\].firstChild from 0 to paras[1\].firstChild.length] + expected: FAIL + + [paras[1\].firstChild.appendData("foo"), with selected range on paras[1\].firstChild from 1 to paras[1\].firstChild.length] + expected: FAIL + + [paras[1\].firstChild.appendData("foo"), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.appendData("foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.appendData(""), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.appendData(""), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.appendData(""), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.appendData(""), with selected range on paras[1\].firstChild from 0 to paras[1\].firstChild.length] + expected: FAIL + + [paras[1\].firstChild.appendData(""), with selected range on paras[1\].firstChild from 1 to paras[1\].firstChild.length] + expected: FAIL + + [paras[1\].firstChild.appendData(""), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.appendData(""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.appendData("foo"), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.appendData("foo"), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 0 to foreignTextNode.length] + expected: FAIL + + [foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 1 to foreignTextNode.length] + expected: FAIL + + [foreignTextNode.appendData("foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.appendData(""), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.appendData(""), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.appendData(""), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.appendData(""), with selected range on foreignTextNode from 0 to foreignTextNode.length] + expected: FAIL + + [foreignTextNode.appendData(""), with selected range on foreignTextNode from 1 to foreignTextNode.length] + expected: FAIL + + [foreignTextNode.appendData(""), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.appendData(""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.appendData("foo"), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.appendData("foo"), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 0 to xmlTextNode.length] + expected: FAIL + + [xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 1 to xmlTextNode.length] + expected: FAIL + + [xmlTextNode.appendData("foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.appendData(""), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.appendData(""), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.appendData(""), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.appendData(""), with selected range on xmlTextNode from 0 to xmlTextNode.length] + expected: FAIL + + [xmlTextNode.appendData(""), with selected range on xmlTextNode from 1 to xmlTextNode.length] + expected: FAIL + + [xmlTextNode.appendData(""), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.appendData(""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.appendData("foo"), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.appendData("foo"), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 0 to detachedTextNode.length] + expected: FAIL + + [detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 1 to detachedTextNode.length] + expected: FAIL + + [detachedTextNode.appendData("foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.appendData(""), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.appendData(""), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.appendData(""), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.appendData(""), with selected range on detachedTextNode from 0 to detachedTextNode.length] + expected: FAIL + + [detachedTextNode.appendData(""), with selected range on detachedTextNode from 1 to detachedTextNode.length] + expected: FAIL + + [detachedTextNode.appendData(""), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.appendData(""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.appendData("foo"), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.appendData("foo"), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length] + expected: FAIL + + [detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length] + expected: FAIL + + [detachedForeignTextNode.appendData("foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.appendData(""), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.appendData(""), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length] + expected: FAIL + + [detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length] + expected: FAIL + + [detachedForeignTextNode.appendData(""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.appendData("foo"), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.appendData("foo"), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length] + expected: FAIL + + [detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length] + expected: FAIL + + [detachedXmlTextNode.appendData("foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.appendData(""), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.appendData(""), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length] + expected: FAIL + + [detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length] + expected: FAIL + + [detachedXmlTextNode.appendData(""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [comment.appendData("foo"), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.appendData("foo"), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.appendData("foo"), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.appendData("foo"), with selected range on comment from 0 to comment.length] + expected: FAIL + + [comment.appendData("foo"), with selected range on comment from 1 to comment.length] + expected: FAIL + + [comment.appendData("foo"), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.appendData("foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.appendData(""), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.appendData(""), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.appendData(""), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.appendData(""), with selected range on comment from 0 to comment.length] + expected: FAIL + + [comment.appendData(""), with selected range on comment from 1 to comment.length] + expected: FAIL + + [comment.appendData(""), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.appendData(""), with selected range on comment from 1 to 3] + expected: FAIL + + [foreignComment.appendData("foo"), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.appendData("foo"), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.appendData("foo"), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.appendData("foo"), with selected range on foreignComment from 0 to foreignComment.length] + expected: FAIL + + [foreignComment.appendData("foo"), with selected range on foreignComment from 1 to foreignComment.length] + expected: FAIL + + [foreignComment.appendData("foo"), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.appendData("foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.appendData(""), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.appendData(""), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.appendData(""), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.appendData(""), with selected range on foreignComment from 0 to foreignComment.length] + expected: FAIL + + [foreignComment.appendData(""), with selected range on foreignComment from 1 to foreignComment.length] + expected: FAIL + + [foreignComment.appendData(""), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.appendData(""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [xmlComment.appendData("foo"), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.appendData("foo"), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.appendData("foo"), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.appendData("foo"), with selected range on xmlComment from 0 to xmlComment.length] + expected: FAIL + + [xmlComment.appendData("foo"), with selected range on xmlComment from 1 to xmlComment.length] + expected: FAIL + + [xmlComment.appendData("foo"), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.appendData("foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.appendData(""), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.appendData(""), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.appendData(""), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.appendData(""), with selected range on xmlComment from 0 to xmlComment.length] + expected: FAIL + + [xmlComment.appendData(""), with selected range on xmlComment from 1 to xmlComment.length] + expected: FAIL + + [xmlComment.appendData(""), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.appendData(""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [detachedComment.appendData("foo"), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.appendData("foo"), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.appendData("foo"), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.appendData("foo"), with selected range on detachedComment from 0 to detachedComment.length] + expected: FAIL + + [detachedComment.appendData("foo"), with selected range on detachedComment from 1 to detachedComment.length] + expected: FAIL + + [detachedComment.appendData("foo"), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.appendData("foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.appendData(""), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.appendData(""), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.appendData(""), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.appendData(""), with selected range on detachedComment from 0 to detachedComment.length] + expected: FAIL + + [detachedComment.appendData(""), with selected range on detachedComment from 1 to detachedComment.length] + expected: FAIL + + [detachedComment.appendData(""), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.appendData(""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.appendData("foo"), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.appendData("foo"), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 0 to detachedForeignComment.length] + expected: FAIL + + [detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 1 to detachedForeignComment.length] + expected: FAIL + + [detachedForeignComment.appendData("foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.appendData(""), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.appendData(""), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 0 to detachedForeignComment.length] + expected: FAIL + + [detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 1 to detachedForeignComment.length] + expected: FAIL + + [detachedForeignComment.appendData(""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.appendData("foo"), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.appendData("foo"), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 0 to detachedXmlComment.length] + expected: FAIL + + [detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 1 to detachedXmlComment.length] + expected: FAIL + + [detachedXmlComment.appendData("foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.appendData(""), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.appendData(""), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 0 to detachedXmlComment.length] + expected: FAIL + + [detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 1 to detachedXmlComment.length] + expected: FAIL + + [detachedXmlComment.appendData(""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.appendData(""), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.appendData("foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/ranges/Range-mutations.html.ini b/tests/wpt/metadata/dom/ranges/Range-mutations-dataChange.html.ini similarity index 51% rename from tests/wpt/metadata/dom/ranges/Range-mutations.html.ini rename to tests/wpt/metadata/dom/ranges/Range-mutations-dataChange.html.ini index 7c599ca1e6f..35598a04368 100644 --- a/tests/wpt/metadata/dom/ranges/Range-mutations.html.ini +++ b/tests/wpt/metadata/dom/ranges/Range-mutations-dataChange.html.ini @@ -1,3893 +1,5 @@ -[Range-mutations.html] +[Range-mutations-dataChange.html] type: testharness - [paras[0\].firstChild.splitText(376), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.splitText(0), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.splitText(1), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.splitText(paras[0\].firstChild.length), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.splitText(1), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.splitText(2), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.splitText(3), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.splitText(376), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.splitText(0), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.splitText(1), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.splitText(paras[1\].firstChild.length), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.splitText(1), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.splitText(2), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.splitText(3), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [foreignTextNode.splitText(376), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.splitText(0), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.splitText(1), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.splitText(foreignTextNode.length), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.splitText(1), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.splitText(2), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.splitText(3), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.splitText(376), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.splitText(0), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.splitText(1), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.splitText(xmlTextNode.length), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.splitText(1), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.splitText(2), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.splitText(3), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.splitText(376), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.splitText(0), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.splitText(1), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.splitText(detachedTextNode.length), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.splitText(1), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.splitText(2), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.splitText(3), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.splitText(376), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.splitText(0), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.splitText(1), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.splitText(detachedForeignTextNode.length), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.splitText(1), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.splitText(2), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.splitText(3), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.splitText(376), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.splitText(0), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.splitText(1), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.splitText(detachedXmlTextNode.length), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.splitText(1), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.splitText(2), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.splitText(3), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.splitText(1), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].firstChild.splitText(1), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.splitText(1), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.splitText(1), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.splitText(2), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.splitText(3), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.splitText(1), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.splitText(2), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.splitText(3), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.insertData(376, "foo"), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.insertData(0, "foo"), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.insertData(paras[0\].firstChild.length, "foo"), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.insertData(1, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.insertData(2, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.insertData(3, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.insertData(376, ""), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.insertData(0, ""), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.insertData(1, ""), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.insertData(paras[0\].firstChild.length, ""), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.insertData(1, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.insertData(2, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.insertData(3, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.insertData(376, "foo"), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.insertData(0, "foo"), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.insertData(paras[1\].firstChild.length, "foo"), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.insertData(1, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.insertData(2, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.insertData(3, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.insertData(376, ""), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.insertData(0, ""), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.insertData(1, ""), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.insertData(paras[1\].firstChild.length, ""), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.insertData(1, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.insertData(2, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.insertData(3, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [foreignTextNode.insertData(376, "foo"), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.insertData(0, "foo"), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.insertData(1, "foo"), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.insertData(foreignTextNode.length, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.insertData(1, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.insertData(2, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.insertData(3, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.insertData(376, ""), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.insertData(0, ""), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.insertData(1, ""), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.insertData(foreignTextNode.length, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.insertData(1, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.insertData(2, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.insertData(3, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.insertData(376, "foo"), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.insertData(0, "foo"), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.insertData(1, "foo"), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.insertData(xmlTextNode.length, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.insertData(1, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.insertData(2, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.insertData(3, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.insertData(376, ""), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.insertData(0, ""), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.insertData(1, ""), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.insertData(xmlTextNode.length, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.insertData(1, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.insertData(2, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.insertData(3, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.insertData(376, "foo"), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.insertData(0, "foo"), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.insertData(1, "foo"), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.insertData(detachedTextNode.length, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.insertData(1, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.insertData(2, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.insertData(3, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.insertData(376, ""), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.insertData(0, ""), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.insertData(1, ""), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.insertData(detachedTextNode.length, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.insertData(1, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.insertData(2, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.insertData(3, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.insertData(376, "foo"), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.insertData(0, "foo"), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.insertData(1, "foo"), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.insertData(detachedForeignTextNode.length, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.insertData(1, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.insertData(2, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.insertData(3, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.insertData(376, ""), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.insertData(0, ""), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.insertData(1, ""), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.insertData(detachedForeignTextNode.length, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.insertData(1, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.insertData(2, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.insertData(3, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.insertData(376, "foo"), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.insertData(0, "foo"), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.insertData(1, "foo"), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.insertData(detachedXmlTextNode.length, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.insertData(1, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.insertData(2, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.insertData(3, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.insertData(376, ""), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.insertData(0, ""), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.insertData(1, ""), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.insertData(detachedXmlTextNode.length, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.insertData(1, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.insertData(2, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.insertData(3, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [comment.insertData(376, "foo"), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.insertData(0, "foo"), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.insertData(1, "foo"), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.insertData(comment.length, "foo"), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.insertData(1, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.insertData(2, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.insertData(3, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.insertData(376, ""), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.insertData(0, ""), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.insertData(1, ""), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.insertData(comment.length, ""), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.insertData(1, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.insertData(2, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.insertData(3, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [foreignComment.insertData(376, "foo"), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.insertData(0, "foo"), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.insertData(1, "foo"), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.insertData(foreignComment.length, "foo"), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.insertData(1, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.insertData(2, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.insertData(3, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.insertData(376, ""), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.insertData(0, ""), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.insertData(1, ""), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.insertData(foreignComment.length, ""), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.insertData(1, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.insertData(2, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.insertData(3, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [xmlComment.insertData(376, "foo"), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.insertData(0, "foo"), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.insertData(1, "foo"), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.insertData(xmlComment.length, "foo"), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.insertData(1, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.insertData(2, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.insertData(3, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.insertData(376, ""), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.insertData(0, ""), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.insertData(1, ""), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.insertData(xmlComment.length, ""), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.insertData(1, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.insertData(2, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.insertData(3, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [detachedComment.insertData(376, "foo"), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.insertData(0, "foo"), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.insertData(1, "foo"), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.insertData(detachedComment.length, "foo"), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.insertData(1, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.insertData(2, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.insertData(3, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.insertData(376, ""), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.insertData(0, ""), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.insertData(1, ""), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.insertData(detachedComment.length, ""), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.insertData(1, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.insertData(2, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.insertData(3, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.insertData(376, "foo"), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.insertData(0, "foo"), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.insertData(1, "foo"), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.insertData(detachedForeignComment.length, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.insertData(1, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.insertData(2, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.insertData(3, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.insertData(376, ""), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.insertData(0, ""), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.insertData(1, ""), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.insertData(detachedForeignComment.length, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.insertData(1, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.insertData(2, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.insertData(3, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.insertData(376, "foo"), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.insertData(0, "foo"), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.insertData(1, "foo"), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.insertData(detachedXmlComment.length, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.insertData(1, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.insertData(2, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.insertData(3, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.insertData(376, ""), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.insertData(0, ""), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.insertData(1, ""), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.insertData(detachedXmlComment.length, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.insertData(1, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.insertData(2, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.insertData(3, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].firstChild.insertData(1, "foo"), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.insertData(1, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.insertData(2, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.insertData(3, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.insertData(1, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.insertData(2, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.insertData(3, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range on paras[0\].firstChild from 0 to paras[0\].firstChild.length] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range on paras[0\].firstChild from 1 to paras[0\].firstChild.length] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range on paras[0\].firstChild from 0 to paras[0\].firstChild.length] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range on paras[0\].firstChild from 1 to paras[0\].firstChild.length] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.appendData("foo"), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.appendData("foo"), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.appendData("foo"), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.appendData("foo"), with selected range on paras[1\].firstChild from 0 to paras[1\].firstChild.length] - expected: FAIL - - [paras[1\].firstChild.appendData("foo"), with selected range on paras[1\].firstChild from 1 to paras[1\].firstChild.length] - expected: FAIL - - [paras[1\].firstChild.appendData("foo"), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.appendData("foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.appendData(""), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.appendData(""), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.appendData(""), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.appendData(""), with selected range on paras[1\].firstChild from 0 to paras[1\].firstChild.length] - expected: FAIL - - [paras[1\].firstChild.appendData(""), with selected range on paras[1\].firstChild from 1 to paras[1\].firstChild.length] - expected: FAIL - - [paras[1\].firstChild.appendData(""), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.appendData(""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.appendData("foo"), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.appendData("foo"), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 0 to foreignTextNode.length] - expected: FAIL - - [foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 1 to foreignTextNode.length] - expected: FAIL - - [foreignTextNode.appendData("foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.appendData(""), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.appendData(""), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.appendData(""), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.appendData(""), with selected range on foreignTextNode from 0 to foreignTextNode.length] - expected: FAIL - - [foreignTextNode.appendData(""), with selected range on foreignTextNode from 1 to foreignTextNode.length] - expected: FAIL - - [foreignTextNode.appendData(""), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.appendData(""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.appendData("foo"), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.appendData("foo"), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 0 to xmlTextNode.length] - expected: FAIL - - [xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 1 to xmlTextNode.length] - expected: FAIL - - [xmlTextNode.appendData("foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.appendData(""), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.appendData(""), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.appendData(""), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.appendData(""), with selected range on xmlTextNode from 0 to xmlTextNode.length] - expected: FAIL - - [xmlTextNode.appendData(""), with selected range on xmlTextNode from 1 to xmlTextNode.length] - expected: FAIL - - [xmlTextNode.appendData(""), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.appendData(""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.appendData("foo"), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.appendData("foo"), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 0 to detachedTextNode.length] - expected: FAIL - - [detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 1 to detachedTextNode.length] - expected: FAIL - - [detachedTextNode.appendData("foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.appendData(""), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.appendData(""), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.appendData(""), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.appendData(""), with selected range on detachedTextNode from 0 to detachedTextNode.length] - expected: FAIL - - [detachedTextNode.appendData(""), with selected range on detachedTextNode from 1 to detachedTextNode.length] - expected: FAIL - - [detachedTextNode.appendData(""), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.appendData(""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.appendData("foo"), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.appendData("foo"), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length] - expected: FAIL - - [detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length] - expected: FAIL - - [detachedForeignTextNode.appendData("foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.appendData(""), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.appendData(""), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length] - expected: FAIL - - [detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length] - expected: FAIL - - [detachedForeignTextNode.appendData(""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.appendData("foo"), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.appendData("foo"), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length] - expected: FAIL - - [detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length] - expected: FAIL - - [detachedXmlTextNode.appendData("foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.appendData(""), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.appendData(""), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length] - expected: FAIL - - [detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length] - expected: FAIL - - [detachedXmlTextNode.appendData(""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [comment.appendData("foo"), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.appendData("foo"), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.appendData("foo"), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.appendData("foo"), with selected range on comment from 0 to comment.length] - expected: FAIL - - [comment.appendData("foo"), with selected range on comment from 1 to comment.length] - expected: FAIL - - [comment.appendData("foo"), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.appendData("foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.appendData(""), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.appendData(""), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.appendData(""), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.appendData(""), with selected range on comment from 0 to comment.length] - expected: FAIL - - [comment.appendData(""), with selected range on comment from 1 to comment.length] - expected: FAIL - - [comment.appendData(""), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.appendData(""), with selected range on comment from 1 to 3] - expected: FAIL - - [foreignComment.appendData("foo"), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.appendData("foo"), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.appendData("foo"), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.appendData("foo"), with selected range on foreignComment from 0 to foreignComment.length] - expected: FAIL - - [foreignComment.appendData("foo"), with selected range on foreignComment from 1 to foreignComment.length] - expected: FAIL - - [foreignComment.appendData("foo"), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.appendData("foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.appendData(""), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.appendData(""), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.appendData(""), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.appendData(""), with selected range on foreignComment from 0 to foreignComment.length] - expected: FAIL - - [foreignComment.appendData(""), with selected range on foreignComment from 1 to foreignComment.length] - expected: FAIL - - [foreignComment.appendData(""), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.appendData(""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [xmlComment.appendData("foo"), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.appendData("foo"), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.appendData("foo"), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.appendData("foo"), with selected range on xmlComment from 0 to xmlComment.length] - expected: FAIL - - [xmlComment.appendData("foo"), with selected range on xmlComment from 1 to xmlComment.length] - expected: FAIL - - [xmlComment.appendData("foo"), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.appendData("foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.appendData(""), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.appendData(""), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.appendData(""), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.appendData(""), with selected range on xmlComment from 0 to xmlComment.length] - expected: FAIL - - [xmlComment.appendData(""), with selected range on xmlComment from 1 to xmlComment.length] - expected: FAIL - - [xmlComment.appendData(""), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.appendData(""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [detachedComment.appendData("foo"), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.appendData("foo"), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.appendData("foo"), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.appendData("foo"), with selected range on detachedComment from 0 to detachedComment.length] - expected: FAIL - - [detachedComment.appendData("foo"), with selected range on detachedComment from 1 to detachedComment.length] - expected: FAIL - - [detachedComment.appendData("foo"), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.appendData("foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.appendData(""), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.appendData(""), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.appendData(""), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.appendData(""), with selected range on detachedComment from 0 to detachedComment.length] - expected: FAIL - - [detachedComment.appendData(""), with selected range on detachedComment from 1 to detachedComment.length] - expected: FAIL - - [detachedComment.appendData(""), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.appendData(""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.appendData("foo"), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.appendData("foo"), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 0 to detachedForeignComment.length] - expected: FAIL - - [detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 1 to detachedForeignComment.length] - expected: FAIL - - [detachedForeignComment.appendData("foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.appendData(""), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.appendData(""), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 0 to detachedForeignComment.length] - expected: FAIL - - [detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 1 to detachedForeignComment.length] - expected: FAIL - - [detachedForeignComment.appendData(""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.appendData("foo"), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.appendData("foo"), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 0 to detachedXmlComment.length] - expected: FAIL - - [detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 1 to detachedXmlComment.length] - expected: FAIL - - [detachedXmlComment.appendData("foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.appendData(""), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.appendData(""), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 0 to detachedXmlComment.length] - expected: FAIL - - [detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 1 to detachedXmlComment.length] - expected: FAIL - - [detachedXmlComment.appendData(""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.appendData(""), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.appendData("foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.deleteData(376, 2), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.deleteData(0, 2), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 2), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.deleteData(paras[0\].firstChild.length, 2), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 2), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.deleteData(2, 2), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.deleteData(3, 2), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.deleteData(376, 0), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.deleteData(0, 0), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 0), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.deleteData(paras[0\].firstChild.length, 0), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 0), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.deleteData(2, 0), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.deleteData(3, 0), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.deleteData(376, 631), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.deleteData(0, 631), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 631), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.deleteData(paras[0\].firstChild.length, 631), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 631), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.deleteData(2, 631), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.deleteData(3, 631), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.deleteData(376, 2), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.deleteData(0, 2), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.deleteData(1, 2), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.deleteData(paras[1\].firstChild.length, 2), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.deleteData(1, 2), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.deleteData(2, 2), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.deleteData(3, 2), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.deleteData(376, 0), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.deleteData(0, 0), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.deleteData(1, 0), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.deleteData(paras[1\].firstChild.length, 0), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.deleteData(1, 0), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.deleteData(2, 0), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.deleteData(3, 0), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.deleteData(376, 631), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.deleteData(0, 631), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.deleteData(1, 631), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.deleteData(paras[1\].firstChild.length, 631), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.deleteData(1, 631), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.deleteData(2, 631), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.deleteData(3, 631), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [foreignTextNode.deleteData(376, 2), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.deleteData(0, 2), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.deleteData(1, 2), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.deleteData(foreignTextNode.length, 2), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.deleteData(1, 2), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.deleteData(2, 2), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.deleteData(3, 2), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.deleteData(376, 0), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.deleteData(0, 0), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.deleteData(1, 0), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.deleteData(foreignTextNode.length, 0), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.deleteData(1, 0), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.deleteData(2, 0), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.deleteData(3, 0), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.deleteData(376, 631), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.deleteData(0, 631), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.deleteData(1, 631), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.deleteData(foreignTextNode.length, 631), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.deleteData(1, 631), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.deleteData(2, 631), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.deleteData(3, 631), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.deleteData(376, 2), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.deleteData(0, 2), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.deleteData(1, 2), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.deleteData(xmlTextNode.length, 2), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.deleteData(1, 2), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.deleteData(2, 2), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.deleteData(3, 2), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.deleteData(376, 0), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.deleteData(0, 0), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.deleteData(1, 0), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.deleteData(xmlTextNode.length, 0), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.deleteData(1, 0), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.deleteData(2, 0), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.deleteData(3, 0), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.deleteData(376, 631), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.deleteData(0, 631), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.deleteData(1, 631), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.deleteData(xmlTextNode.length, 631), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.deleteData(1, 631), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.deleteData(2, 631), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.deleteData(3, 631), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.deleteData(376, 2), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.deleteData(0, 2), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.deleteData(1, 2), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.deleteData(detachedTextNode.length, 2), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.deleteData(1, 2), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.deleteData(2, 2), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.deleteData(3, 2), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.deleteData(376, 0), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.deleteData(0, 0), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.deleteData(1, 0), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.deleteData(detachedTextNode.length, 0), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.deleteData(1, 0), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.deleteData(2, 0), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.deleteData(3, 0), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.deleteData(376, 631), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.deleteData(0, 631), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.deleteData(1, 631), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.deleteData(detachedTextNode.length, 631), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.deleteData(1, 631), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.deleteData(2, 631), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.deleteData(3, 631), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.deleteData(376, 2), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.deleteData(0, 2), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.deleteData(1, 2), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 2), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.deleteData(1, 2), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.deleteData(2, 2), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.deleteData(3, 2), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.deleteData(376, 0), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.deleteData(0, 0), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.deleteData(1, 0), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 0), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.deleteData(1, 0), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.deleteData(2, 0), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.deleteData(3, 0), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.deleteData(376, 631), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.deleteData(0, 631), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.deleteData(1, 631), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 631), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.deleteData(1, 631), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.deleteData(2, 631), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.deleteData(3, 631), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.deleteData(376, 2), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.deleteData(0, 2), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.deleteData(1, 2), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 2), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.deleteData(1, 2), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.deleteData(2, 2), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.deleteData(3, 2), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.deleteData(376, 0), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.deleteData(0, 0), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.deleteData(1, 0), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 0), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.deleteData(1, 0), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.deleteData(2, 0), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.deleteData(3, 0), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.deleteData(376, 631), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.deleteData(0, 631), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.deleteData(1, 631), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 631), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.deleteData(1, 631), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.deleteData(2, 631), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.deleteData(3, 631), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [comment.deleteData(376, 2), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.deleteData(0, 2), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.deleteData(1, 2), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.deleteData(comment.length, 2), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.deleteData(1, 2), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.deleteData(2, 2), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.deleteData(3, 2), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.deleteData(376, 0), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.deleteData(0, 0), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.deleteData(1, 0), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.deleteData(comment.length, 0), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.deleteData(1, 0), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.deleteData(2, 0), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.deleteData(3, 0), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.deleteData(376, 631), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.deleteData(0, 631), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.deleteData(1, 631), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.deleteData(comment.length, 631), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.deleteData(1, 631), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.deleteData(2, 631), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.deleteData(3, 631), with selected range on comment from 1 to 3] - expected: FAIL - - [foreignComment.deleteData(376, 2), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.deleteData(0, 2), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.deleteData(1, 2), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.deleteData(foreignComment.length, 2), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.deleteData(1, 2), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.deleteData(2, 2), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.deleteData(3, 2), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.deleteData(376, 0), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.deleteData(0, 0), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.deleteData(1, 0), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.deleteData(foreignComment.length, 0), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.deleteData(1, 0), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.deleteData(2, 0), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.deleteData(3, 0), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.deleteData(376, 631), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.deleteData(0, 631), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.deleteData(1, 631), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.deleteData(foreignComment.length, 631), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.deleteData(1, 631), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.deleteData(2, 631), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.deleteData(3, 631), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [xmlComment.deleteData(376, 2), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.deleteData(0, 2), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.deleteData(1, 2), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.deleteData(xmlComment.length, 2), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.deleteData(1, 2), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.deleteData(2, 2), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.deleteData(3, 2), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.deleteData(376, 0), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.deleteData(0, 0), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.deleteData(1, 0), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.deleteData(xmlComment.length, 0), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.deleteData(1, 0), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.deleteData(2, 0), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.deleteData(3, 0), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.deleteData(376, 631), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.deleteData(0, 631), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.deleteData(1, 631), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.deleteData(xmlComment.length, 631), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.deleteData(1, 631), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.deleteData(2, 631), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.deleteData(3, 631), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [detachedComment.deleteData(376, 2), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.deleteData(0, 2), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.deleteData(1, 2), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.deleteData(detachedComment.length, 2), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.deleteData(1, 2), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.deleteData(2, 2), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.deleteData(3, 2), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.deleteData(376, 0), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.deleteData(0, 0), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.deleteData(1, 0), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.deleteData(detachedComment.length, 0), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.deleteData(1, 0), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.deleteData(2, 0), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.deleteData(3, 0), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.deleteData(376, 631), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.deleteData(0, 631), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.deleteData(1, 631), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.deleteData(detachedComment.length, 631), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.deleteData(1, 631), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.deleteData(2, 631), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.deleteData(3, 631), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.deleteData(376, 2), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.deleteData(0, 2), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.deleteData(1, 2), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.deleteData(detachedForeignComment.length, 2), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.deleteData(1, 2), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.deleteData(2, 2), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.deleteData(3, 2), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.deleteData(376, 0), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.deleteData(0, 0), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.deleteData(1, 0), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.deleteData(detachedForeignComment.length, 0), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.deleteData(1, 0), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.deleteData(2, 0), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.deleteData(3, 0), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.deleteData(376, 631), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.deleteData(0, 631), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.deleteData(1, 631), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.deleteData(detachedForeignComment.length, 631), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.deleteData(1, 631), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.deleteData(2, 631), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.deleteData(3, 631), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.deleteData(376, 2), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.deleteData(0, 2), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.deleteData(1, 2), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.deleteData(detachedXmlComment.length, 2), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.deleteData(1, 2), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.deleteData(2, 2), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.deleteData(3, 2), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.deleteData(376, 0), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.deleteData(0, 0), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.deleteData(1, 0), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.deleteData(detachedXmlComment.length, 0), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.deleteData(1, 0), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.deleteData(2, 0), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.deleteData(3, 0), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.deleteData(376, 631), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.deleteData(0, 631), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.deleteData(1, 631), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.deleteData(detachedXmlComment.length, 631), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.deleteData(1, 631), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.deleteData(2, 631), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.deleteData(3, 631), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 2), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 2), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 2), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 2), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.deleteData(2, 2), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.deleteData(3, 2), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.deleteData(1, 2), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.deleteData(2, 2), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.deleteData(3, 2), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.replaceData(376, 0, "foo"), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.replaceData(0, 0, "foo"), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 0, "foo"), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 0, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 0, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(376, 0, ""), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.replaceData(0, 0, ""), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 0, ""), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 0, ""), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 0, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 0, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 0, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(376, 1, "foo"), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.replaceData(0, 1, "foo"), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 1, "foo"), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 1, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 1, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(376, 1, ""), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.replaceData(0, 1, ""), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 1, ""), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 1, ""), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 1, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 1, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 1, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(376, 47, "foo"), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.replaceData(0, 47, "foo"), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 47, "foo"), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 47, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 47, "foo"), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(376, 47, ""), with selected range on paras[0\].firstChild from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.replaceData(0, 47, ""), with selected range collapsed at (paras[0\].firstChild, 0)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 47, ""), with selected range collapsed at (paras[0\].firstChild, 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 47, ""), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 47, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 47, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 47, ""), with selected range on paras[0\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(376, 0, "foo"), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.replaceData(0, 0, "foo"), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 0, "foo"), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 0, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(2, 0, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(3, 0, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(376, 0, ""), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.replaceData(0, 0, ""), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 0, ""), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 0, ""), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 0, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(2, 0, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(3, 0, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(376, 1, "foo"), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.replaceData(0, 1, "foo"), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 1, "foo"), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 1, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(2, 1, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(3, 1, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(376, 1, ""), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.replaceData(0, 1, ""), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 1, ""), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 1, ""), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 1, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(2, 1, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(3, 1, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(376, 47, "foo"), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.replaceData(0, 47, "foo"), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 47, "foo"), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 47, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(2, 47, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(3, 47, "foo"), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(376, 47, ""), with selected range on paras[1\].firstChild from 0 to 1] - expected: FAIL - - [paras[1\].firstChild.replaceData(0, 47, ""), with selected range collapsed at (paras[1\].firstChild, 0)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 47, ""), with selected range collapsed at (paras[1\].firstChild, 1)] - expected: FAIL - - [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 47, ""), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] - expected: FAIL - - [paras[1\].firstChild.replaceData(1, 47, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(2, 47, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [paras[1\].firstChild.replaceData(3, 47, ""), with selected range on paras[1\].firstChild from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(376, 0, "foo"), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.replaceData(foreignTextNode.length, 0, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.replaceData(1, 0, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(2, 0, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(3, 0, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(376, 0, ""), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.replaceData(0, 0, ""), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.replaceData(1, 0, ""), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.replaceData(foreignTextNode.length, 0, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.replaceData(1, 0, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(2, 0, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(3, 0, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(376, 1, "foo"), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.replaceData(foreignTextNode.length, 1, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.replaceData(1, 1, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(2, 1, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(3, 1, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(376, 1, ""), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.replaceData(0, 1, ""), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.replaceData(1, 1, ""), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.replaceData(foreignTextNode.length, 1, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.replaceData(1, 1, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(2, 1, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(3, 1, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(376, 47, "foo"), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.replaceData(foreignTextNode.length, 47, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.replaceData(1, 47, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(2, 47, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(3, 47, "foo"), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(376, 47, ""), with selected range on foreignTextNode from 0 to 1] - expected: FAIL - - [foreignTextNode.replaceData(0, 47, ""), with selected range collapsed at (foreignTextNode, 0)] - expected: FAIL - - [foreignTextNode.replaceData(1, 47, ""), with selected range collapsed at (foreignTextNode, 1)] - expected: FAIL - - [foreignTextNode.replaceData(foreignTextNode.length, 47, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] - expected: FAIL - - [foreignTextNode.replaceData(1, 47, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(2, 47, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [foreignTextNode.replaceData(3, 47, ""), with selected range on foreignTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(376, 0, "foo"), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.replaceData(xmlTextNode.length, 0, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.replaceData(1, 0, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(2, 0, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(3, 0, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(376, 0, ""), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.replaceData(0, 0, ""), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.replaceData(1, 0, ""), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.replaceData(xmlTextNode.length, 0, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.replaceData(1, 0, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(2, 0, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(3, 0, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(376, 1, "foo"), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.replaceData(xmlTextNode.length, 1, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.replaceData(1, 1, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(2, 1, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(3, 1, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(376, 1, ""), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.replaceData(0, 1, ""), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.replaceData(1, 1, ""), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.replaceData(xmlTextNode.length, 1, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.replaceData(1, 1, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(2, 1, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(3, 1, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(376, 47, "foo"), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.replaceData(xmlTextNode.length, 47, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.replaceData(1, 47, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(2, 47, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(3, 47, "foo"), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(376, 47, ""), with selected range on xmlTextNode from 0 to 1] - expected: FAIL - - [xmlTextNode.replaceData(0, 47, ""), with selected range collapsed at (xmlTextNode, 0)] - expected: FAIL - - [xmlTextNode.replaceData(1, 47, ""), with selected range collapsed at (xmlTextNode, 1)] - expected: FAIL - - [xmlTextNode.replaceData(xmlTextNode.length, 47, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] - expected: FAIL - - [xmlTextNode.replaceData(1, 47, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(2, 47, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [xmlTextNode.replaceData(3, 47, ""), with selected range on xmlTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(376, 0, "foo"), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.replaceData(detachedTextNode.length, 0, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.replaceData(1, 0, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(2, 0, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(3, 0, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(376, 0, ""), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.replaceData(0, 0, ""), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.replaceData(1, 0, ""), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.replaceData(detachedTextNode.length, 0, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.replaceData(1, 0, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(2, 0, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(3, 0, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(376, 1, "foo"), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.replaceData(detachedTextNode.length, 1, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.replaceData(1, 1, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(2, 1, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(3, 1, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(376, 1, ""), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.replaceData(0, 1, ""), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.replaceData(1, 1, ""), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.replaceData(detachedTextNode.length, 1, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.replaceData(1, 1, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(2, 1, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(3, 1, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(376, 47, "foo"), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.replaceData(detachedTextNode.length, 47, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.replaceData(1, 47, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(2, 47, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(3, 47, "foo"), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(376, 47, ""), with selected range on detachedTextNode from 0 to 1] - expected: FAIL - - [detachedTextNode.replaceData(0, 47, ""), with selected range collapsed at (detachedTextNode, 0)] - expected: FAIL - - [detachedTextNode.replaceData(1, 47, ""), with selected range collapsed at (detachedTextNode, 1)] - expected: FAIL - - [detachedTextNode.replaceData(detachedTextNode.length, 47, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] - expected: FAIL - - [detachedTextNode.replaceData(1, 47, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(2, 47, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedTextNode.replaceData(3, 47, ""), with selected range on detachedTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(376, 0, "foo"), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 0, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 0, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(2, 0, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(3, 0, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(376, 0, ""), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.replaceData(0, 0, ""), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 0, ""), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 0, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 0, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(2, 0, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(3, 0, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(376, 1, "foo"), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 1, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 1, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(2, 1, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(3, 1, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(376, 1, ""), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.replaceData(0, 1, ""), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 1, ""), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 1, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 1, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(2, 1, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(3, 1, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(376, 47, "foo"), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 47, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 47, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(2, 47, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(3, 47, "foo"), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(376, 47, ""), with selected range on detachedForeignTextNode from 0 to 1] - expected: FAIL - - [detachedForeignTextNode.replaceData(0, 47, ""), with selected range collapsed at (detachedForeignTextNode, 0)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 47, ""), with selected range collapsed at (detachedForeignTextNode, 1)] - expected: FAIL - - [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 47, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] - expected: FAIL - - [detachedForeignTextNode.replaceData(1, 47, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(2, 47, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedForeignTextNode.replaceData(3, 47, ""), with selected range on detachedForeignTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(376, 0, "foo"), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 0, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 0, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(2, 0, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(3, 0, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(376, 0, ""), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.replaceData(0, 0, ""), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 0, ""), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 0, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 0, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(2, 0, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(3, 0, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(376, 1, "foo"), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 1, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 1, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(2, 1, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(3, 1, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(376, 1, ""), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.replaceData(0, 1, ""), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 1, ""), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 1, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 1, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(2, 1, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(3, 1, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(376, 47, "foo"), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 47, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 47, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(2, 47, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(3, 47, "foo"), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(376, 47, ""), with selected range on detachedXmlTextNode from 0 to 1] - expected: FAIL - - [detachedXmlTextNode.replaceData(0, 47, ""), with selected range collapsed at (detachedXmlTextNode, 0)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 47, ""), with selected range collapsed at (detachedXmlTextNode, 1)] - expected: FAIL - - [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 47, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] - expected: FAIL - - [detachedXmlTextNode.replaceData(1, 47, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(2, 47, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [detachedXmlTextNode.replaceData(3, 47, ""), with selected range on detachedXmlTextNode from 1 to 3] - expected: FAIL - - [comment.replaceData(376, 0, "foo"), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.replaceData(0, 0, "foo"), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.replaceData(1, 0, "foo"), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.replaceData(comment.length, 0, "foo"), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.replaceData(1, 0, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(2, 0, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(3, 0, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(376, 0, ""), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.replaceData(0, 0, ""), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.replaceData(1, 0, ""), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.replaceData(comment.length, 0, ""), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.replaceData(1, 0, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(2, 0, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(3, 0, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(376, 1, "foo"), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.replaceData(0, 1, "foo"), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.replaceData(1, 1, "foo"), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.replaceData(comment.length, 1, "foo"), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.replaceData(1, 1, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(2, 1, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(3, 1, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(376, 1, ""), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.replaceData(0, 1, ""), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.replaceData(1, 1, ""), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.replaceData(comment.length, 1, ""), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.replaceData(1, 1, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(2, 1, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(3, 1, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(376, 47, "foo"), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.replaceData(0, 47, "foo"), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.replaceData(1, 47, "foo"), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.replaceData(comment.length, 47, "foo"), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.replaceData(1, 47, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(2, 47, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(3, 47, "foo"), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(376, 47, ""), with selected range on comment from 0 to 1] - expected: FAIL - - [comment.replaceData(0, 47, ""), with selected range collapsed at (comment, 0)] - expected: FAIL - - [comment.replaceData(1, 47, ""), with selected range collapsed at (comment, 1)] - expected: FAIL - - [comment.replaceData(comment.length, 47, ""), with selected range collapsed at (comment, comment.length)] - expected: FAIL - - [comment.replaceData(1, 47, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(2, 47, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [comment.replaceData(3, 47, ""), with selected range on comment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(376, 0, "foo"), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.replaceData(0, 0, "foo"), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.replaceData(1, 0, "foo"), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.replaceData(foreignComment.length, 0, "foo"), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.replaceData(1, 0, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(2, 0, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(3, 0, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(376, 0, ""), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.replaceData(0, 0, ""), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.replaceData(1, 0, ""), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.replaceData(foreignComment.length, 0, ""), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.replaceData(1, 0, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(2, 0, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(3, 0, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(376, 1, "foo"), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.replaceData(0, 1, "foo"), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.replaceData(1, 1, "foo"), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.replaceData(foreignComment.length, 1, "foo"), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.replaceData(1, 1, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(2, 1, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(3, 1, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(376, 1, ""), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.replaceData(0, 1, ""), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.replaceData(1, 1, ""), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.replaceData(foreignComment.length, 1, ""), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.replaceData(1, 1, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(2, 1, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(3, 1, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(376, 47, "foo"), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.replaceData(0, 47, "foo"), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.replaceData(1, 47, "foo"), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.replaceData(foreignComment.length, 47, "foo"), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.replaceData(1, 47, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(2, 47, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(3, 47, "foo"), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(376, 47, ""), with selected range on foreignComment from 0 to 1] - expected: FAIL - - [foreignComment.replaceData(0, 47, ""), with selected range collapsed at (foreignComment, 0)] - expected: FAIL - - [foreignComment.replaceData(1, 47, ""), with selected range collapsed at (foreignComment, 1)] - expected: FAIL - - [foreignComment.replaceData(foreignComment.length, 47, ""), with selected range collapsed at (foreignComment, foreignComment.length)] - expected: FAIL - - [foreignComment.replaceData(1, 47, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(2, 47, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [foreignComment.replaceData(3, 47, ""), with selected range on foreignComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(376, 0, "foo"), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.replaceData(0, 0, "foo"), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.replaceData(1, 0, "foo"), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.replaceData(xmlComment.length, 0, "foo"), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.replaceData(1, 0, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(2, 0, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(3, 0, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(376, 0, ""), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.replaceData(0, 0, ""), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.replaceData(1, 0, ""), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.replaceData(xmlComment.length, 0, ""), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.replaceData(1, 0, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(2, 0, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(3, 0, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(376, 1, "foo"), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.replaceData(0, 1, "foo"), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.replaceData(1, 1, "foo"), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.replaceData(xmlComment.length, 1, "foo"), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.replaceData(1, 1, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(2, 1, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(3, 1, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(376, 1, ""), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.replaceData(0, 1, ""), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.replaceData(1, 1, ""), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.replaceData(xmlComment.length, 1, ""), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.replaceData(1, 1, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(2, 1, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(3, 1, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(376, 47, "foo"), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.replaceData(0, 47, "foo"), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.replaceData(1, 47, "foo"), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.replaceData(xmlComment.length, 47, "foo"), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.replaceData(1, 47, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(2, 47, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(3, 47, "foo"), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(376, 47, ""), with selected range on xmlComment from 0 to 1] - expected: FAIL - - [xmlComment.replaceData(0, 47, ""), with selected range collapsed at (xmlComment, 0)] - expected: FAIL - - [xmlComment.replaceData(1, 47, ""), with selected range collapsed at (xmlComment, 1)] - expected: FAIL - - [xmlComment.replaceData(xmlComment.length, 47, ""), with selected range collapsed at (xmlComment, xmlComment.length)] - expected: FAIL - - [xmlComment.replaceData(1, 47, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(2, 47, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [xmlComment.replaceData(3, 47, ""), with selected range on xmlComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(376, 0, "foo"), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.replaceData(0, 0, "foo"), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.replaceData(1, 0, "foo"), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.replaceData(detachedComment.length, 0, "foo"), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.replaceData(1, 0, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(2, 0, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(3, 0, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(376, 0, ""), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.replaceData(0, 0, ""), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.replaceData(1, 0, ""), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.replaceData(detachedComment.length, 0, ""), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.replaceData(1, 0, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(2, 0, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(3, 0, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(376, 1, "foo"), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.replaceData(0, 1, "foo"), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.replaceData(1, 1, "foo"), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.replaceData(detachedComment.length, 1, "foo"), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.replaceData(1, 1, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(2, 1, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(3, 1, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(376, 1, ""), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.replaceData(0, 1, ""), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.replaceData(1, 1, ""), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.replaceData(detachedComment.length, 1, ""), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.replaceData(1, 1, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(2, 1, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(3, 1, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(376, 47, "foo"), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.replaceData(0, 47, "foo"), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.replaceData(1, 47, "foo"), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.replaceData(detachedComment.length, 47, "foo"), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.replaceData(1, 47, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(2, 47, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(3, 47, "foo"), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(376, 47, ""), with selected range on detachedComment from 0 to 1] - expected: FAIL - - [detachedComment.replaceData(0, 47, ""), with selected range collapsed at (detachedComment, 0)] - expected: FAIL - - [detachedComment.replaceData(1, 47, ""), with selected range collapsed at (detachedComment, 1)] - expected: FAIL - - [detachedComment.replaceData(detachedComment.length, 47, ""), with selected range collapsed at (detachedComment, detachedComment.length)] - expected: FAIL - - [detachedComment.replaceData(1, 47, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(2, 47, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedComment.replaceData(3, 47, ""), with selected range on detachedComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(376, 0, "foo"), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.replaceData(0, 0, "foo"), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 0, "foo"), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.replaceData(detachedForeignComment.length, 0, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 0, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(2, 0, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(3, 0, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(376, 0, ""), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.replaceData(0, 0, ""), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 0, ""), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.replaceData(detachedForeignComment.length, 0, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 0, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(2, 0, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(3, 0, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(376, 1, "foo"), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.replaceData(0, 1, "foo"), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 1, "foo"), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.replaceData(detachedForeignComment.length, 1, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 1, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(2, 1, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(3, 1, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(376, 1, ""), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.replaceData(0, 1, ""), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 1, ""), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.replaceData(detachedForeignComment.length, 1, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 1, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(2, 1, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(3, 1, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(376, 47, "foo"), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.replaceData(0, 47, "foo"), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 47, "foo"), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.replaceData(detachedForeignComment.length, 47, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 47, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(2, 47, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(3, 47, "foo"), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(376, 47, ""), with selected range on detachedForeignComment from 0 to 1] - expected: FAIL - - [detachedForeignComment.replaceData(0, 47, ""), with selected range collapsed at (detachedForeignComment, 0)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 47, ""), with selected range collapsed at (detachedForeignComment, 1)] - expected: FAIL - - [detachedForeignComment.replaceData(detachedForeignComment.length, 47, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] - expected: FAIL - - [detachedForeignComment.replaceData(1, 47, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(2, 47, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedForeignComment.replaceData(3, 47, ""), with selected range on detachedForeignComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(376, 0, "foo"), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.replaceData(0, 0, "foo"), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 0, "foo"), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.replaceData(detachedXmlComment.length, 0, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 0, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(2, 0, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(3, 0, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(376, 0, ""), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.replaceData(0, 0, ""), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 0, ""), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.replaceData(detachedXmlComment.length, 0, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 0, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(2, 0, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(3, 0, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(376, 1, "foo"), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.replaceData(0, 1, "foo"), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 1, "foo"), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.replaceData(detachedXmlComment.length, 1, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 1, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(2, 1, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(3, 1, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(376, 1, ""), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.replaceData(0, 1, ""), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 1, ""), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.replaceData(detachedXmlComment.length, 1, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 1, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(2, 1, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(3, 1, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(376, 47, "foo"), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.replaceData(0, 47, "foo"), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 47, "foo"), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.replaceData(detachedXmlComment.length, 47, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 47, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(2, 47, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(3, 47, "foo"), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(376, 47, ""), with selected range on detachedXmlComment from 0 to 1] - expected: FAIL - - [detachedXmlComment.replaceData(0, 47, ""), with selected range collapsed at (detachedXmlComment, 0)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 47, ""), with selected range collapsed at (detachedXmlComment, 1)] - expected: FAIL - - [detachedXmlComment.replaceData(detachedXmlComment.length, 47, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] - expected: FAIL - - [detachedXmlComment.replaceData(1, 47, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(2, 47, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [detachedXmlComment.replaceData(3, 47, ""), with selected range on detachedXmlComment from 1 to 3] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 0, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 0, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 0, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 0, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 1, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 1, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 1, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 1, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 47, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 47, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] - expected: FAIL - - [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.replaceData(2, 47, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - - [paras[0\].firstChild.replaceData(3, 47, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] - expected: FAIL - [paras[0\].firstChild.data = "", with selected range collapsed at (paras[0\].firstChild, 0)] expected: FAIL @@ -8100,342 +4212,3 @@ [detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] expected: FAIL - [testDiv.insertBefore(paras[0\], paras[1\]), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [testDiv.insertBefore(paras[0\], paras[1\]), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [testDiv.insertBefore(paras[0\], paras[1\]), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [testDiv.insertBefore(paras[0\], paras[1\]), with selected range on testDiv from 0 to 2] - expected: FAIL - - [testDiv.insertBefore(paras[0\], paras[1\]), with selected range collapsed at (testDiv, 1)] - expected: FAIL - - [testDiv.insertBefore(paras[0\], paras[1\]), with selected range on testDiv from 1 to 2] - expected: FAIL - - [testDiv.insertBefore(paras[0\], paras[1\]), with selected range collapsed at (testDiv, 2)] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range on testDiv from 0 to 1] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range on testDiv from 0 to 2] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range collapsed at (testDiv, 1)] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range on testDiv from 1 to 2] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], null), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], null), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], null), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], null), with selected range on testDiv from 0 to 1] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], null), with selected range on testDiv from 0 to 2] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], null), with selected range collapsed at (testDiv, 1)] - expected: FAIL - - [paras[0\].insertBefore(paras[1\], null), with selected range on testDiv from 1 to 2] - expected: FAIL - - [foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 0)] - expected: FAIL - - [foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 1] - expected: FAIL - - [foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 2] - expected: FAIL - - [foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 1)] - expected: FAIL - - [foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 0)] - expected: FAIL - - [foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 1] - expected: FAIL - - [foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 2] - expected: FAIL - - [foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 1)] - expected: FAIL - - [foreignDoc.insertBefore(detachedComment, null), with selected range on foreignDoc from 0 to 1] - expected: FAIL - - [paras[0\].insertBefore(xmlTextNode, paras[0\].firstChild), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].insertBefore(xmlTextNode, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].insertBefore(xmlTextNode, paras[0\].firstChild), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].insertBefore(paras[0\], paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].insertBefore(testDiv, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].insertBefore(document, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].insertBefore(foreignDoc, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].insertBefore(document.doctype, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [testDiv.replaceChild(paras[0\], paras[0\]), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [testDiv.replaceChild(paras[0\], paras[0\]), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [testDiv.replaceChild(paras[0\], paras[0\]), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [testDiv.replaceChild(paras[0\], paras[0\]), with selected range on testDiv from 0 to 2] - expected: FAIL - - [testDiv.replaceChild(paras[0\], paras[0\]), with selected range collapsed at (testDiv, 1)] - expected: FAIL - - [testDiv.replaceChild(paras[0\], paras[0\]), with selected range on testDiv from 1 to 2] - expected: FAIL - - [testDiv.replaceChild(paras[0\], paras[0\]), with selected range collapsed at (testDiv, 2)] - expected: FAIL - - [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range on testDiv from 0 to 1] - expected: FAIL - - [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range on testDiv from 0 to 2] - expected: FAIL - - [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range collapsed at (testDiv, 1)] - expected: FAIL - - [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range on testDiv from 1 to 2] - expected: FAIL - - [foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 0)] - expected: FAIL - - [foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 1] - expected: FAIL - - [foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 2] - expected: FAIL - - [foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 1)] - expected: FAIL - - [foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 0)] - expected: FAIL - - [foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 1] - expected: FAIL - - [foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 2] - expected: FAIL - - [foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 1)] - expected: FAIL - - [paras[0\].replaceChild(xmlTextNode, paras[0\].firstChild), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].replaceChild(xmlTextNode, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].replaceChild(xmlTextNode, paras[0\].firstChild), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].replaceChild(paras[0\], paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].replaceChild(testDiv, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].replaceChild(document, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].replaceChild(foreignDoc, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].replaceChild(document.doctype, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv.lastChild, 0)] - expected: FAIL - - [testDiv.appendChild(testDiv.lastChild), with selected range on testDiv.lastChild from 0 to 1] - expected: FAIL - - [testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv.lastChild, 1)] - expected: FAIL - - [testDiv.appendChild(testDiv.lastChild), with selected range on testDiv from testDiv.childNodes.length - 2 to testDiv.childNodes.length] - expected: FAIL - - [testDiv.appendChild(testDiv.lastChild), with selected range on testDiv from testDiv.childNodes.length - 2 to testDiv.childNodes.length - 1] - expected: FAIL - - [testDiv.appendChild(testDiv.lastChild), with selected range on testDiv from testDiv.childNodes.length - 1 to testDiv.childNodes.length] - expected: FAIL - - [testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv, testDiv.childNodes.length - 1)] - expected: FAIL - - [testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv, testDiv.childNodes.length)] - expected: FAIL - - [detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv.lastChild, 0)] - expected: FAIL - - [detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv.lastChild from 0 to 1] - expected: FAIL - - [detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv.lastChild, 1)] - expected: FAIL - - [detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv from detachedDiv.childNodes.length - 2 to detachedDiv.childNodes.length] - expected: FAIL - - [detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv from detachedDiv.childNodes.length - 2 to detachedDiv.childNodes.length - 1] - expected: FAIL - - [detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv from detachedDiv.childNodes.length - 1 to detachedDiv.childNodes.length] - expected: FAIL - - [detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv, detachedDiv.childNodes.length - 1)] - expected: FAIL - - [detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv, detachedDiv.childNodes.length)] - expected: FAIL - - [paras[0\].appendChild(paras[1\]), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].appendChild(paras[1\]), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].appendChild(paras[1\]), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].appendChild(paras[1\]), with selected range on testDiv from 0 to 1] - expected: FAIL - - [paras[0\].appendChild(paras[1\]), with selected range on testDiv from 0 to 2] - expected: FAIL - - [paras[0\].appendChild(paras[1\]), with selected range collapsed at (testDiv, 1)] - expected: FAIL - - [paras[0\].appendChild(paras[1\]), with selected range on testDiv from 1 to 2] - expected: FAIL - - [foreignDoc.appendChild(detachedComment), with selected range on foreignDoc from foreignDoc.childNodes.length - 1 to foreignDoc.childNodes.length] - expected: FAIL - - [foreignDoc.appendChild(detachedComment), with selected range collapsed at (foreignDoc, foreignDoc.childNodes.length - 1)] - expected: FAIL - - [foreignDoc.appendChild(detachedComment), with selected range collapsed at (foreignDoc, foreignDoc.childNodes.length)] - expected: FAIL - - [foreignDoc.appendChild(detachedComment), with selected range on detachedComment from 0 to 5] - expected: FAIL - - [paras[0\].appendChild(xmlTextNode), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].appendChild(xmlTextNode), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].appendChild(xmlTextNode), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].appendChild(paras[0\]), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].appendChild(testDiv), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].appendChild(document), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].appendChild(foreignDoc), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].appendChild(document.doctype), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].parentNode.removeChild(paras[0\]), with selected range collapsed at (paras[0\], 0)] - expected: FAIL - - [paras[0\].parentNode.removeChild(paras[0\]), with selected range on paras[0\] from 0 to 1] - expected: FAIL - - [paras[0\].parentNode.removeChild(paras[0\]), with selected range collapsed at (paras[0\], 1)] - expected: FAIL - - [paras[0\].parentNode.removeChild(paras[0\]), with selected range collapsed at (testDiv, 0)] - expected: FAIL - - [paras[0\].parentNode.removeChild(paras[0\]), with selected range on testDiv from 0 to 1] - expected: FAIL - - [paras[0\].parentNode.removeChild(paras[0\]), with selected range collapsed at (testDiv, 1)] - expected: FAIL - - [paras[0\].parentNode.removeChild(paras[0\]), with selected range on testDiv from 0 to 2] - expected: FAIL - - [paras[0\].parentNode.removeChild(paras[0\]), with selected range on testDiv from 1 to 2] - expected: FAIL - - [paras[0\].parentNode.removeChild(paras[0\]), with selected range collapsed at (testDiv, 2)] - expected: FAIL - - [foreignDoc.documentElement.parentNode.removeChild(foreignDoc.documentElement), with selected range on foreignDoc from 0 to foreignDoc.childNodes.length] - expected: FAIL - diff --git a/tests/wpt/metadata/dom/ranges/Range-mutations-deleteData.html.ini b/tests/wpt/metadata/dom/ranges/Range-mutations-deleteData.html.ini new file mode 100644 index 00000000000..b6bcbd09ce8 --- /dev/null +++ b/tests/wpt/metadata/dom/ranges/Range-mutations-deleteData.html.ini @@ -0,0 +1,848 @@ +[Range-mutations-deleteData.html] + type: testharness + [paras[0\].firstChild.deleteData(376, 2), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.deleteData(0, 2), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 2), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.deleteData(paras[0\].firstChild.length, 2), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 2), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.deleteData(2, 2), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.deleteData(3, 2), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.deleteData(376, 0), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.deleteData(0, 0), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 0), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.deleteData(paras[0\].firstChild.length, 0), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 0), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.deleteData(2, 0), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.deleteData(3, 0), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.deleteData(376, 631), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.deleteData(0, 631), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 631), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.deleteData(paras[0\].firstChild.length, 631), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 631), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.deleteData(2, 631), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.deleteData(3, 631), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.deleteData(376, 2), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.deleteData(0, 2), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.deleteData(1, 2), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.deleteData(paras[1\].firstChild.length, 2), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.deleteData(1, 2), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.deleteData(2, 2), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.deleteData(3, 2), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.deleteData(376, 0), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.deleteData(0, 0), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.deleteData(1, 0), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.deleteData(paras[1\].firstChild.length, 0), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.deleteData(1, 0), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.deleteData(2, 0), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.deleteData(3, 0), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.deleteData(376, 631), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.deleteData(0, 631), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.deleteData(1, 631), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.deleteData(paras[1\].firstChild.length, 631), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.deleteData(1, 631), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.deleteData(2, 631), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.deleteData(3, 631), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [foreignTextNode.deleteData(376, 2), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.deleteData(0, 2), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.deleteData(1, 2), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.deleteData(foreignTextNode.length, 2), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.deleteData(1, 2), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.deleteData(2, 2), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.deleteData(3, 2), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.deleteData(376, 0), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.deleteData(0, 0), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.deleteData(1, 0), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.deleteData(foreignTextNode.length, 0), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.deleteData(1, 0), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.deleteData(2, 0), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.deleteData(3, 0), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.deleteData(376, 631), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.deleteData(0, 631), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.deleteData(1, 631), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.deleteData(foreignTextNode.length, 631), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.deleteData(1, 631), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.deleteData(2, 631), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.deleteData(3, 631), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.deleteData(376, 2), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.deleteData(0, 2), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.deleteData(1, 2), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.deleteData(xmlTextNode.length, 2), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.deleteData(1, 2), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.deleteData(2, 2), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.deleteData(3, 2), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.deleteData(376, 0), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.deleteData(0, 0), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.deleteData(1, 0), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.deleteData(xmlTextNode.length, 0), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.deleteData(1, 0), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.deleteData(2, 0), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.deleteData(3, 0), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.deleteData(376, 631), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.deleteData(0, 631), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.deleteData(1, 631), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.deleteData(xmlTextNode.length, 631), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.deleteData(1, 631), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.deleteData(2, 631), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.deleteData(3, 631), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.deleteData(376, 2), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.deleteData(0, 2), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.deleteData(1, 2), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.deleteData(detachedTextNode.length, 2), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.deleteData(1, 2), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.deleteData(2, 2), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.deleteData(3, 2), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.deleteData(376, 0), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.deleteData(0, 0), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.deleteData(1, 0), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.deleteData(detachedTextNode.length, 0), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.deleteData(1, 0), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.deleteData(2, 0), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.deleteData(3, 0), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.deleteData(376, 631), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.deleteData(0, 631), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.deleteData(1, 631), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.deleteData(detachedTextNode.length, 631), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.deleteData(1, 631), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.deleteData(2, 631), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.deleteData(3, 631), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.deleteData(376, 2), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.deleteData(0, 2), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.deleteData(1, 2), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 2), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.deleteData(1, 2), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.deleteData(2, 2), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.deleteData(3, 2), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.deleteData(376, 0), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.deleteData(0, 0), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.deleteData(1, 0), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 0), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.deleteData(1, 0), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.deleteData(2, 0), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.deleteData(3, 0), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.deleteData(376, 631), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.deleteData(0, 631), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.deleteData(1, 631), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 631), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.deleteData(1, 631), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.deleteData(2, 631), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.deleteData(3, 631), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.deleteData(376, 2), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.deleteData(0, 2), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.deleteData(1, 2), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 2), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.deleteData(1, 2), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.deleteData(2, 2), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.deleteData(3, 2), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.deleteData(376, 0), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.deleteData(0, 0), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.deleteData(1, 0), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 0), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.deleteData(1, 0), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.deleteData(2, 0), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.deleteData(3, 0), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.deleteData(376, 631), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.deleteData(0, 631), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.deleteData(1, 631), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 631), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.deleteData(1, 631), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.deleteData(2, 631), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.deleteData(3, 631), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [comment.deleteData(376, 2), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.deleteData(0, 2), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.deleteData(1, 2), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.deleteData(comment.length, 2), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.deleteData(1, 2), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.deleteData(2, 2), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.deleteData(3, 2), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.deleteData(376, 0), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.deleteData(0, 0), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.deleteData(1, 0), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.deleteData(comment.length, 0), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.deleteData(1, 0), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.deleteData(2, 0), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.deleteData(3, 0), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.deleteData(376, 631), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.deleteData(0, 631), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.deleteData(1, 631), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.deleteData(comment.length, 631), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.deleteData(1, 631), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.deleteData(2, 631), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.deleteData(3, 631), with selected range on comment from 1 to 3] + expected: FAIL + + [foreignComment.deleteData(376, 2), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.deleteData(0, 2), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.deleteData(1, 2), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.deleteData(foreignComment.length, 2), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.deleteData(1, 2), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.deleteData(2, 2), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.deleteData(3, 2), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.deleteData(376, 0), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.deleteData(0, 0), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.deleteData(1, 0), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.deleteData(foreignComment.length, 0), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.deleteData(1, 0), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.deleteData(2, 0), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.deleteData(3, 0), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.deleteData(376, 631), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.deleteData(0, 631), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.deleteData(1, 631), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.deleteData(foreignComment.length, 631), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.deleteData(1, 631), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.deleteData(2, 631), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.deleteData(3, 631), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [xmlComment.deleteData(376, 2), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.deleteData(0, 2), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.deleteData(1, 2), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.deleteData(xmlComment.length, 2), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.deleteData(1, 2), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.deleteData(2, 2), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.deleteData(3, 2), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.deleteData(376, 0), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.deleteData(0, 0), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.deleteData(1, 0), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.deleteData(xmlComment.length, 0), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.deleteData(1, 0), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.deleteData(2, 0), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.deleteData(3, 0), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.deleteData(376, 631), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.deleteData(0, 631), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.deleteData(1, 631), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.deleteData(xmlComment.length, 631), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.deleteData(1, 631), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.deleteData(2, 631), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.deleteData(3, 631), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [detachedComment.deleteData(376, 2), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.deleteData(0, 2), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.deleteData(1, 2), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.deleteData(detachedComment.length, 2), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.deleteData(1, 2), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.deleteData(2, 2), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.deleteData(3, 2), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.deleteData(376, 0), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.deleteData(0, 0), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.deleteData(1, 0), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.deleteData(detachedComment.length, 0), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.deleteData(1, 0), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.deleteData(2, 0), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.deleteData(3, 0), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.deleteData(376, 631), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.deleteData(0, 631), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.deleteData(1, 631), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.deleteData(detachedComment.length, 631), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.deleteData(1, 631), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.deleteData(2, 631), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.deleteData(3, 631), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.deleteData(376, 2), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.deleteData(0, 2), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.deleteData(1, 2), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.deleteData(detachedForeignComment.length, 2), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.deleteData(1, 2), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.deleteData(2, 2), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.deleteData(3, 2), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.deleteData(376, 0), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.deleteData(0, 0), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.deleteData(1, 0), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.deleteData(detachedForeignComment.length, 0), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.deleteData(1, 0), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.deleteData(2, 0), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.deleteData(3, 0), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.deleteData(376, 631), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.deleteData(0, 631), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.deleteData(1, 631), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.deleteData(detachedForeignComment.length, 631), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.deleteData(1, 631), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.deleteData(2, 631), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.deleteData(3, 631), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.deleteData(376, 2), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.deleteData(0, 2), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.deleteData(1, 2), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.deleteData(detachedXmlComment.length, 2), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.deleteData(1, 2), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.deleteData(2, 2), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.deleteData(3, 2), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.deleteData(376, 0), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.deleteData(0, 0), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.deleteData(1, 0), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.deleteData(detachedXmlComment.length, 0), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.deleteData(1, 0), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.deleteData(2, 0), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.deleteData(3, 0), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.deleteData(376, 631), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.deleteData(0, 631), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.deleteData(1, 631), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.deleteData(detachedXmlComment.length, 631), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.deleteData(1, 631), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.deleteData(2, 631), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.deleteData(3, 631), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 2), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 2), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 2), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 2), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.deleteData(2, 2), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.deleteData(3, 2), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.deleteData(1, 2), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.deleteData(2, 2), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.deleteData(3, 2), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/ranges/Range-mutations-insertBefore.html.ini b/tests/wpt/metadata/dom/ranges/Range-mutations-insertBefore.html.ini new file mode 100644 index 00000000000..1f4099d07b6 --- /dev/null +++ b/tests/wpt/metadata/dom/ranges/Range-mutations-insertBefore.html.ini @@ -0,0 +1,116 @@ +[Range-mutations-insertBefore.html] + type: testharness + [testDiv.insertBefore(paras[0\], paras[1\]), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [testDiv.insertBefore(paras[0\], paras[1\]), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [testDiv.insertBefore(paras[0\], paras[1\]), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [testDiv.insertBefore(paras[0\], paras[1\]), with selected range on testDiv from 0 to 2] + expected: FAIL + + [testDiv.insertBefore(paras[0\], paras[1\]), with selected range collapsed at (testDiv, 1)] + expected: FAIL + + [testDiv.insertBefore(paras[0\], paras[1\]), with selected range on testDiv from 1 to 2] + expected: FAIL + + [testDiv.insertBefore(paras[0\], paras[1\]), with selected range collapsed at (testDiv, 2)] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range on testDiv from 0 to 1] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range on testDiv from 0 to 2] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range collapsed at (testDiv, 1)] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], paras[0\].firstChild), with selected range on testDiv from 1 to 2] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], null), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], null), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], null), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], null), with selected range on testDiv from 0 to 1] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], null), with selected range on testDiv from 0 to 2] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], null), with selected range collapsed at (testDiv, 1)] + expected: FAIL + + [paras[0\].insertBefore(paras[1\], null), with selected range on testDiv from 1 to 2] + expected: FAIL + + [foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 0)] + expected: FAIL + + [foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 1] + expected: FAIL + + [foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 2] + expected: FAIL + + [foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 1)] + expected: FAIL + + [foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 0)] + expected: FAIL + + [foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 1] + expected: FAIL + + [foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 2] + expected: FAIL + + [foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 1)] + expected: FAIL + + [foreignDoc.insertBefore(detachedComment, null), with selected range on foreignDoc from 0 to 1] + expected: FAIL + + [paras[0\].insertBefore(xmlTextNode, paras[0\].firstChild), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].insertBefore(xmlTextNode, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].insertBefore(xmlTextNode, paras[0\].firstChild), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].insertBefore(paras[0\], paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].insertBefore(testDiv, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].insertBefore(document, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].insertBefore(foreignDoc, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].insertBefore(document.doctype, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/ranges/Range-mutations-insertData.html.ini b/tests/wpt/metadata/dom/ranges/Range-mutations-insertData.html.ini new file mode 100644 index 00000000000..c003d9ddcff --- /dev/null +++ b/tests/wpt/metadata/dom/ranges/Range-mutations-insertData.html.ini @@ -0,0 +1,575 @@ +[Range-mutations-insertData.html] + type: testharness + [paras[0\].firstChild.insertData(376, "foo"), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.insertData(0, "foo"), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.insertData(paras[0\].firstChild.length, "foo"), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.insertData(1, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.insertData(2, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.insertData(3, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.insertData(376, ""), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.insertData(0, ""), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.insertData(1, ""), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.insertData(paras[0\].firstChild.length, ""), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.insertData(1, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.insertData(2, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.insertData(3, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.insertData(376, "foo"), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.insertData(0, "foo"), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.insertData(paras[1\].firstChild.length, "foo"), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.insertData(1, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.insertData(2, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.insertData(3, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.insertData(376, ""), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.insertData(0, ""), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.insertData(1, ""), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.insertData(paras[1\].firstChild.length, ""), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.insertData(1, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.insertData(2, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.insertData(3, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [foreignTextNode.insertData(376, "foo"), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.insertData(0, "foo"), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.insertData(1, "foo"), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.insertData(foreignTextNode.length, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.insertData(1, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.insertData(2, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.insertData(3, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.insertData(376, ""), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.insertData(0, ""), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.insertData(1, ""), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.insertData(foreignTextNode.length, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.insertData(1, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.insertData(2, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.insertData(3, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.insertData(376, "foo"), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.insertData(0, "foo"), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.insertData(1, "foo"), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.insertData(xmlTextNode.length, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.insertData(1, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.insertData(2, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.insertData(3, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.insertData(376, ""), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.insertData(0, ""), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.insertData(1, ""), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.insertData(xmlTextNode.length, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.insertData(1, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.insertData(2, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.insertData(3, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.insertData(376, "foo"), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.insertData(0, "foo"), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.insertData(1, "foo"), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.insertData(detachedTextNode.length, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.insertData(1, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.insertData(2, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.insertData(3, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.insertData(376, ""), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.insertData(0, ""), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.insertData(1, ""), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.insertData(detachedTextNode.length, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.insertData(1, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.insertData(2, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.insertData(3, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.insertData(376, "foo"), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.insertData(0, "foo"), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.insertData(1, "foo"), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.insertData(detachedForeignTextNode.length, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.insertData(1, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.insertData(2, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.insertData(3, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.insertData(376, ""), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.insertData(0, ""), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.insertData(1, ""), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.insertData(detachedForeignTextNode.length, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.insertData(1, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.insertData(2, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.insertData(3, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.insertData(376, "foo"), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.insertData(0, "foo"), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.insertData(1, "foo"), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.insertData(detachedXmlTextNode.length, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.insertData(1, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.insertData(2, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.insertData(3, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.insertData(376, ""), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.insertData(0, ""), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.insertData(1, ""), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.insertData(detachedXmlTextNode.length, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.insertData(1, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.insertData(2, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.insertData(3, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [comment.insertData(376, "foo"), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.insertData(0, "foo"), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.insertData(1, "foo"), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.insertData(comment.length, "foo"), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.insertData(1, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.insertData(2, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.insertData(3, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.insertData(376, ""), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.insertData(0, ""), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.insertData(1, ""), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.insertData(comment.length, ""), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.insertData(1, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.insertData(2, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.insertData(3, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [foreignComment.insertData(376, "foo"), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.insertData(0, "foo"), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.insertData(1, "foo"), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.insertData(foreignComment.length, "foo"), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.insertData(1, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.insertData(2, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.insertData(3, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.insertData(376, ""), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.insertData(0, ""), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.insertData(1, ""), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.insertData(foreignComment.length, ""), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.insertData(1, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.insertData(2, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.insertData(3, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [xmlComment.insertData(376, "foo"), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.insertData(0, "foo"), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.insertData(1, "foo"), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.insertData(xmlComment.length, "foo"), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.insertData(1, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.insertData(2, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.insertData(3, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.insertData(376, ""), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.insertData(0, ""), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.insertData(1, ""), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.insertData(xmlComment.length, ""), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.insertData(1, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.insertData(2, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.insertData(3, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [detachedComment.insertData(376, "foo"), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.insertData(0, "foo"), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.insertData(1, "foo"), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.insertData(detachedComment.length, "foo"), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.insertData(1, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.insertData(2, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.insertData(3, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.insertData(376, ""), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.insertData(0, ""), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.insertData(1, ""), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.insertData(detachedComment.length, ""), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.insertData(1, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.insertData(2, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.insertData(3, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.insertData(376, "foo"), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.insertData(0, "foo"), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.insertData(1, "foo"), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.insertData(detachedForeignComment.length, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.insertData(1, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.insertData(2, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.insertData(3, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.insertData(376, ""), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.insertData(0, ""), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.insertData(1, ""), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.insertData(detachedForeignComment.length, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.insertData(1, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.insertData(2, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.insertData(3, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.insertData(376, "foo"), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.insertData(0, "foo"), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.insertData(1, "foo"), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.insertData(detachedXmlComment.length, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.insertData(1, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.insertData(2, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.insertData(3, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.insertData(376, ""), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.insertData(0, ""), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.insertData(1, ""), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.insertData(detachedXmlComment.length, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.insertData(1, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.insertData(2, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.insertData(3, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].firstChild.insertData(1, "foo"), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.insertData(1, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.insertData(2, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.insertData(3, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.insertData(1, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.insertData(2, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.insertData(3, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/ranges/Range-mutations-removeChild.html.ini b/tests/wpt/metadata/dom/ranges/Range-mutations-removeChild.html.ini new file mode 100644 index 00000000000..375bc388a0e --- /dev/null +++ b/tests/wpt/metadata/dom/ranges/Range-mutations-removeChild.html.ini @@ -0,0 +1,32 @@ +[Range-mutations-removeChild.html] + type: testharness + [paras[0\].parentNode.removeChild(paras[0\]), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].parentNode.removeChild(paras[0\]), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].parentNode.removeChild(paras[0\]), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].parentNode.removeChild(paras[0\]), with selected range collapsed at (testDiv, 0)] + expected: FAIL + + [paras[0\].parentNode.removeChild(paras[0\]), with selected range on testDiv from 0 to 1] + expected: FAIL + + [paras[0\].parentNode.removeChild(paras[0\]), with selected range collapsed at (testDiv, 1)] + expected: FAIL + + [paras[0\].parentNode.removeChild(paras[0\]), with selected range on testDiv from 0 to 2] + expected: FAIL + + [paras[0\].parentNode.removeChild(paras[0\]), with selected range on testDiv from 1 to 2] + expected: FAIL + + [paras[0\].parentNode.removeChild(paras[0\]), with selected range collapsed at (testDiv, 2)] + expected: FAIL + + [foreignDoc.documentElement.parentNode.removeChild(foreignDoc.documentElement), with selected range on foreignDoc from 0 to foreignDoc.childNodes.length] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/ranges/Range-mutations-replaceChild.html.ini b/tests/wpt/metadata/dom/ranges/Range-mutations-replaceChild.html.ini new file mode 100644 index 00000000000..46bed5e4565 --- /dev/null +++ b/tests/wpt/metadata/dom/ranges/Range-mutations-replaceChild.html.ini @@ -0,0 +1,92 @@ +[Range-mutations-replaceChild.html] + type: testharness + [testDiv.replaceChild(paras[0\], paras[0\]), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [testDiv.replaceChild(paras[0\], paras[0\]), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [testDiv.replaceChild(paras[0\], paras[0\]), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [testDiv.replaceChild(paras[0\], paras[0\]), with selected range on testDiv from 0 to 2] + expected: FAIL + + [testDiv.replaceChild(paras[0\], paras[0\]), with selected range collapsed at (testDiv, 1)] + expected: FAIL + + [testDiv.replaceChild(paras[0\], paras[0\]), with selected range on testDiv from 1 to 2] + expected: FAIL + + [testDiv.replaceChild(paras[0\], paras[0\]), with selected range collapsed at (testDiv, 2)] + expected: FAIL + + [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range on testDiv from 0 to 1] + expected: FAIL + + [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range on testDiv from 0 to 2] + expected: FAIL + + [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range collapsed at (testDiv, 1)] + expected: FAIL + + [paras[0\].replaceChild(paras[1\], paras[0\].firstChild), with selected range on testDiv from 1 to 2] + expected: FAIL + + [foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 0)] + expected: FAIL + + [foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 1] + expected: FAIL + + [foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 2] + expected: FAIL + + [foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 1)] + expected: FAIL + + [foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 0)] + expected: FAIL + + [foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 1] + expected: FAIL + + [foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 2] + expected: FAIL + + [foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 1)] + expected: FAIL + + [paras[0\].replaceChild(xmlTextNode, paras[0\].firstChild), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].replaceChild(xmlTextNode, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].replaceChild(xmlTextNode, paras[0\].firstChild), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].replaceChild(paras[0\], paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].replaceChild(testDiv, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].replaceChild(document, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].replaceChild(foreignDoc, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].replaceChild(document.doctype, paras[0\].firstChild), with selected range on paras[0\] from 0 to 1] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/ranges/Range-mutations-replaceData.html.ini b/tests/wpt/metadata/dom/ranges/Range-mutations-replaceData.html.ini new file mode 100644 index 00000000000..8d565de4cef --- /dev/null +++ b/tests/wpt/metadata/dom/ranges/Range-mutations-replaceData.html.ini @@ -0,0 +1,1721 @@ +[Range-mutations-replaceData.html] + type: testharness + [paras[0\].firstChild.replaceData(376, 0, "foo"), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.replaceData(0, 0, "foo"), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 0, "foo"), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 0, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 0, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(376, 0, ""), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.replaceData(0, 0, ""), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 0, ""), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 0, ""), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 0, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 0, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 0, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(376, 1, "foo"), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.replaceData(0, 1, "foo"), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 1, "foo"), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 1, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 1, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(376, 1, ""), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.replaceData(0, 1, ""), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 1, ""), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 1, ""), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 1, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 1, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 1, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(376, 47, "foo"), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.replaceData(0, 47, "foo"), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 47, "foo"), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 47, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 47, "foo"), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(376, 47, ""), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.replaceData(0, 47, ""), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 47, ""), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(paras[0\].firstChild.length, 47, ""), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 47, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 47, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 47, ""), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(376, 0, "foo"), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.replaceData(0, 0, "foo"), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 0, "foo"), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 0, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(2, 0, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(3, 0, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(376, 0, ""), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.replaceData(0, 0, ""), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 0, ""), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 0, ""), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 0, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(2, 0, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(3, 0, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(376, 1, "foo"), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.replaceData(0, 1, "foo"), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 1, "foo"), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 1, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(2, 1, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(3, 1, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(376, 1, ""), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.replaceData(0, 1, ""), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 1, ""), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 1, ""), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 1, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(2, 1, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(3, 1, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(376, 47, "foo"), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.replaceData(0, 47, "foo"), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 47, "foo"), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 47, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(2, 47, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(3, 47, "foo"), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(376, 47, ""), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.replaceData(0, 47, ""), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 47, ""), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.replaceData(paras[1\].firstChild.length, 47, ""), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.replaceData(1, 47, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(2, 47, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.replaceData(3, 47, ""), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(376, 0, "foo"), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.replaceData(foreignTextNode.length, 0, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.replaceData(1, 0, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(2, 0, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(3, 0, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(376, 0, ""), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.replaceData(0, 0, ""), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.replaceData(1, 0, ""), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.replaceData(foreignTextNode.length, 0, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.replaceData(1, 0, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(2, 0, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(3, 0, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(376, 1, "foo"), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.replaceData(foreignTextNode.length, 1, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.replaceData(1, 1, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(2, 1, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(3, 1, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(376, 1, ""), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.replaceData(0, 1, ""), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.replaceData(1, 1, ""), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.replaceData(foreignTextNode.length, 1, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.replaceData(1, 1, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(2, 1, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(3, 1, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(376, 47, "foo"), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.replaceData(foreignTextNode.length, 47, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.replaceData(1, 47, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(2, 47, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(3, 47, "foo"), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(376, 47, ""), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.replaceData(0, 47, ""), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.replaceData(1, 47, ""), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.replaceData(foreignTextNode.length, 47, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.replaceData(1, 47, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(2, 47, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.replaceData(3, 47, ""), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(376, 0, "foo"), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.replaceData(xmlTextNode.length, 0, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.replaceData(1, 0, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(2, 0, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(3, 0, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(376, 0, ""), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.replaceData(0, 0, ""), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.replaceData(1, 0, ""), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.replaceData(xmlTextNode.length, 0, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.replaceData(1, 0, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(2, 0, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(3, 0, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(376, 1, "foo"), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.replaceData(xmlTextNode.length, 1, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.replaceData(1, 1, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(2, 1, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(3, 1, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(376, 1, ""), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.replaceData(0, 1, ""), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.replaceData(1, 1, ""), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.replaceData(xmlTextNode.length, 1, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.replaceData(1, 1, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(2, 1, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(3, 1, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(376, 47, "foo"), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.replaceData(xmlTextNode.length, 47, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.replaceData(1, 47, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(2, 47, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(3, 47, "foo"), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(376, 47, ""), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.replaceData(0, 47, ""), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.replaceData(1, 47, ""), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.replaceData(xmlTextNode.length, 47, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.replaceData(1, 47, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(2, 47, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.replaceData(3, 47, ""), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(376, 0, "foo"), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.replaceData(detachedTextNode.length, 0, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.replaceData(1, 0, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(2, 0, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(3, 0, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(376, 0, ""), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.replaceData(0, 0, ""), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.replaceData(1, 0, ""), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.replaceData(detachedTextNode.length, 0, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.replaceData(1, 0, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(2, 0, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(3, 0, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(376, 1, "foo"), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.replaceData(detachedTextNode.length, 1, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.replaceData(1, 1, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(2, 1, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(3, 1, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(376, 1, ""), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.replaceData(0, 1, ""), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.replaceData(1, 1, ""), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.replaceData(detachedTextNode.length, 1, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.replaceData(1, 1, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(2, 1, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(3, 1, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(376, 47, "foo"), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.replaceData(detachedTextNode.length, 47, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.replaceData(1, 47, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(2, 47, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(3, 47, "foo"), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(376, 47, ""), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.replaceData(0, 47, ""), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.replaceData(1, 47, ""), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.replaceData(detachedTextNode.length, 47, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.replaceData(1, 47, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(2, 47, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.replaceData(3, 47, ""), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(376, 0, "foo"), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 0, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 0, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(2, 0, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(3, 0, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(376, 0, ""), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.replaceData(0, 0, ""), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 0, ""), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 0, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 0, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(2, 0, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(3, 0, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(376, 1, "foo"), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 1, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 1, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(2, 1, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(3, 1, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(376, 1, ""), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.replaceData(0, 1, ""), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 1, ""), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 1, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 1, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(2, 1, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(3, 1, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(376, 47, "foo"), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 47, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 47, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(2, 47, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(3, 47, "foo"), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(376, 47, ""), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.replaceData(0, 47, ""), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 47, ""), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 47, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.replaceData(1, 47, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(2, 47, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.replaceData(3, 47, ""), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(376, 0, "foo"), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 0, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 0, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(2, 0, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(3, 0, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(376, 0, ""), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.replaceData(0, 0, ""), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 0, ""), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 0, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 0, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(2, 0, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(3, 0, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(376, 1, "foo"), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 1, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 1, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(2, 1, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(3, 1, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(376, 1, ""), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.replaceData(0, 1, ""), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 1, ""), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 1, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 1, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(2, 1, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(3, 1, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(376, 47, "foo"), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 47, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 47, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(2, 47, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(3, 47, "foo"), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(376, 47, ""), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.replaceData(0, 47, ""), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 47, ""), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 47, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.replaceData(1, 47, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(2, 47, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.replaceData(3, 47, ""), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [comment.replaceData(376, 0, "foo"), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.replaceData(0, 0, "foo"), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.replaceData(1, 0, "foo"), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.replaceData(comment.length, 0, "foo"), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.replaceData(1, 0, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(2, 0, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(3, 0, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(376, 0, ""), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.replaceData(0, 0, ""), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.replaceData(1, 0, ""), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.replaceData(comment.length, 0, ""), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.replaceData(1, 0, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(2, 0, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(3, 0, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(376, 1, "foo"), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.replaceData(0, 1, "foo"), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.replaceData(1, 1, "foo"), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.replaceData(comment.length, 1, "foo"), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.replaceData(1, 1, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(2, 1, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(3, 1, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(376, 1, ""), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.replaceData(0, 1, ""), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.replaceData(1, 1, ""), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.replaceData(comment.length, 1, ""), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.replaceData(1, 1, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(2, 1, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(3, 1, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(376, 47, "foo"), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.replaceData(0, 47, "foo"), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.replaceData(1, 47, "foo"), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.replaceData(comment.length, 47, "foo"), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.replaceData(1, 47, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(2, 47, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(3, 47, "foo"), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(376, 47, ""), with selected range on comment from 0 to 1] + expected: FAIL + + [comment.replaceData(0, 47, ""), with selected range collapsed at (comment, 0)] + expected: FAIL + + [comment.replaceData(1, 47, ""), with selected range collapsed at (comment, 1)] + expected: FAIL + + [comment.replaceData(comment.length, 47, ""), with selected range collapsed at (comment, comment.length)] + expected: FAIL + + [comment.replaceData(1, 47, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(2, 47, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [comment.replaceData(3, 47, ""), with selected range on comment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(376, 0, "foo"), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.replaceData(0, 0, "foo"), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.replaceData(1, 0, "foo"), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.replaceData(foreignComment.length, 0, "foo"), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.replaceData(1, 0, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(2, 0, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(3, 0, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(376, 0, ""), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.replaceData(0, 0, ""), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.replaceData(1, 0, ""), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.replaceData(foreignComment.length, 0, ""), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.replaceData(1, 0, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(2, 0, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(3, 0, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(376, 1, "foo"), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.replaceData(0, 1, "foo"), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.replaceData(1, 1, "foo"), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.replaceData(foreignComment.length, 1, "foo"), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.replaceData(1, 1, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(2, 1, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(3, 1, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(376, 1, ""), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.replaceData(0, 1, ""), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.replaceData(1, 1, ""), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.replaceData(foreignComment.length, 1, ""), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.replaceData(1, 1, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(2, 1, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(3, 1, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(376, 47, "foo"), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.replaceData(0, 47, "foo"), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.replaceData(1, 47, "foo"), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.replaceData(foreignComment.length, 47, "foo"), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.replaceData(1, 47, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(2, 47, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(3, 47, "foo"), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(376, 47, ""), with selected range on foreignComment from 0 to 1] + expected: FAIL + + [foreignComment.replaceData(0, 47, ""), with selected range collapsed at (foreignComment, 0)] + expected: FAIL + + [foreignComment.replaceData(1, 47, ""), with selected range collapsed at (foreignComment, 1)] + expected: FAIL + + [foreignComment.replaceData(foreignComment.length, 47, ""), with selected range collapsed at (foreignComment, foreignComment.length)] + expected: FAIL + + [foreignComment.replaceData(1, 47, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(2, 47, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [foreignComment.replaceData(3, 47, ""), with selected range on foreignComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(376, 0, "foo"), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.replaceData(0, 0, "foo"), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.replaceData(1, 0, "foo"), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.replaceData(xmlComment.length, 0, "foo"), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.replaceData(1, 0, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(2, 0, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(3, 0, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(376, 0, ""), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.replaceData(0, 0, ""), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.replaceData(1, 0, ""), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.replaceData(xmlComment.length, 0, ""), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.replaceData(1, 0, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(2, 0, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(3, 0, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(376, 1, "foo"), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.replaceData(0, 1, "foo"), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.replaceData(1, 1, "foo"), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.replaceData(xmlComment.length, 1, "foo"), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.replaceData(1, 1, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(2, 1, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(3, 1, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(376, 1, ""), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.replaceData(0, 1, ""), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.replaceData(1, 1, ""), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.replaceData(xmlComment.length, 1, ""), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.replaceData(1, 1, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(2, 1, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(3, 1, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(376, 47, "foo"), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.replaceData(0, 47, "foo"), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.replaceData(1, 47, "foo"), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.replaceData(xmlComment.length, 47, "foo"), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.replaceData(1, 47, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(2, 47, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(3, 47, "foo"), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(376, 47, ""), with selected range on xmlComment from 0 to 1] + expected: FAIL + + [xmlComment.replaceData(0, 47, ""), with selected range collapsed at (xmlComment, 0)] + expected: FAIL + + [xmlComment.replaceData(1, 47, ""), with selected range collapsed at (xmlComment, 1)] + expected: FAIL + + [xmlComment.replaceData(xmlComment.length, 47, ""), with selected range collapsed at (xmlComment, xmlComment.length)] + expected: FAIL + + [xmlComment.replaceData(1, 47, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(2, 47, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [xmlComment.replaceData(3, 47, ""), with selected range on xmlComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(376, 0, "foo"), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.replaceData(0, 0, "foo"), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.replaceData(1, 0, "foo"), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.replaceData(detachedComment.length, 0, "foo"), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.replaceData(1, 0, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(2, 0, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(3, 0, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(376, 0, ""), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.replaceData(0, 0, ""), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.replaceData(1, 0, ""), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.replaceData(detachedComment.length, 0, ""), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.replaceData(1, 0, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(2, 0, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(3, 0, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(376, 1, "foo"), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.replaceData(0, 1, "foo"), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.replaceData(1, 1, "foo"), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.replaceData(detachedComment.length, 1, "foo"), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.replaceData(1, 1, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(2, 1, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(3, 1, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(376, 1, ""), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.replaceData(0, 1, ""), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.replaceData(1, 1, ""), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.replaceData(detachedComment.length, 1, ""), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.replaceData(1, 1, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(2, 1, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(3, 1, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(376, 47, "foo"), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.replaceData(0, 47, "foo"), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.replaceData(1, 47, "foo"), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.replaceData(detachedComment.length, 47, "foo"), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.replaceData(1, 47, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(2, 47, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(3, 47, "foo"), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(376, 47, ""), with selected range on detachedComment from 0 to 1] + expected: FAIL + + [detachedComment.replaceData(0, 47, ""), with selected range collapsed at (detachedComment, 0)] + expected: FAIL + + [detachedComment.replaceData(1, 47, ""), with selected range collapsed at (detachedComment, 1)] + expected: FAIL + + [detachedComment.replaceData(detachedComment.length, 47, ""), with selected range collapsed at (detachedComment, detachedComment.length)] + expected: FAIL + + [detachedComment.replaceData(1, 47, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(2, 47, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedComment.replaceData(3, 47, ""), with selected range on detachedComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(376, 0, "foo"), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.replaceData(0, 0, "foo"), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 0, "foo"), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.replaceData(detachedForeignComment.length, 0, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 0, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(2, 0, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(3, 0, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(376, 0, ""), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.replaceData(0, 0, ""), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 0, ""), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.replaceData(detachedForeignComment.length, 0, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 0, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(2, 0, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(3, 0, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(376, 1, "foo"), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.replaceData(0, 1, "foo"), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 1, "foo"), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.replaceData(detachedForeignComment.length, 1, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 1, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(2, 1, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(3, 1, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(376, 1, ""), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.replaceData(0, 1, ""), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 1, ""), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.replaceData(detachedForeignComment.length, 1, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 1, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(2, 1, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(3, 1, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(376, 47, "foo"), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.replaceData(0, 47, "foo"), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 47, "foo"), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.replaceData(detachedForeignComment.length, 47, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 47, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(2, 47, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(3, 47, "foo"), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(376, 47, ""), with selected range on detachedForeignComment from 0 to 1] + expected: FAIL + + [detachedForeignComment.replaceData(0, 47, ""), with selected range collapsed at (detachedForeignComment, 0)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 47, ""), with selected range collapsed at (detachedForeignComment, 1)] + expected: FAIL + + [detachedForeignComment.replaceData(detachedForeignComment.length, 47, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length)] + expected: FAIL + + [detachedForeignComment.replaceData(1, 47, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(2, 47, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedForeignComment.replaceData(3, 47, ""), with selected range on detachedForeignComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(376, 0, "foo"), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.replaceData(0, 0, "foo"), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 0, "foo"), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.replaceData(detachedXmlComment.length, 0, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 0, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(2, 0, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(3, 0, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(376, 0, ""), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.replaceData(0, 0, ""), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 0, ""), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.replaceData(detachedXmlComment.length, 0, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 0, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(2, 0, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(3, 0, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(376, 1, "foo"), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.replaceData(0, 1, "foo"), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 1, "foo"), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.replaceData(detachedXmlComment.length, 1, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 1, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(2, 1, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(3, 1, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(376, 1, ""), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.replaceData(0, 1, ""), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 1, ""), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.replaceData(detachedXmlComment.length, 1, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 1, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(2, 1, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(3, 1, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(376, 47, "foo"), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.replaceData(0, 47, "foo"), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 47, "foo"), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.replaceData(detachedXmlComment.length, 47, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 47, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(2, 47, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(3, 47, "foo"), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(376, 47, ""), with selected range on detachedXmlComment from 0 to 1] + expected: FAIL + + [detachedXmlComment.replaceData(0, 47, ""), with selected range collapsed at (detachedXmlComment, 0)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 47, ""), with selected range collapsed at (detachedXmlComment, 1)] + expected: FAIL + + [detachedXmlComment.replaceData(detachedXmlComment.length, 47, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length)] + expected: FAIL + + [detachedXmlComment.replaceData(1, 47, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(2, 47, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [detachedXmlComment.replaceData(3, 47, ""), with selected range on detachedXmlComment from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 0, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 0, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 0, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 0, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 0, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 1, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 1, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 1, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 1, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 1, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 47, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 47, "foo"), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.replaceData(1, 47, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.replaceData(2, 47, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.replaceData(3, 47, "foo"), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/ranges/Range-mutations-splitText.html.ini b/tests/wpt/metadata/dom/ranges/Range-mutations-splitText.html.ini new file mode 100644 index 00000000000..efb3dd56e35 --- /dev/null +++ b/tests/wpt/metadata/dom/ranges/Range-mutations-splitText.html.ini @@ -0,0 +1,176 @@ +[Range-mutations-splitText.html] + type: testharness + [paras[0\].firstChild.splitText(376), with selected range on paras[0\].firstChild from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.splitText(0), with selected range collapsed at (paras[0\].firstChild, 0)] + expected: FAIL + + [paras[0\].firstChild.splitText(1), with selected range collapsed at (paras[0\].firstChild, 1)] + expected: FAIL + + [paras[0\].firstChild.splitText(paras[0\].firstChild.length), with selected range collapsed at (paras[0\].firstChild, paras[0\].firstChild.length)] + expected: FAIL + + [paras[0\].firstChild.splitText(1), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.splitText(2), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.splitText(3), with selected range on paras[0\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.splitText(376), with selected range on paras[1\].firstChild from 0 to 1] + expected: FAIL + + [paras[1\].firstChild.splitText(0), with selected range collapsed at (paras[1\].firstChild, 0)] + expected: FAIL + + [paras[1\].firstChild.splitText(1), with selected range collapsed at (paras[1\].firstChild, 1)] + expected: FAIL + + [paras[1\].firstChild.splitText(paras[1\].firstChild.length), with selected range collapsed at (paras[1\].firstChild, paras[1\].firstChild.length)] + expected: FAIL + + [paras[1\].firstChild.splitText(1), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.splitText(2), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [paras[1\].firstChild.splitText(3), with selected range on paras[1\].firstChild from 1 to 3] + expected: FAIL + + [foreignTextNode.splitText(376), with selected range on foreignTextNode from 0 to 1] + expected: FAIL + + [foreignTextNode.splitText(0), with selected range collapsed at (foreignTextNode, 0)] + expected: FAIL + + [foreignTextNode.splitText(1), with selected range collapsed at (foreignTextNode, 1)] + expected: FAIL + + [foreignTextNode.splitText(foreignTextNode.length), with selected range collapsed at (foreignTextNode, foreignTextNode.length)] + expected: FAIL + + [foreignTextNode.splitText(1), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.splitText(2), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [foreignTextNode.splitText(3), with selected range on foreignTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.splitText(376), with selected range on xmlTextNode from 0 to 1] + expected: FAIL + + [xmlTextNode.splitText(0), with selected range collapsed at (xmlTextNode, 0)] + expected: FAIL + + [xmlTextNode.splitText(1), with selected range collapsed at (xmlTextNode, 1)] + expected: FAIL + + [xmlTextNode.splitText(xmlTextNode.length), with selected range collapsed at (xmlTextNode, xmlTextNode.length)] + expected: FAIL + + [xmlTextNode.splitText(1), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.splitText(2), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [xmlTextNode.splitText(3), with selected range on xmlTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.splitText(376), with selected range on detachedTextNode from 0 to 1] + expected: FAIL + + [detachedTextNode.splitText(0), with selected range collapsed at (detachedTextNode, 0)] + expected: FAIL + + [detachedTextNode.splitText(1), with selected range collapsed at (detachedTextNode, 1)] + expected: FAIL + + [detachedTextNode.splitText(detachedTextNode.length), with selected range collapsed at (detachedTextNode, detachedTextNode.length)] + expected: FAIL + + [detachedTextNode.splitText(1), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.splitText(2), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedTextNode.splitText(3), with selected range on detachedTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.splitText(376), with selected range on detachedForeignTextNode from 0 to 1] + expected: FAIL + + [detachedForeignTextNode.splitText(0), with selected range collapsed at (detachedForeignTextNode, 0)] + expected: FAIL + + [detachedForeignTextNode.splitText(1), with selected range collapsed at (detachedForeignTextNode, 1)] + expected: FAIL + + [detachedForeignTextNode.splitText(detachedForeignTextNode.length), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)] + expected: FAIL + + [detachedForeignTextNode.splitText(1), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.splitText(2), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedForeignTextNode.splitText(3), with selected range on detachedForeignTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.splitText(376), with selected range on detachedXmlTextNode from 0 to 1] + expected: FAIL + + [detachedXmlTextNode.splitText(0), with selected range collapsed at (detachedXmlTextNode, 0)] + expected: FAIL + + [detachedXmlTextNode.splitText(1), with selected range collapsed at (detachedXmlTextNode, 1)] + expected: FAIL + + [detachedXmlTextNode.splitText(detachedXmlTextNode.length), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)] + expected: FAIL + + [detachedXmlTextNode.splitText(1), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.splitText(2), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [detachedXmlTextNode.splitText(3), with selected range on detachedXmlTextNode from 1 to 3] + expected: FAIL + + [paras[0\].firstChild.splitText(1), with selected range collapsed at (paras[0\], 0)] + expected: FAIL + + [paras[0\].firstChild.splitText(1), with selected range on paras[0\] from 0 to 1] + expected: FAIL + + [paras[0\].firstChild.splitText(1), with selected range collapsed at (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.splitText(1), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.splitText(2), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.splitText(3), with selected range from (paras[0\].firstChild, 1) to (paras[0\], 1)] + expected: FAIL + + [paras[0\].firstChild.splitText(1), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.splitText(2), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + + [paras[0\].firstChild.splitText(3), with selected range from (paras[0\], 0) to (paras[0\].firstChild, 3)] + expected: FAIL + diff --git a/tests/wpt/metadata/domparsing/createContextualFragment.html.ini b/tests/wpt/metadata/domparsing/createContextualFragment.html.ini index 7e563a9b869..7602299fb12 100644 --- a/tests/wpt/metadata/domparsing/createContextualFragment.html.ini +++ b/tests/wpt/metadata/domparsing/createContextualFragment.html.ini @@ -9,3 +9,6 @@ [ in a different namespace shouldn't be special] expected: FAIL + [SVG namespace shouldn't be special] + expected: FAIL + diff --git a/tests/wpt/metadata/domparsing/innerhtml-02.html.ini b/tests/wpt/metadata/domparsing/innerhtml-02.html.ini deleted file mode 100644 index 6528bc716b8..00000000000 --- a/tests/wpt/metadata/domparsing/innerhtml-02.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[innerhtml-02.html] - type: testharness - [Expected innerHTML: "<" for xmp.] - expected: FAIL - diff --git a/tests/wpt/metadata/encoding/textdecoder-fatal-single-byte.html.ini b/tests/wpt/metadata/encoding/textdecoder-fatal-single-byte.html.ini new file mode 100644 index 00000000000..34e966e4e73 --- /dev/null +++ b/tests/wpt/metadata/encoding/textdecoder-fatal-single-byte.html.ini @@ -0,0 +1,5 @@ +[textdecoder-fatal-single-byte.html] + type: testharness + [Not throw: windows-1255 has a pointer 202] + expected: FAIL + diff --git a/tests/wpt/metadata/eventsource/eventsource-onmessage-realm.htm.ini b/tests/wpt/metadata/eventsource/eventsource-onmessage-realm.htm.ini new file mode 100644 index 00000000000..852a78fd8ce --- /dev/null +++ b/tests/wpt/metadata/eventsource/eventsource-onmessage-realm.htm.ini @@ -0,0 +1,5 @@ +[eventsource-onmessage-realm.htm] + type: testharness + [the MessageEvent must be created in the Realm of the EventSource] + expected: FAIL + diff --git a/tests/wpt/metadata/eventsource/interfaces.html.ini b/tests/wpt/metadata/eventsource/interfaces.html.ini index 99706ee7d67..66e64261789 100644 --- a/tests/wpt/metadata/eventsource/interfaces.html.ini +++ b/tests/wpt/metadata/eventsource/interfaces.html.ini @@ -8,3 +8,4 @@ [Stringification of new EventSource("http://foo")] expected: FAIL + diff --git a/tests/wpt/metadata/eventsource/request-cache-control.htm.ini b/tests/wpt/metadata/eventsource/request-cache-control.htm.ini index 9d7703c7521..5e79e2360a7 100644 --- a/tests/wpt/metadata/eventsource/request-cache-control.htm.ini +++ b/tests/wpt/metadata/eventsource/request-cache-control.htm.ini @@ -6,3 +6,4 @@ [EventSource: Cache-Control 1] expected: TIMEOUT + diff --git a/tests/wpt/metadata/fetch/api/basic/conditional-get.html.ini b/tests/wpt/metadata/fetch/api/basic/conditional-get.html.ini new file mode 100644 index 00000000000..ea1384f3fab --- /dev/null +++ b/tests/wpt/metadata/fetch/api/basic/conditional-get.html.ini @@ -0,0 +1,5 @@ +[conditional-get.html] + type: testharness + [Testing conditional GET with ETags] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/error-after-response.html.ini b/tests/wpt/metadata/fetch/api/basic/error-after-response.html.ini new file mode 100644 index 00000000000..3bde546c958 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/basic/error-after-response.html.ini @@ -0,0 +1,8 @@ +[error-after-response.html] + type: testharness + [Response reader read() promise should reject after a network error happening after resolving fetch promise] + expected: FAIL + + [Response reader closed promise should reject after a network error happening after resolving fetch promise] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/integrity-sharedworker.html.ini b/tests/wpt/metadata/fetch/api/basic/integrity-sharedworker.html.ini new file mode 100644 index 00000000000..674933e884c --- /dev/null +++ b/tests/wpt/metadata/fetch/api/basic/integrity-sharedworker.html.ini @@ -0,0 +1,3 @@ +[integrity-sharedworker.html] + type: testharness + expected: ERROR diff --git a/tests/wpt/metadata/fetch/api/basic/request-headers-worker.html.ini b/tests/wpt/metadata/fetch/api/basic/request-headers-worker.html.ini index d301daf8a17..4c228581bae 100644 --- a/tests/wpt/metadata/fetch/api/basic/request-headers-worker.html.ini +++ b/tests/wpt/metadata/fetch/api/basic/request-headers-worker.html.ini @@ -51,3 +51,6 @@ [Fetch with Chicken with body] expected: FAIL + [Fetch with POST with URLSearchParams body] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/request-headers.html.ini b/tests/wpt/metadata/fetch/api/basic/request-headers.html.ini index 62c74c222f0..4361ade4d59 100644 --- a/tests/wpt/metadata/fetch/api/basic/request-headers.html.ini +++ b/tests/wpt/metadata/fetch/api/basic/request-headers.html.ini @@ -51,3 +51,6 @@ [Fetch with Chicken with body] expected: FAIL + [Fetch with POST with URLSearchParams body] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/request-upload-worker.html.ini b/tests/wpt/metadata/fetch/api/basic/request-upload-worker.html.ini new file mode 100644 index 00000000000..9ce17b3eafe --- /dev/null +++ b/tests/wpt/metadata/fetch/api/basic/request-upload-worker.html.ini @@ -0,0 +1,20 @@ +[request-upload-worker.html] + type: testharness + [Fetch with POST with ArrayBuffer body] + expected: FAIL + + [Fetch with POST with Uint8Array body] + expected: FAIL + + [Fetch with POST with Int8Array body] + expected: FAIL + + [Fetch with POST with Float32Array body] + expected: FAIL + + [Fetch with POST with Float64Array body] + expected: FAIL + + [Fetch with POST with DataView body] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/request-upload.html.ini b/tests/wpt/metadata/fetch/api/basic/request-upload.html.ini new file mode 100644 index 00000000000..31957e3a0c9 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/basic/request-upload.html.ini @@ -0,0 +1,20 @@ +[request-upload.html] + type: testharness + [Fetch with POST with ArrayBuffer body] + expected: FAIL + + [Fetch with POST with Uint8Array body] + expected: FAIL + + [Fetch with POST with Int8Array body] + expected: FAIL + + [Fetch with POST with Float32Array body] + expected: FAIL + + [Fetch with POST with Float64Array body] + expected: FAIL + + [Fetch with POST with DataView body] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/scheme-data-worker.html.ini b/tests/wpt/metadata/fetch/api/basic/scheme-data-worker.html.ini index 07bdf4caaaa..d025cd9bfee 100644 --- a/tests/wpt/metadata/fetch/api/basic/scheme-data-worker.html.ini +++ b/tests/wpt/metadata/fetch/api/basic/scheme-data-worker.html.ini @@ -15,3 +15,9 @@ [Fetching data:image/png;base64,cmVzcG9uc2UncyBib2[...\] is OK] expected: FAIL + [Fetching [POST\] data:,response%27s%20body is OK] + expected: FAIL + + [Fetching [HEAD\] data:,response%27s%20body is OK] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/scheme-data.html.ini b/tests/wpt/metadata/fetch/api/basic/scheme-data.html.ini index 2e78bab0e48..f69b8bea324 100644 --- a/tests/wpt/metadata/fetch/api/basic/scheme-data.html.ini +++ b/tests/wpt/metadata/fetch/api/basic/scheme-data.html.ini @@ -15,3 +15,9 @@ [Fetching data:image/png;base64,cmVzcG9uc2UncyBib2[...\] is OK] expected: FAIL + [Fetching [POST\] data:,response%27s%20body is OK] + expected: FAIL + + [Fetching [HEAD\] data:,response%27s%20body is OK] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/text-utf8.html.ini b/tests/wpt/metadata/fetch/api/basic/text-utf8.html.ini index 1bdc4f3f39d..890e7cd7f3c 100644 --- a/tests/wpt/metadata/fetch/api/basic/text-utf8.html.ini +++ b/tests/wpt/metadata/fetch/api/basic/text-utf8.html.ini @@ -36,3 +36,33 @@ [UTF-16 without BOM decoded as UTF-8 with Response.text()] expected: FAIL + [UTF-8 with BOM (Response object)] + expected: FAIL + + [UTF-8 with BOM (Request object)] + expected: FAIL + + [UTF-8 without BOM (Response object)] + expected: FAIL + + [UTF-8 without BOM (Request object)] + expected: FAIL + + [UTF-16BE with BOM decoded as UTF-8 (Response object)] + expected: FAIL + + [UTF-16BE with BOM decoded as UTF-8 (Request object)] + expected: FAIL + + [UTF-16LE with BOM decoded as UTF-8 (Response object)] + expected: FAIL + + [UTF-16LE with BOM decoded as UTF-8 (Request object)] + expected: FAIL + + [UTF-16 without BOM decoded as UTF-8 (Response object)] + expected: FAIL + + [UTF-16 without BOM decoded as UTF-8 (Request object)] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-cookies-worker.html.ini b/tests/wpt/metadata/fetch/api/cors/cors-cookies-worker.html.ini index b920d985715..ebbfb60928d 100644 --- a/tests/wpt/metadata/fetch/api/cors/cors-cookies-worker.html.ini +++ b/tests/wpt/metadata/fetch/api/cors/cors-cookies-worker.html.ini @@ -8,3 +8,4 @@ [Same-origin mode: cookies are discarded in cors request] expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-cookies.html.ini b/tests/wpt/metadata/fetch/api/cors/cors-cookies.html.ini index be7b5c4ef84..a33b5f832b1 100644 --- a/tests/wpt/metadata/fetch/api/cors/cors-cookies.html.ini +++ b/tests/wpt/metadata/fetch/api/cors/cors-cookies.html.ini @@ -8,3 +8,4 @@ [Same-origin mode: cookies are discarded in cors request] expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-preflight-redirect-worker.html.ini b/tests/wpt/metadata/fetch/api/cors/cors-preflight-redirect-worker.html.ini new file mode 100644 index 00000000000..a067c067a2a --- /dev/null +++ b/tests/wpt/metadata/fetch/api/cors/cors-preflight-redirect-worker.html.ini @@ -0,0 +1,32 @@ +[cors-preflight-redirect-worker.html] + type: testharness + [Redirection 301 on preflight failed] + expected: FAIL + + [Redirection 301 after preflight failed] + expected: FAIL + + [Redirection 302 on preflight failed] + expected: FAIL + + [Redirection 302 after preflight failed] + expected: FAIL + + [Redirection 303 on preflight failed] + expected: FAIL + + [Redirection 303 after preflight failed] + expected: FAIL + + [Redirection 307 on preflight failed] + expected: FAIL + + [Redirection 307 after preflight failed] + expected: FAIL + + [Redirection 308 on preflight failed] + expected: FAIL + + [Redirection 308 after preflight failed] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-preflight-redirect.html.ini b/tests/wpt/metadata/fetch/api/cors/cors-preflight-redirect.html.ini new file mode 100644 index 00000000000..e5b48918e8e --- /dev/null +++ b/tests/wpt/metadata/fetch/api/cors/cors-preflight-redirect.html.ini @@ -0,0 +1,32 @@ +[cors-preflight-redirect.html] + type: testharness + [Redirection 301 on preflight failed] + expected: FAIL + + [Redirection 301 after preflight failed] + expected: FAIL + + [Redirection 302 on preflight failed] + expected: FAIL + + [Redirection 302 after preflight failed] + expected: FAIL + + [Redirection 303 on preflight failed] + expected: FAIL + + [Redirection 303 after preflight failed] + expected: FAIL + + [Redirection 307 on preflight failed] + expected: FAIL + + [Redirection 307 after preflight failed] + expected: FAIL + + [Redirection 308 on preflight failed] + expected: FAIL + + [Redirection 308 after preflight failed] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-preflight-status-worker.html.ini b/tests/wpt/metadata/fetch/api/cors/cors-preflight-status-worker.html.ini new file mode 100644 index 00000000000..9f9d2eab795 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/cors/cors-preflight-status-worker.html.ini @@ -0,0 +1,83 @@ +[cors-preflight-status-worker.html] + type: testharness + [Preflight answered with status 200] + expected: FAIL + + [Preflight answered with status 201] + expected: FAIL + + [Preflight answered with status 202] + expected: FAIL + + [Preflight answered with status 203] + expected: FAIL + + [Preflight answered with status 204] + expected: FAIL + + [Preflight answered with status 205] + expected: FAIL + + [Preflight answered with status 206] + expected: FAIL + + [Preflight answered with status 300] + expected: FAIL + + [Preflight answered with status 301] + expected: FAIL + + [Preflight answered with status 302] + expected: FAIL + + [Preflight answered with status 303] + expected: FAIL + + [Preflight answered with status 304] + expected: FAIL + + [Preflight answered with status 305] + expected: FAIL + + [Preflight answered with status 306] + expected: FAIL + + [Preflight answered with status 307] + expected: FAIL + + [Preflight answered with status 308] + expected: FAIL + + [Preflight answered with status 400] + expected: FAIL + + [Preflight answered with status 401] + expected: FAIL + + [Preflight answered with status 402] + expected: FAIL + + [Preflight answered with status 403] + expected: FAIL + + [Preflight answered with status 404] + expected: FAIL + + [Preflight answered with status 405] + expected: FAIL + + [Preflight answered with status 501] + expected: FAIL + + [Preflight answered with status 502] + expected: FAIL + + [Preflight answered with status 503] + expected: FAIL + + [Preflight answered with status 504] + expected: FAIL + + [Preflight answered with status 505] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-preflight-status.html.ini b/tests/wpt/metadata/fetch/api/cors/cors-preflight-status.html.ini new file mode 100644 index 00000000000..12bb9ecf2e1 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/cors/cors-preflight-status.html.ini @@ -0,0 +1,83 @@ +[cors-preflight-status.html] + type: testharness + [Preflight answered with status 200] + expected: FAIL + + [Preflight answered with status 201] + expected: FAIL + + [Preflight answered with status 202] + expected: FAIL + + [Preflight answered with status 203] + expected: FAIL + + [Preflight answered with status 204] + expected: FAIL + + [Preflight answered with status 205] + expected: FAIL + + [Preflight answered with status 206] + expected: FAIL + + [Preflight answered with status 300] + expected: FAIL + + [Preflight answered with status 301] + expected: FAIL + + [Preflight answered with status 302] + expected: FAIL + + [Preflight answered with status 303] + expected: FAIL + + [Preflight answered with status 304] + expected: FAIL + + [Preflight answered with status 305] + expected: FAIL + + [Preflight answered with status 306] + expected: FAIL + + [Preflight answered with status 307] + expected: FAIL + + [Preflight answered with status 308] + expected: FAIL + + [Preflight answered with status 400] + expected: FAIL + + [Preflight answered with status 401] + expected: FAIL + + [Preflight answered with status 402] + expected: FAIL + + [Preflight answered with status 403] + expected: FAIL + + [Preflight answered with status 404] + expected: FAIL + + [Preflight answered with status 405] + expected: FAIL + + [Preflight answered with status 501] + expected: FAIL + + [Preflight answered with status 502] + expected: FAIL + + [Preflight answered with status 503] + expected: FAIL + + [Preflight answered with status 504] + expected: FAIL + + [Preflight answered with status 505] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-redirect-worker.html.ini b/tests/wpt/metadata/fetch/api/cors/cors-redirect-worker.html.ini new file mode 100644 index 00000000000..ced8e7f37ab --- /dev/null +++ b/tests/wpt/metadata/fetch/api/cors/cors-redirect-worker.html.ini @@ -0,0 +1,63 @@ +[cors-redirect-worker.html] + type: testharness + expected: TIMEOUT + [Redirect 301: cors to same cors] + expected: FAIL + + [Redirect 301: cors to another cors] + expected: FAIL + + [Redirect 301: same origin to cors] + expected: FAIL + + [Redirect 301: cors to same origin] + expected: FAIL + + [Redirect 302: cors to same cors] + expected: FAIL + + [Redirect 302: cors to another cors] + expected: FAIL + + [Redirect 302: same origin to cors] + expected: FAIL + + [Redirect 302: cors to same origin] + expected: FAIL + + [Redirect 303: cors to same cors] + expected: FAIL + + [Redirect 303: cors to another cors] + expected: FAIL + + [Redirect 303: same origin to cors] + expected: FAIL + + [Redirect 303: cors to same origin] + expected: FAIL + + [Redirect 307: cors to same cors] + expected: FAIL + + [Redirect 307: cors to another cors] + expected: FAIL + + [Redirect 307: same origin to cors] + expected: TIMEOUT + + [Redirect 307: cors to same origin] + expected: NOTRUN + + [Redirect 308: cors to same cors] + expected: NOTRUN + + [Redirect 308: cors to another cors] + expected: NOTRUN + + [Redirect 308: same origin to cors] + expected: NOTRUN + + [Redirect 308: cors to same origin] + expected: NOTRUN + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-redirect.html.ini b/tests/wpt/metadata/fetch/api/cors/cors-redirect.html.ini new file mode 100644 index 00000000000..e3de8b28925 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/cors/cors-redirect.html.ini @@ -0,0 +1,63 @@ +[cors-redirect.html] + type: testharness + expected: TIMEOUT + [Redirect 301: cors to same cors] + expected: FAIL + + [Redirect 301: cors to another cors] + expected: FAIL + + [Redirect 301: same origin to cors] + expected: FAIL + + [Redirect 301: cors to same origin] + expected: FAIL + + [Redirect 302: cors to same cors] + expected: FAIL + + [Redirect 302: cors to another cors] + expected: FAIL + + [Redirect 302: same origin to cors] + expected: FAIL + + [Redirect 302: cors to same origin] + expected: FAIL + + [Redirect 303: cors to same cors] + expected: FAIL + + [Redirect 303: cors to another cors] + expected: FAIL + + [Redirect 303: same origin to cors] + expected: FAIL + + [Redirect 303: cors to same origin] + expected: FAIL + + [Redirect 307: cors to same cors] + expected: FAIL + + [Redirect 307: cors to another cors] + expected: FAIL + + [Redirect 307: same origin to cors] + expected: TIMEOUT + + [Redirect 307: cors to same origin] + expected: NOTRUN + + [Redirect 308: cors to same cors] + expected: NOTRUN + + [Redirect 308: cors to another cors] + expected: NOTRUN + + [Redirect 308: same origin to cors] + expected: NOTRUN + + [Redirect 308: cors to same origin] + expected: NOTRUN + diff --git a/tests/wpt/metadata/fetch/api/redirect/redirect-count-worker.html.ini b/tests/wpt/metadata/fetch/api/redirect/redirect-count-worker.html.ini new file mode 100644 index 00000000000..8f5fe17b1b8 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/redirect/redirect-count-worker.html.ini @@ -0,0 +1,27 @@ +[redirect-count-worker.html] + type: testharness + expected: TIMEOUT + [Redirect 302 20 times] + expected: TIMEOUT + + [Redirect 302 21 times] + expected: NOTRUN + + [Redirect 303 20 times] + expected: NOTRUN + + [Redirect 303 21 times] + expected: NOTRUN + + [Redirect 307 20 times] + expected: NOTRUN + + [Redirect 307 21 times] + expected: NOTRUN + + [Redirect 308 20 times] + expected: NOTRUN + + [Redirect 308 21 times] + expected: NOTRUN + diff --git a/tests/wpt/metadata/fetch/api/redirect/redirect-count.html.ini b/tests/wpt/metadata/fetch/api/redirect/redirect-count.html.ini new file mode 100644 index 00000000000..af1fb8a4e4d --- /dev/null +++ b/tests/wpt/metadata/fetch/api/redirect/redirect-count.html.ini @@ -0,0 +1,27 @@ +[redirect-count.html] + type: testharness + expected: TIMEOUT + [Redirect 302 20 times] + expected: TIMEOUT + + [Redirect 302 21 times] + expected: NOTRUN + + [Redirect 303 20 times] + expected: NOTRUN + + [Redirect 303 21 times] + expected: NOTRUN + + [Redirect 307 20 times] + expected: NOTRUN + + [Redirect 307 21 times] + expected: NOTRUN + + [Redirect 308 20 times] + expected: NOTRUN + + [Redirect 308 21 times] + expected: NOTRUN + diff --git a/tests/wpt/metadata/fetch/api/redirect/redirect-origin-worker.html.ini b/tests/wpt/metadata/fetch/api/redirect/redirect-origin-worker.html.ini index 4dbf5882893..a84964c3296 100644 --- a/tests/wpt/metadata/fetch/api/redirect/redirect-origin-worker.html.ini +++ b/tests/wpt/metadata/fetch/api/redirect/redirect-origin-worker.html.ini @@ -1,5 +1,6 @@ [redirect-origin-worker.html] type: testharness + expected: TIMEOUT [Same origin to other origin redirection 301] expected: FAIL @@ -37,11 +38,14 @@ expected: FAIL [Same origin to other origin redirection 308] - expected: FAIL + expected: NOTRUN [Other origin to other origin redirection 308] - expected: FAIL + expected: NOTRUN [Other origin to same origin redirection 308] - expected: FAIL + expected: NOTRUN + + [Same origin to same origin redirection 308] + expected: TIMEOUT diff --git a/tests/wpt/metadata/fetch/api/redirect/redirect-origin.html.ini b/tests/wpt/metadata/fetch/api/redirect/redirect-origin.html.ini index f9d4621134c..315c07cfc3e 100644 --- a/tests/wpt/metadata/fetch/api/redirect/redirect-origin.html.ini +++ b/tests/wpt/metadata/fetch/api/redirect/redirect-origin.html.ini @@ -1,5 +1,6 @@ [redirect-origin.html] type: testharness + expected: TIMEOUT [Same origin to other origin redirection 301] expected: FAIL @@ -37,11 +38,14 @@ expected: FAIL [Same origin to other origin redirection 308] - expected: FAIL + expected: NOTRUN [Other origin to other origin redirection 308] - expected: FAIL + expected: NOTRUN [Other origin to same origin redirection 308] - expected: FAIL + expected: NOTRUN + + [Same origin to same origin redirection 308] + expected: TIMEOUT diff --git a/tests/wpt/metadata/fetch/api/request/multi-globals/url-parsing.html.ini b/tests/wpt/metadata/fetch/api/request/multi-globals/url-parsing.html.ini new file mode 100644 index 00000000000..a6e5c4f239b --- /dev/null +++ b/tests/wpt/metadata/fetch/api/request/multi-globals/url-parsing.html.ini @@ -0,0 +1,5 @@ +[url-parsing.html] + type: testharness + [should parse the URL relative to the current settings object] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/request/request-cache-default-conditional.html.ini b/tests/wpt/metadata/fetch/api/request/request-cache-default-conditional.html.ini new file mode 100644 index 00000000000..00e5f87efd7 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/request/request-cache-default-conditional.html.ini @@ -0,0 +1,39 @@ +[request-cache-default-conditional.html] + type: testharness + expected: TIMEOUT + [RequestCache "default" mode with an If-Modified-Since header is treated similarly to "no-store" with date and stale response] + expected: FAIL + + [RequestCache "default" mode with an If-Modified-Since header is treated similarly to "no-store" with date and fresh response] + expected: FAIL + + [RequestCache "default" mode with an If-Unmodified-Since header is treated similarly to "no-store" with Etag and fresh response] + expected: NOTRUN + + [RequestCache "default" mode with an If-Unmodified-Since header is treated similarly to "no-store" with date and fresh response] + expected: NOTRUN + + [RequestCache "default" mode with an If-Match header is treated similarly to "no-store" with Etag and stale response] + expected: NOTRUN + + [RequestCache "default" mode with an If-Match header is treated similarly to "no-store" with date and stale response] + expected: NOTRUN + + [RequestCache "default" mode with an If-Match header is treated similarly to "no-store" with Etag and fresh response] + expected: NOTRUN + + [RequestCache "default" mode with an If-Match header is treated similarly to "no-store" with date and fresh response] + expected: NOTRUN + + [RequestCache "default" mode with an If-Range header is treated similarly to "no-store" with Etag and stale response] + expected: NOTRUN + + [RequestCache "default" mode with an If-Range header is treated similarly to "no-store" with date and stale response] + expected: NOTRUN + + [RequestCache "default" mode with an If-Range header is treated similarly to "no-store" with Etag and fresh response] + expected: NOTRUN + + [RequestCache "default" mode with an If-Range header is treated similarly to "no-store" with date and fresh response] + expected: NOTRUN + diff --git a/tests/wpt/metadata/fetch/api/request/request-cache-default.html.ini b/tests/wpt/metadata/fetch/api/request/request-cache-default.html.ini new file mode 100644 index 00000000000..31a3ebe54d0 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/request/request-cache-default.html.ini @@ -0,0 +1,8 @@ +[request-cache-default.html] + type: testharness + [RequestCache "default" mode checks the cache for previously cached content and avoids going to the network if a fresh response exists with Etag and fresh response] + expected: FAIL + + [RequestCache "default" mode checks the cache for previously cached content and avoids going to the network if a fresh response exists with date and fresh response] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/request/request-cache-force-cache.html.ini b/tests/wpt/metadata/fetch/api/request/request-cache-force-cache.html.ini new file mode 100644 index 00000000000..d11e27f0612 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/request/request-cache-force-cache.html.ini @@ -0,0 +1,20 @@ +[request-cache-force-cache.html] + type: testharness + [RequestCache "force-cache" mode checks the cache for previously cached content and avoid revalidation for stale responses with Etag and stale response] + expected: FAIL + + [RequestCache "force-cache" mode checks the cache for previously cached content and avoid revalidation for stale responses with date and stale response] + expected: FAIL + + [RequestCache "force-cache" mode checks the cache for previously cached content and avoid revalidation for fresh responses with Etag and fresh response] + expected: FAIL + + [RequestCache "force-cache" mode checks the cache for previously cached content and avoid revalidation for fresh responses with date and fresh response] + expected: FAIL + + [RequestCache "force-cache" stores the response in the cache if it goes to the network with Etag and fresh response] + expected: FAIL + + [RequestCache "force-cache" stores the response in the cache if it goes to the network with date and fresh response] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/request/request-cache-only-if-cached.html.ini b/tests/wpt/metadata/fetch/api/request/request-cache-only-if-cached.html.ini new file mode 100644 index 00000000000..3814a57258e --- /dev/null +++ b/tests/wpt/metadata/fetch/api/request/request-cache-only-if-cached.html.ini @@ -0,0 +1,44 @@ +[request-cache-only-if-cached.html] + type: testharness + [RequestCache "only-if-cached" mode checks the cache for previously cached content and avoids revalidation for stale responses with Etag and stale response] + expected: FAIL + + [RequestCache "only-if-cached" mode checks the cache for previously cached content and avoids revalidation for stale responses with date and stale response] + expected: FAIL + + [RequestCache "only-if-cached" mode checks the cache for previously cached content and avoids revalidation for fresh responses with Etag and fresh response] + expected: FAIL + + [RequestCache "only-if-cached" mode checks the cache for previously cached content and avoids revalidation for fresh responses with date and fresh response] + expected: FAIL + + [RequestCache "only-if-cached" mode checks the cache for previously cached content and does not go to the network if a cached response is not found with Etag and fresh response] + expected: FAIL + + [RequestCache "only-if-cached" mode checks the cache for previously cached content and does not go to the network if a cached response is not found with date and fresh response] + expected: FAIL + + [RequestCache "only-if-cached" (with "same-origin") uses cached same-origin redirects to same-origin content with Etag and fresh response] + expected: FAIL + + [RequestCache "only-if-cached" (with "same-origin") uses cached same-origin redirects to same-origin content with date and fresh response] + expected: FAIL + + [RequestCache "only-if-cached" (with "same-origin") uses cached same-origin redirects to same-origin content with Etag and stale response] + expected: FAIL + + [RequestCache "only-if-cached" (with "same-origin") uses cached same-origin redirects to same-origin content with date and stale response] + expected: FAIL + + [RequestCache "only-if-cached" (with "same-origin") does not follow redirects across origins and rejects with Etag and fresh response] + expected: FAIL + + [RequestCache "only-if-cached" (with "same-origin") does not follow redirects across origins and rejects with date and fresh response] + expected: FAIL + + [RequestCache "only-if-cached" (with "same-origin") does not follow redirects across origins and rejects with Etag and stale response] + expected: FAIL + + [RequestCache "only-if-cached" (with "same-origin") does not follow redirects across origins and rejects with date and stale response] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/request/request-cache-reload.html.ini b/tests/wpt/metadata/fetch/api/request/request-cache-reload.html.ini new file mode 100644 index 00000000000..3b0ddb59c6e --- /dev/null +++ b/tests/wpt/metadata/fetch/api/request/request-cache-reload.html.ini @@ -0,0 +1,14 @@ +[request-cache-reload.html] + type: testharness + [RequestCache "reload" mode does store the response in the cache with Etag and fresh response] + expected: FAIL + + [RequestCache "reload" mode does store the response in the cache with date and fresh response] + expected: FAIL + + [RequestCache "reload" mode does store the response in the cache even if a previous response is already stored with Etag and fresh response] + expected: FAIL + + [RequestCache "reload" mode does store the response in the cache even if a previous response is already stored with date and fresh response] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/request/request-cache.html.ini b/tests/wpt/metadata/fetch/api/request/request-cache.html.ini deleted file mode 100644 index d80d4fe955a..00000000000 --- a/tests/wpt/metadata/fetch/api/request/request-cache.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[request-cache.html] - type: testharness - disabled: https://github.com/servo/servo/issues/13458 - expected: CRASH diff --git a/tests/wpt/metadata/fetch/api/request/request-consume-empty.html.ini b/tests/wpt/metadata/fetch/api/request/request-consume-empty.html.ini index 848a39ee5a6..54bdc54e18e 100644 --- a/tests/wpt/metadata/fetch/api/request/request-consume-empty.html.ini +++ b/tests/wpt/metadata/fetch/api/request/request-consume-empty.html.ini @@ -21,3 +21,9 @@ [Consume request's body as json] expected: FAIL + [Consume empty FormData request body as text] + expected: FAIL + + [Consume empty ArrayBuffer request body as text] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/response/multi-globals/url-parsing.html.ini b/tests/wpt/metadata/fetch/api/response/multi-globals/url-parsing.html.ini new file mode 100644 index 00000000000..ebf5ccc16d2 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/response/multi-globals/url-parsing.html.ini @@ -0,0 +1,5 @@ +[url-parsing.html] + type: testharness + [should parse the redirect Location URL relative to the current settings object] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/response/response-clone.html.ini b/tests/wpt/metadata/fetch/api/response/response-clone.html.ini index dc3c577e415..b7db9ddf394 100644 --- a/tests/wpt/metadata/fetch/api/response/response-clone.html.ini +++ b/tests/wpt/metadata/fetch/api/response/response-clone.html.ini @@ -12,3 +12,36 @@ [Cancelling stream should not affect cloned one] expected: FAIL + [Check response clone use structureClone for teed ReadableStreams (Int8Arraychunk)] + expected: FAIL + + [Check response clone use structureClone for teed ReadableStreams (Int16Arraychunk)] + expected: FAIL + + [Check response clone use structureClone for teed ReadableStreams (Int32Arraychunk)] + expected: FAIL + + [Check response clone use structureClone for teed ReadableStreams (ArrayBufferchunk)] + expected: FAIL + + [Check response clone use structureClone for teed ReadableStreams (Uint8Arraychunk)] + expected: FAIL + + [Check response clone use structureClone for teed ReadableStreams (Uint8ClampedArraychunk)] + expected: FAIL + + [Check response clone use structureClone for teed ReadableStreams (Uint16Arraychunk)] + expected: FAIL + + [Check response clone use structureClone for teed ReadableStreams (Uint32Arraychunk)] + expected: FAIL + + [Check response clone use structureClone for teed ReadableStreams (Float32Arraychunk)] + expected: FAIL + + [Check response clone use structureClone for teed ReadableStreams (Float64Arraychunk)] + expected: FAIL + + [Check response clone use structureClone for teed ReadableStreams (DataViewchunk)] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/response/response-consume-empty.html.ini b/tests/wpt/metadata/fetch/api/response/response-consume-empty.html.ini index b7af3cd4719..3b135d01fb5 100644 --- a/tests/wpt/metadata/fetch/api/response/response-consume-empty.html.ini +++ b/tests/wpt/metadata/fetch/api/response/response-consume-empty.html.ini @@ -28,3 +28,12 @@ [Consume empty text response body as text] expected: NOTRUN + [Consume empty URLSearchParams response body as text] + expected: NOTRUN + + [Consume empty FormData response body as text] + expected: NOTRUN + + [Consume empty ArrayBuffer response body as text] + expected: NOTRUN + diff --git a/tests/wpt/metadata/fetch/api/response/response-consume-stream.html.ini b/tests/wpt/metadata/fetch/api/response/response-consume-stream.html.ini index a3bc4c15285..ccf31287f00 100644 --- a/tests/wpt/metadata/fetch/api/response/response-consume-stream.html.ini +++ b/tests/wpt/metadata/fetch/api/response/response-consume-stream.html.ini @@ -24,3 +24,6 @@ [Getting a redirect Response stream] expected: FAIL + [Read URLSearchParams response's body as readableStream] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/response/response-consume.html.ini b/tests/wpt/metadata/fetch/api/response/response-consume.html.ini index a0956648b51..4235ac35fee 100644 --- a/tests/wpt/metadata/fetch/api/response/response-consume.html.ini +++ b/tests/wpt/metadata/fetch/api/response/response-consume.html.ini @@ -24,3 +24,60 @@ [Consume fetched response's body as arrayBuffer] expected: FAIL + [Consume response's body: from text to arrayBuffer] + expected: FAIL + + [Consume response's body: from text with correct multipart type to formData] + expected: FAIL + + [Consume response's body: from blob to arrayBuffer] + expected: FAIL + + [Consume response's body: from blob with correct multipart type to formData] + expected: FAIL + + [Consume response's body: from FormData to formData] + expected: FAIL + + [Consume response's body: from FormData to blob] + expected: FAIL + + [Consume response's body: from FormData to text] + expected: FAIL + + [Consume response's body: from FormData to arrayBuffer] + expected: FAIL + + [Consume response's body: from URLSearchParams to arrayBuffer] + expected: FAIL + + [Consume response's body: from stream to blob] + expected: FAIL + + [Consume response's body: from stream to text] + expected: FAIL + + [Consume response's body: from stream to arrayBuffer] + expected: FAIL + + [Consume response's body: from stream to json] + expected: FAIL + + [Consume response's body: from stream with correct multipart type to formData] + expected: FAIL + + [Consume response's body: from stream without correct multipart type to formData (error case)] + expected: FAIL + + [Consume response's body: from stream with correct urlencoded type to formData] + expected: FAIL + + [Consume response's body: from stream without correct urlencoded type to formData (error case)] + expected: FAIL + + [Consume response's body: from fetch to blob] + expected: FAIL + + [Consume response's body: from fetch to arrayBuffer] + expected: FAIL + diff --git a/tests/wpt/metadata/hr-time/basic.worker.js.ini b/tests/wpt/metadata/hr-time/basic.worker.js.ini index 8d2e2c67e2d..667b05337d8 100644 --- a/tests/wpt/metadata/hr-time/basic.worker.js.ini +++ b/tests/wpt/metadata/hr-time/basic.worker.js.ini @@ -1,4 +1,4 @@ -[basic.worker] +[basic.worker.html] type: testharness [WorkerGlobalScope.performance.now() is a function] expected: FAIL diff --git a/tests/wpt/metadata/hr-time/idlharness.html.ini b/tests/wpt/metadata/hr-time/idlharness.html.ini new file mode 100644 index 00000000000..1e38b08793e --- /dev/null +++ b/tests/wpt/metadata/hr-time/idlharness.html.ini @@ -0,0 +1,14 @@ +[idlharness.html] + type: testharness + [Window interface: attribute performance] + expected: FAIL + + [Performance interface: existence and properties of interface object] + expected: FAIL + + [Performance interface: existence and properties of interface prototype object] + expected: FAIL + + [Stringification of window.performance] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/history_go_to_uri.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/history_go_to_uri.html.ini new file mode 100644 index 00000000000..5b21d4db949 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/history_go_to_uri.html.ini @@ -0,0 +1,5 @@ +[history_go_to_uri.html] + type: testharness + [history.go() negative tests] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html.ini deleted file mode 100644 index 7758856bbd4..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[traverse_the_session_history_unload_prompt_1.html] - type: testharness - [Traversing the history, unload event is fired on doucment] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-prototype-setting.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-prototype-setting.html.ini new file mode 100644 index 00000000000..d40ff38ca39 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-prototype-setting.html.ini @@ -0,0 +1,5 @@ +[location-prototype-setting.html] + type: testharness + [[[SetPrototypeOf\]\] on a location object should return false] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/location_hash.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location_hash.html.ini index a81d6814682..2cf94f6e2e6 100644 --- a/tests/wpt/metadata/html/browsers/history/the-location-interface/location_hash.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location_hash.html.ini @@ -3,3 +3,6 @@ [location hash] expected: FAIL + [Setting location.hash on srcdoc iframe] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/security_location_0.sub.htm.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/security_location_0.htm.ini similarity index 81% rename from tests/wpt/metadata/html/browsers/history/the-location-interface/security_location_0.sub.htm.ini rename to tests/wpt/metadata/html/browsers/history/the-location-interface/security_location_0.htm.ini index 0c9c11c1ea5..eb94f650336 100644 --- a/tests/wpt/metadata/html/browsers/history/the-location-interface/security_location_0.sub.htm.ini +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/security_location_0.htm.ini @@ -1,4 +1,4 @@ -[security_location_0.sub.htm] +[security_location_0.htm] type: testharness [Accessing location object from different origins doesn't raise SECURITY_ERR exception] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/sandboxing/sandbox-allow-same-origin.html.ini b/tests/wpt/metadata/html/browsers/sandboxing/sandbox-allow-same-origin.html.ini new file mode 100644 index 00000000000..98aaa0c55c3 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/sandboxing/sandbox-allow-same-origin.html.ini @@ -0,0 +1,6 @@ +[sandbox-allow-same-origin.html] + type: testharness + expected: ERROR + [DOM access in sandbox='allow-same-origin' iframe is allowed] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/sandboxing/sandbox-allow-scripts.html.ini b/tests/wpt/metadata/html/browsers/sandboxing/sandbox-allow-scripts.html.ini new file mode 100644 index 00000000000..91e5608d4b6 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/sandboxing/sandbox-allow-scripts.html.ini @@ -0,0 +1,6 @@ +[sandbox-allow-scripts.html] + type: testharness + expected: TIMEOUT + [Running script from sandbox='allow-scripts' iframe is allowed] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/sandboxing/sandbox-disallow-same-origin.html.ini b/tests/wpt/metadata/html/browsers/sandboxing/sandbox-disallow-same-origin.html.ini new file mode 100644 index 00000000000..45a45857a97 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/sandboxing/sandbox-disallow-same-origin.html.ini @@ -0,0 +1,6 @@ +[sandbox-disallow-same-origin.html] + type: testharness + expected: ERROR + [Access to sandbox iframe is disallowed] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html.ini index aa2008d4d39..81f700cd881 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html.ini @@ -15,3 +15,6 @@ [Check if window['d'\] returns the element with id='d'] expected: FAIL + [Check if window['a'\] contains all applet, embed, form, img, and object elements, and their order] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/security-window/window-security.sub.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/security-window/window-security.html.ini similarity index 99% rename from tests/wpt/metadata/html/browsers/the-window-object/security-window/window-security.sub.html.ini rename to tests/wpt/metadata/html/browsers/the-window-object/security-window/window-security.html.ini index b90d5dc5688..5fb19d68ce2 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/security-window/window-security.sub.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/security-window/window-security.html.ini @@ -1,4 +1,4 @@ -[window-security.sub.html] +[window-security.html] type: testharness [A SecurityError exception must be thrown when window.applicationCache is accessed from a different origin.] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/window-open-noopener.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/window-open-noopener.html.ini new file mode 100644 index 00000000000..2aa832907a6 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/window-open-noopener.html.ini @@ -0,0 +1,6 @@ +[window-open-noopener.html] + type: testharness + expected: ERROR + [window.open() with 'noopener' should not reuse existing target] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html.ini b/tests/wpt/metadata/html/browsers/windows/nested-browsing-contexts/frameElement.html.ini similarity index 75% rename from tests/wpt/metadata/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html.ini rename to tests/wpt/metadata/html/browsers/windows/nested-browsing-contexts/frameElement.html.ini index b56a9490e9a..14dcf4b686f 100644 --- a/tests/wpt/metadata/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html.ini +++ b/tests/wpt/metadata/html/browsers/windows/nested-browsing-contexts/frameElement.html.ini @@ -1,11 +1,8 @@ -[frameElement.sub.html] +[frameElement.html] type: testharness [The window's frameElement attribute must return its container element if it is a nested browsing context] expected: FAIL - [The SecurityError must be thrown if the container's document does not have the same effective script origin] - expected: FAIL - [The SecurityError must be thrown if the window accesses to frameElement attribute of a Window which does not have the same effective script origin] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html.ini b/tests/wpt/metadata/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html.ini new file mode 100644 index 00000000000..90464594a18 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html.ini @@ -0,0 +1,3 @@ +[targeting-cross-origin-nested-browsing-contexts.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.sub.html.ini b/tests/wpt/metadata/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.sub.html.ini deleted file mode 100644 index 4dedae027e2..00000000000 --- a/tests/wpt/metadata/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.sub.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[targeting-cross-origin-nested-browsing-contexts.sub.html] - type: testharness - expected: TIMEOUT - [Targeting nested browsing contexts] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html.ini b/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/Document.currentScript.html.ini similarity index 86% rename from tests/wpt/metadata/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html.ini rename to tests/wpt/metadata/html/dom/documents/dom-tree-accessors/Document.currentScript.html.ini index 4ae432e0d28..252190ed7b1 100644 --- a/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html.ini +++ b/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/Document.currentScript.html.ini @@ -1,6 +1,9 @@ -[Document.currentScript.sub.html] +[Document.currentScript.html] type: testharness expected: TIMEOUT + [Script script-exec] + expected: NOTRUN + [Script script-svg] expected: NOTRUN @@ -10,6 +13,3 @@ [Script document-write] expected: NOTRUN - [Script script-exec] - expected: NOTRUN - diff --git a/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini b/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini deleted file mode 100644 index a1e22155c9c..00000000000 --- a/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[document.forms.html] - type: testharness - [document.forms iteration] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index 151d88e473a..2384531b235 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -1056,75 +1056,18 @@ [HTMLCollection interface: calling namedItem(DOMString) on document.all with too few arguments must throw TypeError] expected: FAIL - [HTMLFormControlsCollection must be primary interface of document.createElement("form").elements] - expected: FAIL - - [Stringification of document.createElement("form").elements] - expected: FAIL - - [HTMLFormControlsCollection interface: document.createElement("form").elements must inherit property "namedItem" with the proper type (0)] - expected: FAIL - - [HTMLFormControlsCollection interface: calling namedItem(DOMString) on document.createElement("form").elements with too few arguments must throw TypeError] - expected: FAIL - - [HTMLCollection interface: document.createElement("form").elements must inherit property "length" with the proper type (0)] - expected: FAIL - - [HTMLCollection interface: document.createElement("form").elements must inherit property "item" with the proper type (1)] - expected: FAIL - - [HTMLCollection interface: calling item(unsigned long) on document.createElement("form").elements with too few arguments must throw TypeError] - expected: FAIL - - [HTMLCollection interface: document.createElement("form").elements must inherit property "namedItem" with the proper type (2)] - expected: FAIL - - [HTMLCollection interface: calling namedItem(DOMString) on document.createElement("form").elements with too few arguments must throw TypeError] - expected: FAIL - [HTMLOptionsCollection interface: attribute selectedIndex] expected: FAIL - [HTMLOptionsCollection must be primary interface of document.createElement("select").options] - expected: FAIL - - [Stringification of document.createElement("select").options] - expected: FAIL - - [HTMLOptionsCollection interface: document.createElement("select").options must inherit property "length" with the proper type (0)] - expected: FAIL - [HTMLOptionsCollection interface: document.createElement("select").options must inherit property "add" with the proper type (3)] expected: FAIL - [HTMLOptionsCollection interface: calling add([object Object\],[object Object\],[object Object\],[object Object\]) on document.createElement("select").options with too few arguments must throw TypeError] - expected: FAIL - [HTMLOptionsCollection interface: document.createElement("select").options must inherit property "remove" with the proper type (4)] expected: FAIL - [HTMLOptionsCollection interface: calling remove(long) on document.createElement("select").options with too few arguments must throw TypeError] - expected: FAIL - [HTMLOptionsCollection interface: document.createElement("select").options must inherit property "selectedIndex" with the proper type (5)] expected: FAIL - [HTMLCollection interface: document.createElement("select").options must inherit property "length" with the proper type (0)] - expected: FAIL - - [HTMLCollection interface: document.createElement("select").options must inherit property "item" with the proper type (1)] - expected: FAIL - - [HTMLCollection interface: calling item(unsigned long) on document.createElement("select").options with too few arguments must throw TypeError] - expected: FAIL - - [HTMLCollection interface: document.createElement("select").options must inherit property "namedItem" with the proper type (2)] - expected: FAIL - - [HTMLCollection interface: calling namedItem(DOMString) on document.createElement("select").options with too few arguments must throw TypeError] - expected: FAIL - [HTMLPropertiesCollection interface: existence and properties of interface object] expected: FAIL @@ -1719,12 +1662,6 @@ [HTMLEmbedElement interface: attribute name] expected: FAIL - [HTMLEmbedElement must be primary interface of document.createElement("embed")] - expected: FAIL - - [Stringification of document.createElement("embed")] - expected: FAIL - [HTMLEmbedElement interface: document.createElement("embed") must inherit property "src" with the proper type (0)] expected: FAIL @@ -1815,18 +1752,9 @@ [HTMLObjectElement interface: attribute border] expected: FAIL - [HTMLObjectElement must be primary interface of document.createElement("object")] - expected: FAIL - - [Stringification of document.createElement("object")] - expected: FAIL - [HTMLObjectElement interface: document.createElement("object") must inherit property "data" with the proper type (0)] expected: FAIL - [HTMLObjectElement interface: document.createElement("object") must inherit property "type" with the proper type (1)] - expected: FAIL - [HTMLObjectElement interface: document.createElement("object") must inherit property "typeMustMatch" with the proper type (2)] expected: FAIL @@ -1836,9 +1764,6 @@ [HTMLObjectElement interface: document.createElement("object") must inherit property "useMap" with the proper type (4)] expected: FAIL - [HTMLObjectElement interface: document.createElement("object") must inherit property "form" with the proper type (5)] - expected: FAIL - [HTMLObjectElement interface: document.createElement("object") must inherit property "width" with the proper type (6)] expected: FAIL @@ -1854,9 +1779,6 @@ [HTMLObjectElement interface: document.createElement("object") must inherit property "willValidate" with the proper type (10)] expected: FAIL - [HTMLObjectElement interface: document.createElement("object") must inherit property "validity" with the proper type (11)] - expected: FAIL - [HTMLObjectElement interface: document.createElement("object") must inherit property "validationMessage" with the proper type (12)] expected: FAIL @@ -10577,3 +10499,46 @@ [Navigator interface: window.navigator must inherit property "hardwareConcurrency" with the proper type (22)] expected: FAIL + + [HTMLOptionsCollection interface: document.createElement("select").options must inherit property "selectedIndex" with the proper type (4)] + expected: FAIL + + [HTMLEmbedElement interface: document.createElement("embed") must inherit property "align" with the proper type (5)] + expected: FAIL + + [HTMLEmbedElement interface: document.createElement("embed") must inherit property "name" with the proper type (6)] + expected: FAIL + + [HTMLObjectElement interface: document.createElement("object") must inherit property "align" with the proper type (16)] + expected: FAIL + + [HTMLObjectElement interface: document.createElement("object") must inherit property "archive" with the proper type (17)] + expected: FAIL + + [HTMLObjectElement interface: document.createElement("object") must inherit property "code" with the proper type (18)] + expected: FAIL + + [HTMLObjectElement interface: document.createElement("object") must inherit property "declare" with the proper type (19)] + expected: FAIL + + [HTMLObjectElement interface: document.createElement("object") must inherit property "hspace" with the proper type (20)] + expected: FAIL + + [HTMLObjectElement interface: document.createElement("object") must inherit property "standby" with the proper type (21)] + expected: FAIL + + [HTMLObjectElement interface: document.createElement("object") must inherit property "vspace" with the proper type (22)] + expected: FAIL + + [HTMLObjectElement interface: document.createElement("object") must inherit property "codeBase" with the proper type (23)] + expected: FAIL + + [HTMLObjectElement interface: document.createElement("object") must inherit property "codeType" with the proper type (24)] + expected: FAIL + + [HTMLObjectElement interface: document.createElement("object") must inherit property "border" with the proper type (25)] + expected: FAIL + + [MessageEvent interface: operation initMessageEvent(DOMString,boolean,boolean,any,DOMString,DOMString,[object Object\],[object Object\],[object Object\])] + expected: FAIL + diff --git a/tests/wpt/metadata/html/dom/reflection-embedded.html.ini b/tests/wpt/metadata/html/dom/reflection-embedded.html.ini index a7016569e17..106c3dcf98f 100644 --- a/tests/wpt/metadata/html/dom/reflection-embedded.html.ini +++ b/tests/wpt/metadata/html/dom/reflection-embedded.html.ini @@ -20799,3 +20799,11121 @@ [area.ping: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo " followed by getAttribute()] expected: FAIL + [img.dir: setAttribute() to ""] + expected: FAIL + + [img.dir: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [img.dir: setAttribute() to undefined] + expected: FAIL + + [img.dir: setAttribute() to 7] + expected: FAIL + + [img.dir: setAttribute() to 1.5] + expected: FAIL + + [img.dir: setAttribute() to true] + expected: FAIL + + [img.dir: setAttribute() to false] + expected: FAIL + + [img.dir: setAttribute() to object "[object Object\]"] + expected: FAIL + + [img.dir: setAttribute() to NaN] + expected: FAIL + + [img.dir: setAttribute() to Infinity] + expected: FAIL + + [img.dir: setAttribute() to -Infinity] + expected: FAIL + + [img.dir: setAttribute() to "\\0"] + expected: FAIL + + [img.dir: setAttribute() to null] + expected: FAIL + + [img.dir: setAttribute() to object "test-toString"] + expected: FAIL + + [img.dir: setAttribute() to object "test-valueOf"] + expected: FAIL + + [img.dir: setAttribute() to "ltr"] + expected: FAIL + + [img.dir: setAttribute() to "xltr"] + expected: FAIL + + [img.dir: setAttribute() to "ltr\\0"] + expected: FAIL + + [img.dir: setAttribute() to "tr"] + expected: FAIL + + [img.dir: setAttribute() to "LTR"] + expected: FAIL + + [img.dir: setAttribute() to "rtl"] + expected: FAIL + + [img.dir: setAttribute() to "xrtl"] + expected: FAIL + + [img.dir: setAttribute() to "rtl\\0"] + expected: FAIL + + [img.dir: setAttribute() to "tl"] + expected: FAIL + + [img.dir: setAttribute() to "RTL"] + expected: FAIL + + [img.dir: setAttribute() to "auto"] + expected: FAIL + + [img.dir: setAttribute() to "xauto"] + expected: FAIL + + [img.dir: setAttribute() to "auto\\0"] + expected: FAIL + + [img.dir: setAttribute() to "uto"] + expected: FAIL + + [img.dir: setAttribute() to "AUTO"] + expected: FAIL + + [img.dir: IDL set to ""] + expected: FAIL + + [img.dir: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [img.dir: IDL set to undefined] + expected: FAIL + + [img.dir: IDL set to 7] + expected: FAIL + + [img.dir: IDL set to 1.5] + expected: FAIL + + [img.dir: IDL set to true] + expected: FAIL + + [img.dir: IDL set to false] + expected: FAIL + + [img.dir: IDL set to object "[object Object\]"] + expected: FAIL + + [img.dir: IDL set to NaN] + expected: FAIL + + [img.dir: IDL set to Infinity] + expected: FAIL + + [img.dir: IDL set to -Infinity] + expected: FAIL + + [img.dir: IDL set to "\\0"] + expected: FAIL + + [img.dir: IDL set to null] + expected: FAIL + + [img.dir: IDL set to object "test-toString"] + expected: FAIL + + [img.dir: IDL set to object "test-valueOf"] + expected: FAIL + + [img.dir: IDL set to "ltr"] + expected: FAIL + + [img.dir: IDL set to "xltr"] + expected: FAIL + + [img.dir: IDL set to "ltr\\0"] + expected: FAIL + + [img.dir: IDL set to "tr"] + expected: FAIL + + [img.dir: IDL set to "LTR"] + expected: FAIL + + [img.dir: IDL set to "rtl"] + expected: FAIL + + [img.dir: IDL set to "xrtl"] + expected: FAIL + + [img.dir: IDL set to "rtl\\0"] + expected: FAIL + + [img.dir: IDL set to "tl"] + expected: FAIL + + [img.dir: IDL set to "RTL"] + expected: FAIL + + [img.dir: IDL set to "auto"] + expected: FAIL + + [img.dir: IDL set to "xauto"] + expected: FAIL + + [img.dir: IDL set to "auto\\0"] + expected: FAIL + + [img.dir: IDL set to "uto"] + expected: FAIL + + [img.dir: IDL set to "AUTO"] + expected: FAIL + + [img.accessKey: setAttribute() to ""] + expected: FAIL + + [img.accessKey: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [img.accessKey: setAttribute() to undefined] + expected: FAIL + + [img.accessKey: setAttribute() to 7] + expected: FAIL + + [img.accessKey: setAttribute() to 1.5] + expected: FAIL + + [img.accessKey: setAttribute() to true] + expected: FAIL + + [img.accessKey: setAttribute() to false] + expected: FAIL + + [img.accessKey: setAttribute() to object "[object Object\]"] + expected: FAIL + + [img.accessKey: setAttribute() to NaN] + expected: FAIL + + [img.accessKey: setAttribute() to Infinity] + expected: FAIL + + [img.accessKey: setAttribute() to -Infinity] + expected: FAIL + + [img.accessKey: setAttribute() to "\\0"] + expected: FAIL + + [img.accessKey: setAttribute() to null] + expected: FAIL + + [img.accessKey: setAttribute() to object "test-toString"] + expected: FAIL + + [img.accessKey: setAttribute() to object "test-valueOf"] + expected: FAIL + + [img.accessKey: IDL set to ""] + expected: FAIL + + [img.accessKey: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [img.accessKey: IDL set to undefined] + expected: FAIL + + [img.accessKey: IDL set to 7] + expected: FAIL + + [img.accessKey: IDL set to 1.5] + expected: FAIL + + [img.accessKey: IDL set to true] + expected: FAIL + + [img.accessKey: IDL set to false] + expected: FAIL + + [img.accessKey: IDL set to object "[object Object\]"] + expected: FAIL + + [img.accessKey: IDL set to NaN] + expected: FAIL + + [img.accessKey: IDL set to Infinity] + expected: FAIL + + [img.accessKey: IDL set to -Infinity] + expected: FAIL + + [img.accessKey: IDL set to "\\0"] + expected: FAIL + + [img.accessKey: IDL set to null] + expected: FAIL + + [img.accessKey: IDL set to object "test-toString"] + expected: FAIL + + [img.accessKey: IDL set to object "test-valueOf"] + expected: FAIL + + [img.tabIndex: setAttribute() to -36] + expected: FAIL + + [img.tabIndex: setAttribute() to -1] + expected: FAIL + + [img.tabIndex: setAttribute() to 0] + expected: FAIL + + [img.tabIndex: setAttribute() to 1] + expected: FAIL + + [img.tabIndex: setAttribute() to 2147483647] + expected: FAIL + + [img.tabIndex: setAttribute() to -2147483648] + expected: FAIL + + [img.tabIndex: setAttribute() to "-1"] + expected: FAIL + + [img.tabIndex: setAttribute() to "-0"] + expected: FAIL + + [img.tabIndex: setAttribute() to "0"] + expected: FAIL + + [img.tabIndex: setAttribute() to "1"] + expected: FAIL + + [img.tabIndex: setAttribute() to "\\t7"] + expected: FAIL + + [img.tabIndex: setAttribute() to "\\f7"] + expected: FAIL + + [img.tabIndex: setAttribute() to " 7"] + expected: FAIL + + [img.tabIndex: setAttribute() to "\\n7"] + expected: FAIL + + [img.tabIndex: setAttribute() to "\\r7"] + expected: FAIL + + [img.tabIndex: setAttribute() to 1.5] + expected: FAIL + + [img.tabIndex: setAttribute() to object "2"] + expected: FAIL + + [img.tabIndex: IDL set to -36] + expected: FAIL + + [img.tabIndex: IDL set to -1] + expected: FAIL + + [img.tabIndex: IDL set to 0] + expected: FAIL + + [img.tabIndex: IDL set to 1] + expected: FAIL + + [img.tabIndex: IDL set to 2147483647] + expected: FAIL + + [img.tabIndex: IDL set to -2147483648] + expected: FAIL + + [img.srcset: setAttribute() to ""] + expected: FAIL + + [img.srcset: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [img.srcset: setAttribute() to undefined] + expected: FAIL + + [img.srcset: setAttribute() to 7] + expected: FAIL + + [img.srcset: setAttribute() to 1.5] + expected: FAIL + + [img.srcset: setAttribute() to true] + expected: FAIL + + [img.srcset: setAttribute() to false] + expected: FAIL + + [img.srcset: setAttribute() to object "[object Object\]"] + expected: FAIL + + [img.srcset: setAttribute() to NaN] + expected: FAIL + + [img.srcset: setAttribute() to Infinity] + expected: FAIL + + [img.srcset: setAttribute() to -Infinity] + expected: FAIL + + [img.srcset: setAttribute() to "\\0"] + expected: FAIL + + [img.srcset: setAttribute() to null] + expected: FAIL + + [img.srcset: setAttribute() to object "test-toString"] + expected: FAIL + + [img.srcset: setAttribute() to object "test-valueOf"] + expected: FAIL + + [img.srcset: IDL set to ""] + expected: FAIL + + [img.srcset: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [img.srcset: IDL set to undefined] + expected: FAIL + + [img.srcset: IDL set to 7] + expected: FAIL + + [img.srcset: IDL set to 1.5] + expected: FAIL + + [img.srcset: IDL set to true] + expected: FAIL + + [img.srcset: IDL set to false] + expected: FAIL + + [img.srcset: IDL set to object "[object Object\]"] + expected: FAIL + + [img.srcset: IDL set to NaN] + expected: FAIL + + [img.srcset: IDL set to Infinity] + expected: FAIL + + [img.srcset: IDL set to -Infinity] + expected: FAIL + + [img.srcset: IDL set to "\\0"] + expected: FAIL + + [img.srcset: IDL set to null] + expected: FAIL + + [img.srcset: IDL set to object "test-toString"] + expected: FAIL + + [img.srcset: IDL set to object "test-valueOf"] + expected: FAIL + + [img.crossOrigin: IDL set to undefined] + expected: FAIL + + [img.crossOrigin: IDL set to null] + expected: FAIL + + [img.width: IDL set to 1] + expected: FAIL + + [img.width: IDL set to 257] + expected: FAIL + + [img.width: IDL set to 2147483647] + expected: FAIL + + [img.height: IDL set to 1] + expected: FAIL + + [img.height: IDL set to 257] + expected: FAIL + + [img.height: IDL set to 2147483647] + expected: FAIL + + [img.lowsrc: setAttribute() to ""] + expected: FAIL + + [img.lowsrc: setAttribute() to " foo "] + expected: FAIL + + [img.lowsrc: setAttribute() to "http://site.example/"] + expected: FAIL + + [img.lowsrc: setAttribute() to "//site.example/path???@#l"] + expected: FAIL + + [img.lowsrc: setAttribute() to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [img.lowsrc: setAttribute() to undefined] + expected: FAIL + + [img.lowsrc: setAttribute() to 7] + expected: FAIL + + [img.lowsrc: setAttribute() to 1.5] + expected: FAIL + + [img.lowsrc: setAttribute() to true] + expected: FAIL + + [img.lowsrc: setAttribute() to false] + expected: FAIL + + [img.lowsrc: setAttribute() to object "[object Object\]"] + expected: FAIL + + [img.lowsrc: setAttribute() to NaN] + expected: FAIL + + [img.lowsrc: setAttribute() to Infinity] + expected: FAIL + + [img.lowsrc: setAttribute() to -Infinity] + expected: FAIL + + [img.lowsrc: setAttribute() to "\\0"] + expected: FAIL + + [img.lowsrc: setAttribute() to null] + expected: FAIL + + [img.lowsrc: setAttribute() to object "test-toString"] + expected: FAIL + + [img.lowsrc: setAttribute() to object "test-valueOf"] + expected: FAIL + + [img.lowsrc: IDL set to ""] + expected: FAIL + + [img.lowsrc: IDL set to " foo "] + expected: FAIL + + [img.lowsrc: IDL set to "http://site.example/"] + expected: FAIL + + [img.lowsrc: IDL set to "//site.example/path???@#l"] + expected: FAIL + + [img.lowsrc: IDL set to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [img.lowsrc: IDL set to undefined] + expected: FAIL + + [img.lowsrc: IDL set to 7] + expected: FAIL + + [img.lowsrc: IDL set to 1.5] + expected: FAIL + + [img.lowsrc: IDL set to true] + expected: FAIL + + [img.lowsrc: IDL set to false] + expected: FAIL + + [img.lowsrc: IDL set to object "[object Object\]"] + expected: FAIL + + [img.lowsrc: IDL set to NaN] + expected: FAIL + + [img.lowsrc: IDL set to Infinity] + expected: FAIL + + [img.lowsrc: IDL set to -Infinity] + expected: FAIL + + [img.lowsrc: IDL set to "\\0"] + expected: FAIL + + [img.lowsrc: IDL set to null] + expected: FAIL + + [img.lowsrc: IDL set to object "test-toString"] + expected: FAIL + + [img.lowsrc: IDL set to object "test-valueOf"] + expected: FAIL + + [img.longDesc: setAttribute() to ""] + expected: FAIL + + [img.longDesc: setAttribute() to " foo "] + expected: FAIL + + [img.longDesc: setAttribute() to "//site.example/path???@#l"] + expected: FAIL + + [img.longDesc: setAttribute() to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [img.longDesc: setAttribute() to undefined] + expected: FAIL + + [img.longDesc: setAttribute() to 7] + expected: FAIL + + [img.longDesc: setAttribute() to 1.5] + expected: FAIL + + [img.longDesc: setAttribute() to true] + expected: FAIL + + [img.longDesc: setAttribute() to false] + expected: FAIL + + [img.longDesc: setAttribute() to object "[object Object\]"] + expected: FAIL + + [img.longDesc: setAttribute() to NaN] + expected: FAIL + + [img.longDesc: setAttribute() to Infinity] + expected: FAIL + + [img.longDesc: setAttribute() to -Infinity] + expected: FAIL + + [img.longDesc: setAttribute() to "\\0"] + expected: FAIL + + [img.longDesc: setAttribute() to null] + expected: FAIL + + [img.longDesc: setAttribute() to object "test-toString"] + expected: FAIL + + [img.longDesc: setAttribute() to object "test-valueOf"] + expected: FAIL + + [img.longDesc: IDL set to ""] + expected: FAIL + + [img.longDesc: IDL set to " foo "] + expected: FAIL + + [img.longDesc: IDL set to "//site.example/path???@#l"] + expected: FAIL + + [img.longDesc: IDL set to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [img.longDesc: IDL set to undefined] + expected: FAIL + + [img.longDesc: IDL set to 7] + expected: FAIL + + [img.longDesc: IDL set to 1.5] + expected: FAIL + + [img.longDesc: IDL set to true] + expected: FAIL + + [img.longDesc: IDL set to false] + expected: FAIL + + [img.longDesc: IDL set to object "[object Object\]"] + expected: FAIL + + [img.longDesc: IDL set to NaN] + expected: FAIL + + [img.longDesc: IDL set to Infinity] + expected: FAIL + + [img.longDesc: IDL set to -Infinity] + expected: FAIL + + [img.longDesc: IDL set to "\\0"] + expected: FAIL + + [img.longDesc: IDL set to null] + expected: FAIL + + [img.longDesc: IDL set to object "test-toString"] + expected: FAIL + + [img.longDesc: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.dir: setAttribute() to ""] + expected: FAIL + + [iframe.dir: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.dir: setAttribute() to undefined] + expected: FAIL + + [iframe.dir: setAttribute() to 7] + expected: FAIL + + [iframe.dir: setAttribute() to 1.5] + expected: FAIL + + [iframe.dir: setAttribute() to true] + expected: FAIL + + [iframe.dir: setAttribute() to false] + expected: FAIL + + [iframe.dir: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.dir: setAttribute() to NaN] + expected: FAIL + + [iframe.dir: setAttribute() to Infinity] + expected: FAIL + + [iframe.dir: setAttribute() to -Infinity] + expected: FAIL + + [iframe.dir: setAttribute() to "\\0"] + expected: FAIL + + [iframe.dir: setAttribute() to null] + expected: FAIL + + [iframe.dir: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.dir: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.dir: setAttribute() to "ltr"] + expected: FAIL + + [iframe.dir: setAttribute() to "xltr"] + expected: FAIL + + [iframe.dir: setAttribute() to "ltr\\0"] + expected: FAIL + + [iframe.dir: setAttribute() to "tr"] + expected: FAIL + + [iframe.dir: setAttribute() to "LTR"] + expected: FAIL + + [iframe.dir: setAttribute() to "rtl"] + expected: FAIL + + [iframe.dir: setAttribute() to "xrtl"] + expected: FAIL + + [iframe.dir: setAttribute() to "rtl\\0"] + expected: FAIL + + [iframe.dir: setAttribute() to "tl"] + expected: FAIL + + [iframe.dir: setAttribute() to "RTL"] + expected: FAIL + + [iframe.dir: setAttribute() to "auto"] + expected: FAIL + + [iframe.dir: setAttribute() to "xauto"] + expected: FAIL + + [iframe.dir: setAttribute() to "auto\\0"] + expected: FAIL + + [iframe.dir: setAttribute() to "uto"] + expected: FAIL + + [iframe.dir: setAttribute() to "AUTO"] + expected: FAIL + + [iframe.dir: IDL set to ""] + expected: FAIL + + [iframe.dir: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.dir: IDL set to undefined] + expected: FAIL + + [iframe.dir: IDL set to 7] + expected: FAIL + + [iframe.dir: IDL set to 1.5] + expected: FAIL + + [iframe.dir: IDL set to true] + expected: FAIL + + [iframe.dir: IDL set to false] + expected: FAIL + + [iframe.dir: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.dir: IDL set to NaN] + expected: FAIL + + [iframe.dir: IDL set to Infinity] + expected: FAIL + + [iframe.dir: IDL set to -Infinity] + expected: FAIL + + [iframe.dir: IDL set to "\\0"] + expected: FAIL + + [iframe.dir: IDL set to null] + expected: FAIL + + [iframe.dir: IDL set to object "test-toString"] + expected: FAIL + + [iframe.dir: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.dir: IDL set to "ltr"] + expected: FAIL + + [iframe.dir: IDL set to "xltr"] + expected: FAIL + + [iframe.dir: IDL set to "ltr\\0"] + expected: FAIL + + [iframe.dir: IDL set to "tr"] + expected: FAIL + + [iframe.dir: IDL set to "LTR"] + expected: FAIL + + [iframe.dir: IDL set to "rtl"] + expected: FAIL + + [iframe.dir: IDL set to "xrtl"] + expected: FAIL + + [iframe.dir: IDL set to "rtl\\0"] + expected: FAIL + + [iframe.dir: IDL set to "tl"] + expected: FAIL + + [iframe.dir: IDL set to "RTL"] + expected: FAIL + + [iframe.dir: IDL set to "auto"] + expected: FAIL + + [iframe.dir: IDL set to "xauto"] + expected: FAIL + + [iframe.dir: IDL set to "auto\\0"] + expected: FAIL + + [iframe.dir: IDL set to "uto"] + expected: FAIL + + [iframe.dir: IDL set to "AUTO"] + expected: FAIL + + [iframe.accessKey: setAttribute() to ""] + expected: FAIL + + [iframe.accessKey: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.accessKey: setAttribute() to undefined] + expected: FAIL + + [iframe.accessKey: setAttribute() to 7] + expected: FAIL + + [iframe.accessKey: setAttribute() to 1.5] + expected: FAIL + + [iframe.accessKey: setAttribute() to true] + expected: FAIL + + [iframe.accessKey: setAttribute() to false] + expected: FAIL + + [iframe.accessKey: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.accessKey: setAttribute() to NaN] + expected: FAIL + + [iframe.accessKey: setAttribute() to Infinity] + expected: FAIL + + [iframe.accessKey: setAttribute() to -Infinity] + expected: FAIL + + [iframe.accessKey: setAttribute() to "\\0"] + expected: FAIL + + [iframe.accessKey: setAttribute() to null] + expected: FAIL + + [iframe.accessKey: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.accessKey: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.accessKey: IDL set to ""] + expected: FAIL + + [iframe.accessKey: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.accessKey: IDL set to undefined] + expected: FAIL + + [iframe.accessKey: IDL set to 7] + expected: FAIL + + [iframe.accessKey: IDL set to 1.5] + expected: FAIL + + [iframe.accessKey: IDL set to true] + expected: FAIL + + [iframe.accessKey: IDL set to false] + expected: FAIL + + [iframe.accessKey: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.accessKey: IDL set to NaN] + expected: FAIL + + [iframe.accessKey: IDL set to Infinity] + expected: FAIL + + [iframe.accessKey: IDL set to -Infinity] + expected: FAIL + + [iframe.accessKey: IDL set to "\\0"] + expected: FAIL + + [iframe.accessKey: IDL set to null] + expected: FAIL + + [iframe.accessKey: IDL set to object "test-toString"] + expected: FAIL + + [iframe.accessKey: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.tabIndex: setAttribute() to -36] + expected: FAIL + + [iframe.tabIndex: setAttribute() to -1] + expected: FAIL + + [iframe.tabIndex: setAttribute() to 0] + expected: FAIL + + [iframe.tabIndex: setAttribute() to 1] + expected: FAIL + + [iframe.tabIndex: setAttribute() to 2147483647] + expected: FAIL + + [iframe.tabIndex: setAttribute() to -2147483648] + expected: FAIL + + [iframe.tabIndex: setAttribute() to "-1"] + expected: FAIL + + [iframe.tabIndex: setAttribute() to "-0"] + expected: FAIL + + [iframe.tabIndex: setAttribute() to "0"] + expected: FAIL + + [iframe.tabIndex: setAttribute() to "1"] + expected: FAIL + + [iframe.tabIndex: setAttribute() to "\\t7"] + expected: FAIL + + [iframe.tabIndex: setAttribute() to "\\f7"] + expected: FAIL + + [iframe.tabIndex: setAttribute() to " 7"] + expected: FAIL + + [iframe.tabIndex: setAttribute() to "\\n7"] + expected: FAIL + + [iframe.tabIndex: setAttribute() to "\\r7"] + expected: FAIL + + [iframe.tabIndex: setAttribute() to 1.5] + expected: FAIL + + [iframe.tabIndex: setAttribute() to object "2"] + expected: FAIL + + [iframe.tabIndex: IDL set to -36] + expected: FAIL + + [iframe.tabIndex: IDL set to -1] + expected: FAIL + + [iframe.tabIndex: IDL set to 0] + expected: FAIL + + [iframe.tabIndex: IDL set to 1] + expected: FAIL + + [iframe.tabIndex: IDL set to 2147483647] + expected: FAIL + + [iframe.tabIndex: IDL set to -2147483648] + expected: FAIL + + [iframe.src: setAttribute() to ""] + expected: FAIL + + [iframe.src: setAttribute() to " foo "] + expected: FAIL + + [iframe.src: setAttribute() to "//site.example/path???@#l"] + expected: FAIL + + [iframe.src: setAttribute() to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [iframe.src: setAttribute() to undefined] + expected: FAIL + + [iframe.src: setAttribute() to 7] + expected: FAIL + + [iframe.src: setAttribute() to 1.5] + expected: FAIL + + [iframe.src: setAttribute() to true] + expected: FAIL + + [iframe.src: setAttribute() to false] + expected: FAIL + + [iframe.src: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.src: setAttribute() to NaN] + expected: FAIL + + [iframe.src: setAttribute() to Infinity] + expected: FAIL + + [iframe.src: setAttribute() to -Infinity] + expected: FAIL + + [iframe.src: setAttribute() to "\\0"] + expected: FAIL + + [iframe.src: setAttribute() to null] + expected: FAIL + + [iframe.src: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.src: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.src: IDL set to ""] + expected: FAIL + + [iframe.src: IDL set to " foo "] + expected: FAIL + + [iframe.src: IDL set to "//site.example/path???@#l"] + expected: FAIL + + [iframe.src: IDL set to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [iframe.src: IDL set to undefined] + expected: FAIL + + [iframe.src: IDL set to 7] + expected: FAIL + + [iframe.src: IDL set to 1.5] + expected: FAIL + + [iframe.src: IDL set to true] + expected: FAIL + + [iframe.src: IDL set to false] + expected: FAIL + + [iframe.src: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.src: IDL set to NaN] + expected: FAIL + + [iframe.src: IDL set to Infinity] + expected: FAIL + + [iframe.src: IDL set to -Infinity] + expected: FAIL + + [iframe.src: IDL set to "\\0"] + expected: FAIL + + [iframe.src: IDL set to null] + expected: FAIL + + [iframe.src: IDL set to object "test-toString"] + expected: FAIL + + [iframe.src: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.srcdoc: setAttribute() to ""] + expected: FAIL + + [iframe.srcdoc: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.srcdoc: setAttribute() to undefined] + expected: FAIL + + [iframe.srcdoc: setAttribute() to 7] + expected: FAIL + + [iframe.srcdoc: setAttribute() to 1.5] + expected: FAIL + + [iframe.srcdoc: setAttribute() to true] + expected: FAIL + + [iframe.srcdoc: setAttribute() to false] + expected: FAIL + + [iframe.srcdoc: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.srcdoc: setAttribute() to NaN] + expected: FAIL + + [iframe.srcdoc: setAttribute() to Infinity] + expected: FAIL + + [iframe.srcdoc: setAttribute() to -Infinity] + expected: FAIL + + [iframe.srcdoc: setAttribute() to "\\0"] + expected: FAIL + + [iframe.srcdoc: setAttribute() to null] + expected: FAIL + + [iframe.srcdoc: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.srcdoc: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.srcdoc: IDL set to ""] + expected: FAIL + + [iframe.srcdoc: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.srcdoc: IDL set to undefined] + expected: FAIL + + [iframe.srcdoc: IDL set to 7] + expected: FAIL + + [iframe.srcdoc: IDL set to 1.5] + expected: FAIL + + [iframe.srcdoc: IDL set to true] + expected: FAIL + + [iframe.srcdoc: IDL set to false] + expected: FAIL + + [iframe.srcdoc: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.srcdoc: IDL set to NaN] + expected: FAIL + + [iframe.srcdoc: IDL set to Infinity] + expected: FAIL + + [iframe.srcdoc: IDL set to -Infinity] + expected: FAIL + + [iframe.srcdoc: IDL set to "\\0"] + expected: FAIL + + [iframe.srcdoc: IDL set to null] + expected: FAIL + + [iframe.srcdoc: IDL set to object "test-toString"] + expected: FAIL + + [iframe.srcdoc: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.name: setAttribute() to ""] + expected: FAIL + + [iframe.name: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.name: setAttribute() to undefined] + expected: FAIL + + [iframe.name: setAttribute() to 7] + expected: FAIL + + [iframe.name: setAttribute() to 1.5] + expected: FAIL + + [iframe.name: setAttribute() to true] + expected: FAIL + + [iframe.name: setAttribute() to false] + expected: FAIL + + [iframe.name: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.name: setAttribute() to NaN] + expected: FAIL + + [iframe.name: setAttribute() to Infinity] + expected: FAIL + + [iframe.name: setAttribute() to -Infinity] + expected: FAIL + + [iframe.name: setAttribute() to "\\0"] + expected: FAIL + + [iframe.name: setAttribute() to null] + expected: FAIL + + [iframe.name: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.name: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.name: IDL set to ""] + expected: FAIL + + [iframe.name: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.name: IDL set to undefined] + expected: FAIL + + [iframe.name: IDL set to 7] + expected: FAIL + + [iframe.name: IDL set to 1.5] + expected: FAIL + + [iframe.name: IDL set to true] + expected: FAIL + + [iframe.name: IDL set to false] + expected: FAIL + + [iframe.name: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.name: IDL set to NaN] + expected: FAIL + + [iframe.name: IDL set to Infinity] + expected: FAIL + + [iframe.name: IDL set to -Infinity] + expected: FAIL + + [iframe.name: IDL set to "\\0"] + expected: FAIL + + [iframe.name: IDL set to null] + expected: FAIL + + [iframe.name: IDL set to object "test-toString"] + expected: FAIL + + [iframe.name: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to ""] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to " foo "] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to undefined] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to null] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to 7] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to 1.5] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to true] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to false] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to NaN] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to Infinity] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to -Infinity] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to "\\0"] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.allowFullscreen: setAttribute() to "allowFullscreen"] + expected: FAIL + + [iframe.allowFullscreen: IDL set to ""] + expected: FAIL + + [iframe.allowFullscreen: IDL set to " foo "] + expected: FAIL + + [iframe.allowFullscreen: IDL set to undefined] + expected: FAIL + + [iframe.allowFullscreen: IDL set to null] + expected: FAIL + + [iframe.allowFullscreen: IDL set to 7] + expected: FAIL + + [iframe.allowFullscreen: IDL set to 1.5] + expected: FAIL + + [iframe.allowFullscreen: IDL set to false] + expected: FAIL + + [iframe.allowFullscreen: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.allowFullscreen: IDL set to NaN] + expected: FAIL + + [iframe.allowFullscreen: IDL set to Infinity] + expected: FAIL + + [iframe.allowFullscreen: IDL set to -Infinity] + expected: FAIL + + [iframe.allowFullscreen: IDL set to "\\0"] + expected: FAIL + + [iframe.allowFullscreen: IDL set to object "test-toString"] + expected: FAIL + + [iframe.allowFullscreen: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.align: setAttribute() to ""] + expected: FAIL + + [iframe.align: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.align: setAttribute() to undefined] + expected: FAIL + + [iframe.align: setAttribute() to 7] + expected: FAIL + + [iframe.align: setAttribute() to 1.5] + expected: FAIL + + [iframe.align: setAttribute() to true] + expected: FAIL + + [iframe.align: setAttribute() to false] + expected: FAIL + + [iframe.align: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.align: setAttribute() to NaN] + expected: FAIL + + [iframe.align: setAttribute() to Infinity] + expected: FAIL + + [iframe.align: setAttribute() to -Infinity] + expected: FAIL + + [iframe.align: setAttribute() to "\\0"] + expected: FAIL + + [iframe.align: setAttribute() to null] + expected: FAIL + + [iframe.align: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.align: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.align: IDL set to ""] + expected: FAIL + + [iframe.align: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.align: IDL set to undefined] + expected: FAIL + + [iframe.align: IDL set to 7] + expected: FAIL + + [iframe.align: IDL set to 1.5] + expected: FAIL + + [iframe.align: IDL set to true] + expected: FAIL + + [iframe.align: IDL set to false] + expected: FAIL + + [iframe.align: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.align: IDL set to NaN] + expected: FAIL + + [iframe.align: IDL set to Infinity] + expected: FAIL + + [iframe.align: IDL set to -Infinity] + expected: FAIL + + [iframe.align: IDL set to "\\0"] + expected: FAIL + + [iframe.align: IDL set to null] + expected: FAIL + + [iframe.align: IDL set to object "test-toString"] + expected: FAIL + + [iframe.align: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.scrolling: setAttribute() to ""] + expected: FAIL + + [iframe.scrolling: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.scrolling: setAttribute() to undefined] + expected: FAIL + + [iframe.scrolling: setAttribute() to 7] + expected: FAIL + + [iframe.scrolling: setAttribute() to 1.5] + expected: FAIL + + [iframe.scrolling: setAttribute() to true] + expected: FAIL + + [iframe.scrolling: setAttribute() to false] + expected: FAIL + + [iframe.scrolling: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.scrolling: setAttribute() to NaN] + expected: FAIL + + [iframe.scrolling: setAttribute() to Infinity] + expected: FAIL + + [iframe.scrolling: setAttribute() to -Infinity] + expected: FAIL + + [iframe.scrolling: setAttribute() to "\\0"] + expected: FAIL + + [iframe.scrolling: setAttribute() to null] + expected: FAIL + + [iframe.scrolling: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.scrolling: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.scrolling: IDL set to ""] + expected: FAIL + + [iframe.scrolling: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.scrolling: IDL set to undefined] + expected: FAIL + + [iframe.scrolling: IDL set to 7] + expected: FAIL + + [iframe.scrolling: IDL set to 1.5] + expected: FAIL + + [iframe.scrolling: IDL set to true] + expected: FAIL + + [iframe.scrolling: IDL set to false] + expected: FAIL + + [iframe.scrolling: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.scrolling: IDL set to NaN] + expected: FAIL + + [iframe.scrolling: IDL set to Infinity] + expected: FAIL + + [iframe.scrolling: IDL set to -Infinity] + expected: FAIL + + [iframe.scrolling: IDL set to "\\0"] + expected: FAIL + + [iframe.scrolling: IDL set to null] + expected: FAIL + + [iframe.scrolling: IDL set to object "test-toString"] + expected: FAIL + + [iframe.scrolling: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.longDesc: setAttribute() to ""] + expected: FAIL + + [iframe.longDesc: setAttribute() to " foo "] + expected: FAIL + + [iframe.longDesc: setAttribute() to "http://site.example/"] + expected: FAIL + + [iframe.longDesc: setAttribute() to "//site.example/path???@#l"] + expected: FAIL + + [iframe.longDesc: setAttribute() to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [iframe.longDesc: setAttribute() to undefined] + expected: FAIL + + [iframe.longDesc: setAttribute() to 7] + expected: FAIL + + [iframe.longDesc: setAttribute() to 1.5] + expected: FAIL + + [iframe.longDesc: setAttribute() to true] + expected: FAIL + + [iframe.longDesc: setAttribute() to false] + expected: FAIL + + [iframe.longDesc: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.longDesc: setAttribute() to NaN] + expected: FAIL + + [iframe.longDesc: setAttribute() to Infinity] + expected: FAIL + + [iframe.longDesc: setAttribute() to -Infinity] + expected: FAIL + + [iframe.longDesc: setAttribute() to "\\0"] + expected: FAIL + + [iframe.longDesc: setAttribute() to null] + expected: FAIL + + [iframe.longDesc: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.longDesc: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.longDesc: IDL set to ""] + expected: FAIL + + [iframe.longDesc: IDL set to " foo "] + expected: FAIL + + [iframe.longDesc: IDL set to "http://site.example/"] + expected: FAIL + + [iframe.longDesc: IDL set to "//site.example/path???@#l"] + expected: FAIL + + [iframe.longDesc: IDL set to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [iframe.longDesc: IDL set to undefined] + expected: FAIL + + [iframe.longDesc: IDL set to 7] + expected: FAIL + + [iframe.longDesc: IDL set to 1.5] + expected: FAIL + + [iframe.longDesc: IDL set to true] + expected: FAIL + + [iframe.longDesc: IDL set to false] + expected: FAIL + + [iframe.longDesc: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.longDesc: IDL set to NaN] + expected: FAIL + + [iframe.longDesc: IDL set to Infinity] + expected: FAIL + + [iframe.longDesc: IDL set to -Infinity] + expected: FAIL + + [iframe.longDesc: IDL set to "\\0"] + expected: FAIL + + [iframe.longDesc: IDL set to null] + expected: FAIL + + [iframe.longDesc: IDL set to object "test-toString"] + expected: FAIL + + [iframe.longDesc: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.marginHeight: setAttribute() to ""] + expected: FAIL + + [iframe.marginHeight: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.marginHeight: setAttribute() to undefined] + expected: FAIL + + [iframe.marginHeight: setAttribute() to 7] + expected: FAIL + + [iframe.marginHeight: setAttribute() to 1.5] + expected: FAIL + + [iframe.marginHeight: setAttribute() to true] + expected: FAIL + + [iframe.marginHeight: setAttribute() to false] + expected: FAIL + + [iframe.marginHeight: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.marginHeight: setAttribute() to NaN] + expected: FAIL + + [iframe.marginHeight: setAttribute() to Infinity] + expected: FAIL + + [iframe.marginHeight: setAttribute() to -Infinity] + expected: FAIL + + [iframe.marginHeight: setAttribute() to "\\0"] + expected: FAIL + + [iframe.marginHeight: setAttribute() to null] + expected: FAIL + + [iframe.marginHeight: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.marginHeight: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.marginHeight: IDL set to ""] + expected: FAIL + + [iframe.marginHeight: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.marginHeight: IDL set to undefined] + expected: FAIL + + [iframe.marginHeight: IDL set to 7] + expected: FAIL + + [iframe.marginHeight: IDL set to 1.5] + expected: FAIL + + [iframe.marginHeight: IDL set to true] + expected: FAIL + + [iframe.marginHeight: IDL set to false] + expected: FAIL + + [iframe.marginHeight: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.marginHeight: IDL set to NaN] + expected: FAIL + + [iframe.marginHeight: IDL set to Infinity] + expected: FAIL + + [iframe.marginHeight: IDL set to -Infinity] + expected: FAIL + + [iframe.marginHeight: IDL set to "\\0"] + expected: FAIL + + [iframe.marginHeight: IDL set to null] + expected: FAIL + + [iframe.marginHeight: IDL set to object "test-toString"] + expected: FAIL + + [iframe.marginHeight: IDL set to object "test-valueOf"] + expected: FAIL + + [iframe.marginWidth: setAttribute() to ""] + expected: FAIL + + [iframe.marginWidth: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.marginWidth: setAttribute() to undefined] + expected: FAIL + + [iframe.marginWidth: setAttribute() to 7] + expected: FAIL + + [iframe.marginWidth: setAttribute() to 1.5] + expected: FAIL + + [iframe.marginWidth: setAttribute() to true] + expected: FAIL + + [iframe.marginWidth: setAttribute() to false] + expected: FAIL + + [iframe.marginWidth: setAttribute() to object "[object Object\]"] + expected: FAIL + + [iframe.marginWidth: setAttribute() to NaN] + expected: FAIL + + [iframe.marginWidth: setAttribute() to Infinity] + expected: FAIL + + [iframe.marginWidth: setAttribute() to -Infinity] + expected: FAIL + + [iframe.marginWidth: setAttribute() to "\\0"] + expected: FAIL + + [iframe.marginWidth: setAttribute() to null] + expected: FAIL + + [iframe.marginWidth: setAttribute() to object "test-toString"] + expected: FAIL + + [iframe.marginWidth: setAttribute() to object "test-valueOf"] + expected: FAIL + + [iframe.marginWidth: IDL set to ""] + expected: FAIL + + [iframe.marginWidth: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [iframe.marginWidth: IDL set to undefined] + expected: FAIL + + [iframe.marginWidth: IDL set to 7] + expected: FAIL + + [iframe.marginWidth: IDL set to 1.5] + expected: FAIL + + [iframe.marginWidth: IDL set to true] + expected: FAIL + + [iframe.marginWidth: IDL set to false] + expected: FAIL + + [iframe.marginWidth: IDL set to object "[object Object\]"] + expected: FAIL + + [iframe.marginWidth: IDL set to NaN] + expected: FAIL + + [iframe.marginWidth: IDL set to Infinity] + expected: FAIL + + [iframe.marginWidth: IDL set to -Infinity] + expected: FAIL + + [iframe.marginWidth: IDL set to "\\0"] + expected: FAIL + + [iframe.marginWidth: IDL set to null] + expected: FAIL + + [iframe.marginWidth: IDL set to object "test-toString"] + expected: FAIL + + [iframe.marginWidth: IDL set to object "test-valueOf"] + expected: FAIL + + [embed.dir: setAttribute() to ""] + expected: FAIL + + [embed.dir: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.dir: setAttribute() to undefined] + expected: FAIL + + [embed.dir: setAttribute() to 7] + expected: FAIL + + [embed.dir: setAttribute() to 1.5] + expected: FAIL + + [embed.dir: setAttribute() to true] + expected: FAIL + + [embed.dir: setAttribute() to false] + expected: FAIL + + [embed.dir: setAttribute() to object "[object Object\]"] + expected: FAIL + + [embed.dir: setAttribute() to NaN] + expected: FAIL + + [embed.dir: setAttribute() to Infinity] + expected: FAIL + + [embed.dir: setAttribute() to -Infinity] + expected: FAIL + + [embed.dir: setAttribute() to "\\0"] + expected: FAIL + + [embed.dir: setAttribute() to null] + expected: FAIL + + [embed.dir: setAttribute() to object "test-toString"] + expected: FAIL + + [embed.dir: setAttribute() to object "test-valueOf"] + expected: FAIL + + [embed.dir: setAttribute() to "ltr"] + expected: FAIL + + [embed.dir: setAttribute() to "xltr"] + expected: FAIL + + [embed.dir: setAttribute() to "ltr\\0"] + expected: FAIL + + [embed.dir: setAttribute() to "tr"] + expected: FAIL + + [embed.dir: setAttribute() to "LTR"] + expected: FAIL + + [embed.dir: setAttribute() to "rtl"] + expected: FAIL + + [embed.dir: setAttribute() to "xrtl"] + expected: FAIL + + [embed.dir: setAttribute() to "rtl\\0"] + expected: FAIL + + [embed.dir: setAttribute() to "tl"] + expected: FAIL + + [embed.dir: setAttribute() to "RTL"] + expected: FAIL + + [embed.dir: setAttribute() to "auto"] + expected: FAIL + + [embed.dir: setAttribute() to "xauto"] + expected: FAIL + + [embed.dir: setAttribute() to "auto\\0"] + expected: FAIL + + [embed.dir: setAttribute() to "uto"] + expected: FAIL + + [embed.dir: setAttribute() to "AUTO"] + expected: FAIL + + [embed.dir: IDL set to ""] + expected: FAIL + + [embed.dir: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.dir: IDL set to undefined] + expected: FAIL + + [embed.dir: IDL set to 7] + expected: FAIL + + [embed.dir: IDL set to 1.5] + expected: FAIL + + [embed.dir: IDL set to true] + expected: FAIL + + [embed.dir: IDL set to false] + expected: FAIL + + [embed.dir: IDL set to object "[object Object\]"] + expected: FAIL + + [embed.dir: IDL set to NaN] + expected: FAIL + + [embed.dir: IDL set to Infinity] + expected: FAIL + + [embed.dir: IDL set to -Infinity] + expected: FAIL + + [embed.dir: IDL set to "\\0"] + expected: FAIL + + [embed.dir: IDL set to null] + expected: FAIL + + [embed.dir: IDL set to object "test-toString"] + expected: FAIL + + [embed.dir: IDL set to object "test-valueOf"] + expected: FAIL + + [embed.dir: IDL set to "ltr"] + expected: FAIL + + [embed.dir: IDL set to "xltr"] + expected: FAIL + + [embed.dir: IDL set to "ltr\\0"] + expected: FAIL + + [embed.dir: IDL set to "tr"] + expected: FAIL + + [embed.dir: IDL set to "LTR"] + expected: FAIL + + [embed.dir: IDL set to "rtl"] + expected: FAIL + + [embed.dir: IDL set to "xrtl"] + expected: FAIL + + [embed.dir: IDL set to "rtl\\0"] + expected: FAIL + + [embed.dir: IDL set to "tl"] + expected: FAIL + + [embed.dir: IDL set to "RTL"] + expected: FAIL + + [embed.dir: IDL set to "auto"] + expected: FAIL + + [embed.dir: IDL set to "xauto"] + expected: FAIL + + [embed.dir: IDL set to "auto\\0"] + expected: FAIL + + [embed.dir: IDL set to "uto"] + expected: FAIL + + [embed.dir: IDL set to "AUTO"] + expected: FAIL + + [embed.accessKey: setAttribute() to ""] + expected: FAIL + + [embed.accessKey: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.accessKey: setAttribute() to undefined] + expected: FAIL + + [embed.accessKey: setAttribute() to 7] + expected: FAIL + + [embed.accessKey: setAttribute() to 1.5] + expected: FAIL + + [embed.accessKey: setAttribute() to true] + expected: FAIL + + [embed.accessKey: setAttribute() to false] + expected: FAIL + + [embed.accessKey: setAttribute() to object "[object Object\]"] + expected: FAIL + + [embed.accessKey: setAttribute() to NaN] + expected: FAIL + + [embed.accessKey: setAttribute() to Infinity] + expected: FAIL + + [embed.accessKey: setAttribute() to -Infinity] + expected: FAIL + + [embed.accessKey: setAttribute() to "\\0"] + expected: FAIL + + [embed.accessKey: setAttribute() to null] + expected: FAIL + + [embed.accessKey: setAttribute() to object "test-toString"] + expected: FAIL + + [embed.accessKey: setAttribute() to object "test-valueOf"] + expected: FAIL + + [embed.accessKey: IDL set to ""] + expected: FAIL + + [embed.accessKey: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.accessKey: IDL set to undefined] + expected: FAIL + + [embed.accessKey: IDL set to 7] + expected: FAIL + + [embed.accessKey: IDL set to 1.5] + expected: FAIL + + [embed.accessKey: IDL set to true] + expected: FAIL + + [embed.accessKey: IDL set to false] + expected: FAIL + + [embed.accessKey: IDL set to object "[object Object\]"] + expected: FAIL + + [embed.accessKey: IDL set to NaN] + expected: FAIL + + [embed.accessKey: IDL set to Infinity] + expected: FAIL + + [embed.accessKey: IDL set to -Infinity] + expected: FAIL + + [embed.accessKey: IDL set to "\\0"] + expected: FAIL + + [embed.accessKey: IDL set to null] + expected: FAIL + + [embed.accessKey: IDL set to object "test-toString"] + expected: FAIL + + [embed.accessKey: IDL set to object "test-valueOf"] + expected: FAIL + + [embed.tabIndex: setAttribute() to -36] + expected: FAIL + + [embed.tabIndex: setAttribute() to -1] + expected: FAIL + + [embed.tabIndex: setAttribute() to 0] + expected: FAIL + + [embed.tabIndex: setAttribute() to 1] + expected: FAIL + + [embed.tabIndex: setAttribute() to 2147483647] + expected: FAIL + + [embed.tabIndex: setAttribute() to -2147483648] + expected: FAIL + + [embed.tabIndex: setAttribute() to "-1"] + expected: FAIL + + [embed.tabIndex: setAttribute() to "-0"] + expected: FAIL + + [embed.tabIndex: setAttribute() to "0"] + expected: FAIL + + [embed.tabIndex: setAttribute() to "1"] + expected: FAIL + + [embed.tabIndex: setAttribute() to "\\t7"] + expected: FAIL + + [embed.tabIndex: setAttribute() to "\\f7"] + expected: FAIL + + [embed.tabIndex: setAttribute() to " 7"] + expected: FAIL + + [embed.tabIndex: setAttribute() to "\\n7"] + expected: FAIL + + [embed.tabIndex: setAttribute() to "\\r7"] + expected: FAIL + + [embed.tabIndex: setAttribute() to 1.5] + expected: FAIL + + [embed.tabIndex: setAttribute() to object "2"] + expected: FAIL + + [embed.tabIndex: IDL set to -36] + expected: FAIL + + [embed.tabIndex: IDL set to -1] + expected: FAIL + + [embed.tabIndex: IDL set to 0] + expected: FAIL + + [embed.tabIndex: IDL set to 1] + expected: FAIL + + [embed.tabIndex: IDL set to 2147483647] + expected: FAIL + + [embed.tabIndex: IDL set to -2147483648] + expected: FAIL + + [embed.src: setAttribute() to ""] + expected: FAIL + + [embed.src: setAttribute() to " foo "] + expected: FAIL + + [embed.src: setAttribute() to "http://site.example/"] + expected: FAIL + + [embed.src: setAttribute() to "//site.example/path???@#l"] + expected: FAIL + + [embed.src: setAttribute() to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [embed.src: setAttribute() to undefined] + expected: FAIL + + [embed.src: setAttribute() to 7] + expected: FAIL + + [embed.src: setAttribute() to 1.5] + expected: FAIL + + [embed.src: setAttribute() to true] + expected: FAIL + + [embed.src: setAttribute() to false] + expected: FAIL + + [embed.src: setAttribute() to object "[object Object\]"] + expected: FAIL + + [embed.src: setAttribute() to NaN] + expected: FAIL + + [embed.src: setAttribute() to Infinity] + expected: FAIL + + [embed.src: setAttribute() to -Infinity] + expected: FAIL + + [embed.src: setAttribute() to "\\0"] + expected: FAIL + + [embed.src: setAttribute() to null] + expected: FAIL + + [embed.src: setAttribute() to object "test-toString"] + expected: FAIL + + [embed.src: setAttribute() to object "test-valueOf"] + expected: FAIL + + [embed.src: IDL set to ""] + expected: FAIL + + [embed.src: IDL set to " foo "] + expected: FAIL + + [embed.src: IDL set to "http://site.example/"] + expected: FAIL + + [embed.src: IDL set to "//site.example/path???@#l"] + expected: FAIL + + [embed.src: IDL set to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [embed.src: IDL set to undefined] + expected: FAIL + + [embed.src: IDL set to 7] + expected: FAIL + + [embed.src: IDL set to 1.5] + expected: FAIL + + [embed.src: IDL set to true] + expected: FAIL + + [embed.src: IDL set to false] + expected: FAIL + + [embed.src: IDL set to object "[object Object\]"] + expected: FAIL + + [embed.src: IDL set to NaN] + expected: FAIL + + [embed.src: IDL set to Infinity] + expected: FAIL + + [embed.src: IDL set to -Infinity] + expected: FAIL + + [embed.src: IDL set to "\\0"] + expected: FAIL + + [embed.src: IDL set to null] + expected: FAIL + + [embed.src: IDL set to object "test-toString"] + expected: FAIL + + [embed.src: IDL set to object "test-valueOf"] + expected: FAIL + + [embed.type: setAttribute() to ""] + expected: FAIL + + [embed.type: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.type: setAttribute() to undefined] + expected: FAIL + + [embed.type: setAttribute() to 7] + expected: FAIL + + [embed.type: setAttribute() to 1.5] + expected: FAIL + + [embed.type: setAttribute() to true] + expected: FAIL + + [embed.type: setAttribute() to false] + expected: FAIL + + [embed.type: setAttribute() to object "[object Object\]"] + expected: FAIL + + [embed.type: setAttribute() to NaN] + expected: FAIL + + [embed.type: setAttribute() to Infinity] + expected: FAIL + + [embed.type: setAttribute() to -Infinity] + expected: FAIL + + [embed.type: setAttribute() to "\\0"] + expected: FAIL + + [embed.type: setAttribute() to null] + expected: FAIL + + [embed.type: setAttribute() to object "test-toString"] + expected: FAIL + + [embed.type: setAttribute() to object "test-valueOf"] + expected: FAIL + + [embed.type: IDL set to ""] + expected: FAIL + + [embed.type: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.type: IDL set to undefined] + expected: FAIL + + [embed.type: IDL set to 7] + expected: FAIL + + [embed.type: IDL set to 1.5] + expected: FAIL + + [embed.type: IDL set to true] + expected: FAIL + + [embed.type: IDL set to false] + expected: FAIL + + [embed.type: IDL set to object "[object Object\]"] + expected: FAIL + + [embed.type: IDL set to NaN] + expected: FAIL + + [embed.type: IDL set to Infinity] + expected: FAIL + + [embed.type: IDL set to -Infinity] + expected: FAIL + + [embed.type: IDL set to "\\0"] + expected: FAIL + + [embed.type: IDL set to null] + expected: FAIL + + [embed.type: IDL set to object "test-toString"] + expected: FAIL + + [embed.type: IDL set to object "test-valueOf"] + expected: FAIL + + [embed.width: setAttribute() to ""] + expected: FAIL + + [embed.width: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.width: setAttribute() to undefined] + expected: FAIL + + [embed.width: setAttribute() to 7] + expected: FAIL + + [embed.width: setAttribute() to 1.5] + expected: FAIL + + [embed.width: setAttribute() to true] + expected: FAIL + + [embed.width: setAttribute() to false] + expected: FAIL + + [embed.width: setAttribute() to object "[object Object\]"] + expected: FAIL + + [embed.width: setAttribute() to NaN] + expected: FAIL + + [embed.width: setAttribute() to Infinity] + expected: FAIL + + [embed.width: setAttribute() to -Infinity] + expected: FAIL + + [embed.width: setAttribute() to "\\0"] + expected: FAIL + + [embed.width: setAttribute() to null] + expected: FAIL + + [embed.width: setAttribute() to object "test-toString"] + expected: FAIL + + [embed.width: setAttribute() to object "test-valueOf"] + expected: FAIL + + [embed.width: IDL set to ""] + expected: FAIL + + [embed.width: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.width: IDL set to undefined] + expected: FAIL + + [embed.width: IDL set to 7] + expected: FAIL + + [embed.width: IDL set to 1.5] + expected: FAIL + + [embed.width: IDL set to true] + expected: FAIL + + [embed.width: IDL set to false] + expected: FAIL + + [embed.width: IDL set to object "[object Object\]"] + expected: FAIL + + [embed.width: IDL set to NaN] + expected: FAIL + + [embed.width: IDL set to Infinity] + expected: FAIL + + [embed.width: IDL set to -Infinity] + expected: FAIL + + [embed.width: IDL set to "\\0"] + expected: FAIL + + [embed.width: IDL set to null] + expected: FAIL + + [embed.width: IDL set to object "test-toString"] + expected: FAIL + + [embed.width: IDL set to object "test-valueOf"] + expected: FAIL + + [embed.height: setAttribute() to ""] + expected: FAIL + + [embed.height: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.height: setAttribute() to undefined] + expected: FAIL + + [embed.height: setAttribute() to 7] + expected: FAIL + + [embed.height: setAttribute() to 1.5] + expected: FAIL + + [embed.height: setAttribute() to true] + expected: FAIL + + [embed.height: setAttribute() to false] + expected: FAIL + + [embed.height: setAttribute() to object "[object Object\]"] + expected: FAIL + + [embed.height: setAttribute() to NaN] + expected: FAIL + + [embed.height: setAttribute() to Infinity] + expected: FAIL + + [embed.height: setAttribute() to -Infinity] + expected: FAIL + + [embed.height: setAttribute() to "\\0"] + expected: FAIL + + [embed.height: setAttribute() to null] + expected: FAIL + + [embed.height: setAttribute() to object "test-toString"] + expected: FAIL + + [embed.height: setAttribute() to object "test-valueOf"] + expected: FAIL + + [embed.height: IDL set to ""] + expected: FAIL + + [embed.height: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.height: IDL set to undefined] + expected: FAIL + + [embed.height: IDL set to 7] + expected: FAIL + + [embed.height: IDL set to 1.5] + expected: FAIL + + [embed.height: IDL set to true] + expected: FAIL + + [embed.height: IDL set to false] + expected: FAIL + + [embed.height: IDL set to object "[object Object\]"] + expected: FAIL + + [embed.height: IDL set to NaN] + expected: FAIL + + [embed.height: IDL set to Infinity] + expected: FAIL + + [embed.height: IDL set to -Infinity] + expected: FAIL + + [embed.height: IDL set to "\\0"] + expected: FAIL + + [embed.height: IDL set to null] + expected: FAIL + + [embed.height: IDL set to object "test-toString"] + expected: FAIL + + [embed.height: IDL set to object "test-valueOf"] + expected: FAIL + + [embed.align: setAttribute() to ""] + expected: FAIL + + [embed.align: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.align: setAttribute() to undefined] + expected: FAIL + + [embed.align: setAttribute() to 7] + expected: FAIL + + [embed.align: setAttribute() to 1.5] + expected: FAIL + + [embed.align: setAttribute() to true] + expected: FAIL + + [embed.align: setAttribute() to false] + expected: FAIL + + [embed.align: setAttribute() to object "[object Object\]"] + expected: FAIL + + [embed.align: setAttribute() to NaN] + expected: FAIL + + [embed.align: setAttribute() to Infinity] + expected: FAIL + + [embed.align: setAttribute() to -Infinity] + expected: FAIL + + [embed.align: setAttribute() to "\\0"] + expected: FAIL + + [embed.align: setAttribute() to null] + expected: FAIL + + [embed.align: setAttribute() to object "test-toString"] + expected: FAIL + + [embed.align: setAttribute() to object "test-valueOf"] + expected: FAIL + + [embed.align: IDL set to ""] + expected: FAIL + + [embed.align: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.align: IDL set to undefined] + expected: FAIL + + [embed.align: IDL set to 7] + expected: FAIL + + [embed.align: IDL set to 1.5] + expected: FAIL + + [embed.align: IDL set to true] + expected: FAIL + + [embed.align: IDL set to false] + expected: FAIL + + [embed.align: IDL set to object "[object Object\]"] + expected: FAIL + + [embed.align: IDL set to NaN] + expected: FAIL + + [embed.align: IDL set to Infinity] + expected: FAIL + + [embed.align: IDL set to -Infinity] + expected: FAIL + + [embed.align: IDL set to "\\0"] + expected: FAIL + + [embed.align: IDL set to null] + expected: FAIL + + [embed.align: IDL set to object "test-toString"] + expected: FAIL + + [embed.align: IDL set to object "test-valueOf"] + expected: FAIL + + [embed.name: setAttribute() to ""] + expected: FAIL + + [embed.name: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.name: setAttribute() to undefined] + expected: FAIL + + [embed.name: setAttribute() to 7] + expected: FAIL + + [embed.name: setAttribute() to 1.5] + expected: FAIL + + [embed.name: setAttribute() to true] + expected: FAIL + + [embed.name: setAttribute() to false] + expected: FAIL + + [embed.name: setAttribute() to object "[object Object\]"] + expected: FAIL + + [embed.name: setAttribute() to NaN] + expected: FAIL + + [embed.name: setAttribute() to Infinity] + expected: FAIL + + [embed.name: setAttribute() to -Infinity] + expected: FAIL + + [embed.name: setAttribute() to "\\0"] + expected: FAIL + + [embed.name: setAttribute() to null] + expected: FAIL + + [embed.name: setAttribute() to object "test-toString"] + expected: FAIL + + [embed.name: setAttribute() to object "test-valueOf"] + expected: FAIL + + [embed.name: IDL set to ""] + expected: FAIL + + [embed.name: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [embed.name: IDL set to undefined] + expected: FAIL + + [embed.name: IDL set to 7] + expected: FAIL + + [embed.name: IDL set to 1.5] + expected: FAIL + + [embed.name: IDL set to true] + expected: FAIL + + [embed.name: IDL set to false] + expected: FAIL + + [embed.name: IDL set to object "[object Object\]"] + expected: FAIL + + [embed.name: IDL set to NaN] + expected: FAIL + + [embed.name: IDL set to Infinity] + expected: FAIL + + [embed.name: IDL set to -Infinity] + expected: FAIL + + [embed.name: IDL set to "\\0"] + expected: FAIL + + [embed.name: IDL set to null] + expected: FAIL + + [embed.name: IDL set to object "test-toString"] + expected: FAIL + + [embed.name: IDL set to object "test-valueOf"] + expected: FAIL + + [object.dir: setAttribute() to ""] + expected: FAIL + + [object.dir: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.dir: setAttribute() to undefined] + expected: FAIL + + [object.dir: setAttribute() to 7] + expected: FAIL + + [object.dir: setAttribute() to 1.5] + expected: FAIL + + [object.dir: setAttribute() to true] + expected: FAIL + + [object.dir: setAttribute() to false] + expected: FAIL + + [object.dir: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.dir: setAttribute() to NaN] + expected: FAIL + + [object.dir: setAttribute() to Infinity] + expected: FAIL + + [object.dir: setAttribute() to -Infinity] + expected: FAIL + + [object.dir: setAttribute() to "\\0"] + expected: FAIL + + [object.dir: setAttribute() to null] + expected: FAIL + + [object.dir: setAttribute() to object "test-toString"] + expected: FAIL + + [object.dir: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.dir: setAttribute() to "ltr"] + expected: FAIL + + [object.dir: setAttribute() to "xltr"] + expected: FAIL + + [object.dir: setAttribute() to "ltr\\0"] + expected: FAIL + + [object.dir: setAttribute() to "tr"] + expected: FAIL + + [object.dir: setAttribute() to "LTR"] + expected: FAIL + + [object.dir: setAttribute() to "rtl"] + expected: FAIL + + [object.dir: setAttribute() to "xrtl"] + expected: FAIL + + [object.dir: setAttribute() to "rtl\\0"] + expected: FAIL + + [object.dir: setAttribute() to "tl"] + expected: FAIL + + [object.dir: setAttribute() to "RTL"] + expected: FAIL + + [object.dir: setAttribute() to "auto"] + expected: FAIL + + [object.dir: setAttribute() to "xauto"] + expected: FAIL + + [object.dir: setAttribute() to "auto\\0"] + expected: FAIL + + [object.dir: setAttribute() to "uto"] + expected: FAIL + + [object.dir: setAttribute() to "AUTO"] + expected: FAIL + + [object.dir: IDL set to ""] + expected: FAIL + + [object.dir: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.dir: IDL set to undefined] + expected: FAIL + + [object.dir: IDL set to 7] + expected: FAIL + + [object.dir: IDL set to 1.5] + expected: FAIL + + [object.dir: IDL set to true] + expected: FAIL + + [object.dir: IDL set to false] + expected: FAIL + + [object.dir: IDL set to object "[object Object\]"] + expected: FAIL + + [object.dir: IDL set to NaN] + expected: FAIL + + [object.dir: IDL set to Infinity] + expected: FAIL + + [object.dir: IDL set to -Infinity] + expected: FAIL + + [object.dir: IDL set to "\\0"] + expected: FAIL + + [object.dir: IDL set to null] + expected: FAIL + + [object.dir: IDL set to object "test-toString"] + expected: FAIL + + [object.dir: IDL set to object "test-valueOf"] + expected: FAIL + + [object.dir: IDL set to "ltr"] + expected: FAIL + + [object.dir: IDL set to "xltr"] + expected: FAIL + + [object.dir: IDL set to "ltr\\0"] + expected: FAIL + + [object.dir: IDL set to "tr"] + expected: FAIL + + [object.dir: IDL set to "LTR"] + expected: FAIL + + [object.dir: IDL set to "rtl"] + expected: FAIL + + [object.dir: IDL set to "xrtl"] + expected: FAIL + + [object.dir: IDL set to "rtl\\0"] + expected: FAIL + + [object.dir: IDL set to "tl"] + expected: FAIL + + [object.dir: IDL set to "RTL"] + expected: FAIL + + [object.dir: IDL set to "auto"] + expected: FAIL + + [object.dir: IDL set to "xauto"] + expected: FAIL + + [object.dir: IDL set to "auto\\0"] + expected: FAIL + + [object.dir: IDL set to "uto"] + expected: FAIL + + [object.dir: IDL set to "AUTO"] + expected: FAIL + + [object.accessKey: setAttribute() to ""] + expected: FAIL + + [object.accessKey: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.accessKey: setAttribute() to undefined] + expected: FAIL + + [object.accessKey: setAttribute() to 7] + expected: FAIL + + [object.accessKey: setAttribute() to 1.5] + expected: FAIL + + [object.accessKey: setAttribute() to true] + expected: FAIL + + [object.accessKey: setAttribute() to false] + expected: FAIL + + [object.accessKey: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.accessKey: setAttribute() to NaN] + expected: FAIL + + [object.accessKey: setAttribute() to Infinity] + expected: FAIL + + [object.accessKey: setAttribute() to -Infinity] + expected: FAIL + + [object.accessKey: setAttribute() to "\\0"] + expected: FAIL + + [object.accessKey: setAttribute() to null] + expected: FAIL + + [object.accessKey: setAttribute() to object "test-toString"] + expected: FAIL + + [object.accessKey: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.accessKey: IDL set to ""] + expected: FAIL + + [object.accessKey: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.accessKey: IDL set to undefined] + expected: FAIL + + [object.accessKey: IDL set to 7] + expected: FAIL + + [object.accessKey: IDL set to 1.5] + expected: FAIL + + [object.accessKey: IDL set to true] + expected: FAIL + + [object.accessKey: IDL set to false] + expected: FAIL + + [object.accessKey: IDL set to object "[object Object\]"] + expected: FAIL + + [object.accessKey: IDL set to NaN] + expected: FAIL + + [object.accessKey: IDL set to Infinity] + expected: FAIL + + [object.accessKey: IDL set to -Infinity] + expected: FAIL + + [object.accessKey: IDL set to "\\0"] + expected: FAIL + + [object.accessKey: IDL set to null] + expected: FAIL + + [object.accessKey: IDL set to object "test-toString"] + expected: FAIL + + [object.accessKey: IDL set to object "test-valueOf"] + expected: FAIL + + [object.tabIndex: setAttribute() to -36] + expected: FAIL + + [object.tabIndex: setAttribute() to -1] + expected: FAIL + + [object.tabIndex: setAttribute() to 0] + expected: FAIL + + [object.tabIndex: setAttribute() to 1] + expected: FAIL + + [object.tabIndex: setAttribute() to 2147483647] + expected: FAIL + + [object.tabIndex: setAttribute() to -2147483648] + expected: FAIL + + [object.tabIndex: setAttribute() to "-1"] + expected: FAIL + + [object.tabIndex: setAttribute() to "-0"] + expected: FAIL + + [object.tabIndex: setAttribute() to "0"] + expected: FAIL + + [object.tabIndex: setAttribute() to "1"] + expected: FAIL + + [object.tabIndex: setAttribute() to "\\t7"] + expected: FAIL + + [object.tabIndex: setAttribute() to "\\f7"] + expected: FAIL + + [object.tabIndex: setAttribute() to " 7"] + expected: FAIL + + [object.tabIndex: setAttribute() to "\\n7"] + expected: FAIL + + [object.tabIndex: setAttribute() to "\\r7"] + expected: FAIL + + [object.tabIndex: setAttribute() to 1.5] + expected: FAIL + + [object.tabIndex: setAttribute() to object "2"] + expected: FAIL + + [object.tabIndex: IDL set to -36] + expected: FAIL + + [object.tabIndex: IDL set to -1] + expected: FAIL + + [object.tabIndex: IDL set to 0] + expected: FAIL + + [object.tabIndex: IDL set to 1] + expected: FAIL + + [object.tabIndex: IDL set to 2147483647] + expected: FAIL + + [object.tabIndex: IDL set to -2147483648] + expected: FAIL + + [object.data: setAttribute() to ""] + expected: FAIL + + [object.data: setAttribute() to " foo "] + expected: FAIL + + [object.data: setAttribute() to "http://site.example/"] + expected: FAIL + + [object.data: setAttribute() to "//site.example/path???@#l"] + expected: FAIL + + [object.data: setAttribute() to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [object.data: setAttribute() to undefined] + expected: FAIL + + [object.data: setAttribute() to 7] + expected: FAIL + + [object.data: setAttribute() to 1.5] + expected: FAIL + + [object.data: setAttribute() to true] + expected: FAIL + + [object.data: setAttribute() to false] + expected: FAIL + + [object.data: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.data: setAttribute() to NaN] + expected: FAIL + + [object.data: setAttribute() to Infinity] + expected: FAIL + + [object.data: setAttribute() to -Infinity] + expected: FAIL + + [object.data: setAttribute() to "\\0"] + expected: FAIL + + [object.data: setAttribute() to null] + expected: FAIL + + [object.data: setAttribute() to object "test-toString"] + expected: FAIL + + [object.data: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.data: IDL set to ""] + expected: FAIL + + [object.data: IDL set to " foo "] + expected: FAIL + + [object.data: IDL set to "http://site.example/"] + expected: FAIL + + [object.data: IDL set to "//site.example/path???@#l"] + expected: FAIL + + [object.data: IDL set to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [object.data: IDL set to undefined] + expected: FAIL + + [object.data: IDL set to 7] + expected: FAIL + + [object.data: IDL set to 1.5] + expected: FAIL + + [object.data: IDL set to true] + expected: FAIL + + [object.data: IDL set to false] + expected: FAIL + + [object.data: IDL set to object "[object Object\]"] + expected: FAIL + + [object.data: IDL set to NaN] + expected: FAIL + + [object.data: IDL set to Infinity] + expected: FAIL + + [object.data: IDL set to -Infinity] + expected: FAIL + + [object.data: IDL set to "\\0"] + expected: FAIL + + [object.data: IDL set to null] + expected: FAIL + + [object.data: IDL set to object "test-toString"] + expected: FAIL + + [object.data: IDL set to object "test-valueOf"] + expected: FAIL + + [object.typeMustMatch: setAttribute() to ""] + expected: FAIL + + [object.typeMustMatch: setAttribute() to " foo "] + expected: FAIL + + [object.typeMustMatch: setAttribute() to undefined] + expected: FAIL + + [object.typeMustMatch: setAttribute() to null] + expected: FAIL + + [object.typeMustMatch: setAttribute() to 7] + expected: FAIL + + [object.typeMustMatch: setAttribute() to 1.5] + expected: FAIL + + [object.typeMustMatch: setAttribute() to true] + expected: FAIL + + [object.typeMustMatch: setAttribute() to false] + expected: FAIL + + [object.typeMustMatch: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.typeMustMatch: setAttribute() to NaN] + expected: FAIL + + [object.typeMustMatch: setAttribute() to Infinity] + expected: FAIL + + [object.typeMustMatch: setAttribute() to -Infinity] + expected: FAIL + + [object.typeMustMatch: setAttribute() to "\\0"] + expected: FAIL + + [object.typeMustMatch: setAttribute() to object "test-toString"] + expected: FAIL + + [object.typeMustMatch: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.typeMustMatch: setAttribute() to "typeMustMatch"] + expected: FAIL + + [object.typeMustMatch: IDL set to ""] + expected: FAIL + + [object.typeMustMatch: IDL set to " foo "] + expected: FAIL + + [object.typeMustMatch: IDL set to undefined] + expected: FAIL + + [object.typeMustMatch: IDL set to null] + expected: FAIL + + [object.typeMustMatch: IDL set to 7] + expected: FAIL + + [object.typeMustMatch: IDL set to 1.5] + expected: FAIL + + [object.typeMustMatch: IDL set to false] + expected: FAIL + + [object.typeMustMatch: IDL set to object "[object Object\]"] + expected: FAIL + + [object.typeMustMatch: IDL set to NaN] + expected: FAIL + + [object.typeMustMatch: IDL set to Infinity] + expected: FAIL + + [object.typeMustMatch: IDL set to -Infinity] + expected: FAIL + + [object.typeMustMatch: IDL set to "\\0"] + expected: FAIL + + [object.typeMustMatch: IDL set to object "test-toString"] + expected: FAIL + + [object.typeMustMatch: IDL set to object "test-valueOf"] + expected: FAIL + + [object.name: setAttribute() to ""] + expected: FAIL + + [object.name: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.name: setAttribute() to undefined] + expected: FAIL + + [object.name: setAttribute() to 7] + expected: FAIL + + [object.name: setAttribute() to 1.5] + expected: FAIL + + [object.name: setAttribute() to true] + expected: FAIL + + [object.name: setAttribute() to false] + expected: FAIL + + [object.name: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.name: setAttribute() to NaN] + expected: FAIL + + [object.name: setAttribute() to Infinity] + expected: FAIL + + [object.name: setAttribute() to -Infinity] + expected: FAIL + + [object.name: setAttribute() to "\\0"] + expected: FAIL + + [object.name: setAttribute() to null] + expected: FAIL + + [object.name: setAttribute() to object "test-toString"] + expected: FAIL + + [object.name: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.name: IDL set to ""] + expected: FAIL + + [object.name: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.name: IDL set to undefined] + expected: FAIL + + [object.name: IDL set to 7] + expected: FAIL + + [object.name: IDL set to 1.5] + expected: FAIL + + [object.name: IDL set to true] + expected: FAIL + + [object.name: IDL set to false] + expected: FAIL + + [object.name: IDL set to object "[object Object\]"] + expected: FAIL + + [object.name: IDL set to NaN] + expected: FAIL + + [object.name: IDL set to Infinity] + expected: FAIL + + [object.name: IDL set to -Infinity] + expected: FAIL + + [object.name: IDL set to "\\0"] + expected: FAIL + + [object.name: IDL set to null] + expected: FAIL + + [object.name: IDL set to object "test-toString"] + expected: FAIL + + [object.name: IDL set to object "test-valueOf"] + expected: FAIL + + [object.useMap: setAttribute() to ""] + expected: FAIL + + [object.useMap: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.useMap: setAttribute() to undefined] + expected: FAIL + + [object.useMap: setAttribute() to 7] + expected: FAIL + + [object.useMap: setAttribute() to 1.5] + expected: FAIL + + [object.useMap: setAttribute() to true] + expected: FAIL + + [object.useMap: setAttribute() to false] + expected: FAIL + + [object.useMap: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.useMap: setAttribute() to NaN] + expected: FAIL + + [object.useMap: setAttribute() to Infinity] + expected: FAIL + + [object.useMap: setAttribute() to -Infinity] + expected: FAIL + + [object.useMap: setAttribute() to "\\0"] + expected: FAIL + + [object.useMap: setAttribute() to null] + expected: FAIL + + [object.useMap: setAttribute() to object "test-toString"] + expected: FAIL + + [object.useMap: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.useMap: IDL set to ""] + expected: FAIL + + [object.useMap: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.useMap: IDL set to undefined] + expected: FAIL + + [object.useMap: IDL set to 7] + expected: FAIL + + [object.useMap: IDL set to 1.5] + expected: FAIL + + [object.useMap: IDL set to true] + expected: FAIL + + [object.useMap: IDL set to false] + expected: FAIL + + [object.useMap: IDL set to object "[object Object\]"] + expected: FAIL + + [object.useMap: IDL set to NaN] + expected: FAIL + + [object.useMap: IDL set to Infinity] + expected: FAIL + + [object.useMap: IDL set to -Infinity] + expected: FAIL + + [object.useMap: IDL set to "\\0"] + expected: FAIL + + [object.useMap: IDL set to null] + expected: FAIL + + [object.useMap: IDL set to object "test-toString"] + expected: FAIL + + [object.useMap: IDL set to object "test-valueOf"] + expected: FAIL + + [object.width: setAttribute() to ""] + expected: FAIL + + [object.width: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.width: setAttribute() to undefined] + expected: FAIL + + [object.width: setAttribute() to 7] + expected: FAIL + + [object.width: setAttribute() to 1.5] + expected: FAIL + + [object.width: setAttribute() to true] + expected: FAIL + + [object.width: setAttribute() to false] + expected: FAIL + + [object.width: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.width: setAttribute() to NaN] + expected: FAIL + + [object.width: setAttribute() to Infinity] + expected: FAIL + + [object.width: setAttribute() to -Infinity] + expected: FAIL + + [object.width: setAttribute() to "\\0"] + expected: FAIL + + [object.width: setAttribute() to null] + expected: FAIL + + [object.width: setAttribute() to object "test-toString"] + expected: FAIL + + [object.width: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.width: IDL set to ""] + expected: FAIL + + [object.width: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.width: IDL set to undefined] + expected: FAIL + + [object.width: IDL set to 7] + expected: FAIL + + [object.width: IDL set to 1.5] + expected: FAIL + + [object.width: IDL set to true] + expected: FAIL + + [object.width: IDL set to false] + expected: FAIL + + [object.width: IDL set to object "[object Object\]"] + expected: FAIL + + [object.width: IDL set to NaN] + expected: FAIL + + [object.width: IDL set to Infinity] + expected: FAIL + + [object.width: IDL set to -Infinity] + expected: FAIL + + [object.width: IDL set to "\\0"] + expected: FAIL + + [object.width: IDL set to null] + expected: FAIL + + [object.width: IDL set to object "test-toString"] + expected: FAIL + + [object.width: IDL set to object "test-valueOf"] + expected: FAIL + + [object.height: setAttribute() to ""] + expected: FAIL + + [object.height: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.height: setAttribute() to undefined] + expected: FAIL + + [object.height: setAttribute() to 7] + expected: FAIL + + [object.height: setAttribute() to 1.5] + expected: FAIL + + [object.height: setAttribute() to true] + expected: FAIL + + [object.height: setAttribute() to false] + expected: FAIL + + [object.height: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.height: setAttribute() to NaN] + expected: FAIL + + [object.height: setAttribute() to Infinity] + expected: FAIL + + [object.height: setAttribute() to -Infinity] + expected: FAIL + + [object.height: setAttribute() to "\\0"] + expected: FAIL + + [object.height: setAttribute() to null] + expected: FAIL + + [object.height: setAttribute() to object "test-toString"] + expected: FAIL + + [object.height: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.height: IDL set to ""] + expected: FAIL + + [object.height: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.height: IDL set to undefined] + expected: FAIL + + [object.height: IDL set to 7] + expected: FAIL + + [object.height: IDL set to 1.5] + expected: FAIL + + [object.height: IDL set to true] + expected: FAIL + + [object.height: IDL set to false] + expected: FAIL + + [object.height: IDL set to object "[object Object\]"] + expected: FAIL + + [object.height: IDL set to NaN] + expected: FAIL + + [object.height: IDL set to Infinity] + expected: FAIL + + [object.height: IDL set to -Infinity] + expected: FAIL + + [object.height: IDL set to "\\0"] + expected: FAIL + + [object.height: IDL set to null] + expected: FAIL + + [object.height: IDL set to object "test-toString"] + expected: FAIL + + [object.height: IDL set to object "test-valueOf"] + expected: FAIL + + [object.align: setAttribute() to ""] + expected: FAIL + + [object.align: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.align: setAttribute() to undefined] + expected: FAIL + + [object.align: setAttribute() to 7] + expected: FAIL + + [object.align: setAttribute() to 1.5] + expected: FAIL + + [object.align: setAttribute() to true] + expected: FAIL + + [object.align: setAttribute() to false] + expected: FAIL + + [object.align: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.align: setAttribute() to NaN] + expected: FAIL + + [object.align: setAttribute() to Infinity] + expected: FAIL + + [object.align: setAttribute() to -Infinity] + expected: FAIL + + [object.align: setAttribute() to "\\0"] + expected: FAIL + + [object.align: setAttribute() to null] + expected: FAIL + + [object.align: setAttribute() to object "test-toString"] + expected: FAIL + + [object.align: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.align: IDL set to ""] + expected: FAIL + + [object.align: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.align: IDL set to undefined] + expected: FAIL + + [object.align: IDL set to 7] + expected: FAIL + + [object.align: IDL set to 1.5] + expected: FAIL + + [object.align: IDL set to true] + expected: FAIL + + [object.align: IDL set to false] + expected: FAIL + + [object.align: IDL set to object "[object Object\]"] + expected: FAIL + + [object.align: IDL set to NaN] + expected: FAIL + + [object.align: IDL set to Infinity] + expected: FAIL + + [object.align: IDL set to -Infinity] + expected: FAIL + + [object.align: IDL set to "\\0"] + expected: FAIL + + [object.align: IDL set to null] + expected: FAIL + + [object.align: IDL set to object "test-toString"] + expected: FAIL + + [object.align: IDL set to object "test-valueOf"] + expected: FAIL + + [object.archive: setAttribute() to ""] + expected: FAIL + + [object.archive: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.archive: setAttribute() to undefined] + expected: FAIL + + [object.archive: setAttribute() to 7] + expected: FAIL + + [object.archive: setAttribute() to 1.5] + expected: FAIL + + [object.archive: setAttribute() to true] + expected: FAIL + + [object.archive: setAttribute() to false] + expected: FAIL + + [object.archive: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.archive: setAttribute() to NaN] + expected: FAIL + + [object.archive: setAttribute() to Infinity] + expected: FAIL + + [object.archive: setAttribute() to -Infinity] + expected: FAIL + + [object.archive: setAttribute() to "\\0"] + expected: FAIL + + [object.archive: setAttribute() to null] + expected: FAIL + + [object.archive: setAttribute() to object "test-toString"] + expected: FAIL + + [object.archive: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.archive: IDL set to ""] + expected: FAIL + + [object.archive: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.archive: IDL set to undefined] + expected: FAIL + + [object.archive: IDL set to 7] + expected: FAIL + + [object.archive: IDL set to 1.5] + expected: FAIL + + [object.archive: IDL set to true] + expected: FAIL + + [object.archive: IDL set to false] + expected: FAIL + + [object.archive: IDL set to object "[object Object\]"] + expected: FAIL + + [object.archive: IDL set to NaN] + expected: FAIL + + [object.archive: IDL set to Infinity] + expected: FAIL + + [object.archive: IDL set to -Infinity] + expected: FAIL + + [object.archive: IDL set to "\\0"] + expected: FAIL + + [object.archive: IDL set to null] + expected: FAIL + + [object.archive: IDL set to object "test-toString"] + expected: FAIL + + [object.archive: IDL set to object "test-valueOf"] + expected: FAIL + + [object.code: setAttribute() to ""] + expected: FAIL + + [object.code: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.code: setAttribute() to undefined] + expected: FAIL + + [object.code: setAttribute() to 7] + expected: FAIL + + [object.code: setAttribute() to 1.5] + expected: FAIL + + [object.code: setAttribute() to true] + expected: FAIL + + [object.code: setAttribute() to false] + expected: FAIL + + [object.code: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.code: setAttribute() to NaN] + expected: FAIL + + [object.code: setAttribute() to Infinity] + expected: FAIL + + [object.code: setAttribute() to -Infinity] + expected: FAIL + + [object.code: setAttribute() to "\\0"] + expected: FAIL + + [object.code: setAttribute() to null] + expected: FAIL + + [object.code: setAttribute() to object "test-toString"] + expected: FAIL + + [object.code: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.code: IDL set to ""] + expected: FAIL + + [object.code: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.code: IDL set to undefined] + expected: FAIL + + [object.code: IDL set to 7] + expected: FAIL + + [object.code: IDL set to 1.5] + expected: FAIL + + [object.code: IDL set to true] + expected: FAIL + + [object.code: IDL set to false] + expected: FAIL + + [object.code: IDL set to object "[object Object\]"] + expected: FAIL + + [object.code: IDL set to NaN] + expected: FAIL + + [object.code: IDL set to Infinity] + expected: FAIL + + [object.code: IDL set to -Infinity] + expected: FAIL + + [object.code: IDL set to "\\0"] + expected: FAIL + + [object.code: IDL set to null] + expected: FAIL + + [object.code: IDL set to object "test-toString"] + expected: FAIL + + [object.code: IDL set to object "test-valueOf"] + expected: FAIL + + [object.declare: setAttribute() to ""] + expected: FAIL + + [object.declare: setAttribute() to " foo "] + expected: FAIL + + [object.declare: setAttribute() to undefined] + expected: FAIL + + [object.declare: setAttribute() to null] + expected: FAIL + + [object.declare: setAttribute() to 7] + expected: FAIL + + [object.declare: setAttribute() to 1.5] + expected: FAIL + + [object.declare: setAttribute() to true] + expected: FAIL + + [object.declare: setAttribute() to false] + expected: FAIL + + [object.declare: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.declare: setAttribute() to NaN] + expected: FAIL + + [object.declare: setAttribute() to Infinity] + expected: FAIL + + [object.declare: setAttribute() to -Infinity] + expected: FAIL + + [object.declare: setAttribute() to "\\0"] + expected: FAIL + + [object.declare: setAttribute() to object "test-toString"] + expected: FAIL + + [object.declare: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.declare: setAttribute() to "declare"] + expected: FAIL + + [object.declare: IDL set to ""] + expected: FAIL + + [object.declare: IDL set to " foo "] + expected: FAIL + + [object.declare: IDL set to undefined] + expected: FAIL + + [object.declare: IDL set to null] + expected: FAIL + + [object.declare: IDL set to 7] + expected: FAIL + + [object.declare: IDL set to 1.5] + expected: FAIL + + [object.declare: IDL set to false] + expected: FAIL + + [object.declare: IDL set to object "[object Object\]"] + expected: FAIL + + [object.declare: IDL set to NaN] + expected: FAIL + + [object.declare: IDL set to Infinity] + expected: FAIL + + [object.declare: IDL set to -Infinity] + expected: FAIL + + [object.declare: IDL set to "\\0"] + expected: FAIL + + [object.declare: IDL set to object "test-toString"] + expected: FAIL + + [object.declare: IDL set to object "test-valueOf"] + expected: FAIL + + [object.hspace: setAttribute() to -2147483649] + expected: FAIL + + [object.hspace: setAttribute() to -2147483648] + expected: FAIL + + [object.hspace: setAttribute() to -36] + expected: FAIL + + [object.hspace: setAttribute() to -1] + expected: FAIL + + [object.hspace: setAttribute() to 0] + expected: FAIL + + [object.hspace: setAttribute() to 1] + expected: FAIL + + [object.hspace: setAttribute() to 257] + expected: FAIL + + [object.hspace: setAttribute() to 2147483647] + expected: FAIL + + [object.hspace: setAttribute() to 2147483648] + expected: FAIL + + [object.hspace: setAttribute() to 4294967295] + expected: FAIL + + [object.hspace: setAttribute() to 4294967296] + expected: FAIL + + [object.hspace: setAttribute() to ""] + expected: FAIL + + [object.hspace: setAttribute() to "-1"] + expected: FAIL + + [object.hspace: setAttribute() to "-0"] + expected: FAIL + + [object.hspace: setAttribute() to "0"] + expected: FAIL + + [object.hspace: setAttribute() to "1"] + expected: FAIL + + [object.hspace: setAttribute() to "\\t7"] + expected: FAIL + + [object.hspace: setAttribute() to "\\v7"] + expected: FAIL + + [object.hspace: setAttribute() to "\\f7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to "7"] + expected: FAIL + + [object.hspace: setAttribute() to "\\n7"] + expected: FAIL + + [object.hspace: setAttribute() to "\\r7"] + expected: FAIL + + [object.hspace: setAttribute() to "
7"] + expected: FAIL + + [object.hspace: setAttribute() to "
7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to "᠎7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " 7"] + expected: FAIL + + [object.hspace: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.hspace: setAttribute() to undefined] + expected: FAIL + + [object.hspace: setAttribute() to 1.5] + expected: FAIL + + [object.hspace: setAttribute() to true] + expected: FAIL + + [object.hspace: setAttribute() to false] + expected: FAIL + + [object.hspace: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.hspace: setAttribute() to NaN] + expected: FAIL + + [object.hspace: setAttribute() to Infinity] + expected: FAIL + + [object.hspace: setAttribute() to -Infinity] + expected: FAIL + + [object.hspace: setAttribute() to "\\0"] + expected: FAIL + + [object.hspace: setAttribute() to object "2"] + expected: FAIL + + [object.hspace: setAttribute() to object "3"] + expected: FAIL + + [object.hspace: IDL set to 0] + expected: FAIL + + [object.hspace: IDL set to 1] + expected: FAIL + + [object.hspace: IDL set to 257] + expected: FAIL + + [object.hspace: IDL set to 2147483647] + expected: FAIL + + [object.hspace: IDL set to "-0"] + expected: FAIL + + [object.hspace: IDL set to 2147483648] + expected: FAIL + + [object.hspace: IDL set to 4294967295] + expected: FAIL + + [object.standby: setAttribute() to ""] + expected: FAIL + + [object.standby: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.standby: setAttribute() to undefined] + expected: FAIL + + [object.standby: setAttribute() to 7] + expected: FAIL + + [object.standby: setAttribute() to 1.5] + expected: FAIL + + [object.standby: setAttribute() to true] + expected: FAIL + + [object.standby: setAttribute() to false] + expected: FAIL + + [object.standby: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.standby: setAttribute() to NaN] + expected: FAIL + + [object.standby: setAttribute() to Infinity] + expected: FAIL + + [object.standby: setAttribute() to -Infinity] + expected: FAIL + + [object.standby: setAttribute() to "\\0"] + expected: FAIL + + [object.standby: setAttribute() to null] + expected: FAIL + + [object.standby: setAttribute() to object "test-toString"] + expected: FAIL + + [object.standby: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.standby: IDL set to ""] + expected: FAIL + + [object.standby: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.standby: IDL set to undefined] + expected: FAIL + + [object.standby: IDL set to 7] + expected: FAIL + + [object.standby: IDL set to 1.5] + expected: FAIL + + [object.standby: IDL set to true] + expected: FAIL + + [object.standby: IDL set to false] + expected: FAIL + + [object.standby: IDL set to object "[object Object\]"] + expected: FAIL + + [object.standby: IDL set to NaN] + expected: FAIL + + [object.standby: IDL set to Infinity] + expected: FAIL + + [object.standby: IDL set to -Infinity] + expected: FAIL + + [object.standby: IDL set to "\\0"] + expected: FAIL + + [object.standby: IDL set to null] + expected: FAIL + + [object.standby: IDL set to object "test-toString"] + expected: FAIL + + [object.standby: IDL set to object "test-valueOf"] + expected: FAIL + + [object.vspace: setAttribute() to -2147483649] + expected: FAIL + + [object.vspace: setAttribute() to -2147483648] + expected: FAIL + + [object.vspace: setAttribute() to -36] + expected: FAIL + + [object.vspace: setAttribute() to -1] + expected: FAIL + + [object.vspace: setAttribute() to 0] + expected: FAIL + + [object.vspace: setAttribute() to 1] + expected: FAIL + + [object.vspace: setAttribute() to 257] + expected: FAIL + + [object.vspace: setAttribute() to 2147483647] + expected: FAIL + + [object.vspace: setAttribute() to 2147483648] + expected: FAIL + + [object.vspace: setAttribute() to 4294967295] + expected: FAIL + + [object.vspace: setAttribute() to 4294967296] + expected: FAIL + + [object.vspace: setAttribute() to ""] + expected: FAIL + + [object.vspace: setAttribute() to "-1"] + expected: FAIL + + [object.vspace: setAttribute() to "-0"] + expected: FAIL + + [object.vspace: setAttribute() to "0"] + expected: FAIL + + [object.vspace: setAttribute() to "1"] + expected: FAIL + + [object.vspace: setAttribute() to "\\t7"] + expected: FAIL + + [object.vspace: setAttribute() to "\\v7"] + expected: FAIL + + [object.vspace: setAttribute() to "\\f7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to "7"] + expected: FAIL + + [object.vspace: setAttribute() to "\\n7"] + expected: FAIL + + [object.vspace: setAttribute() to "\\r7"] + expected: FAIL + + [object.vspace: setAttribute() to "
7"] + expected: FAIL + + [object.vspace: setAttribute() to "
7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to "᠎7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " 7"] + expected: FAIL + + [object.vspace: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.vspace: setAttribute() to undefined] + expected: FAIL + + [object.vspace: setAttribute() to 1.5] + expected: FAIL + + [object.vspace: setAttribute() to true] + expected: FAIL + + [object.vspace: setAttribute() to false] + expected: FAIL + + [object.vspace: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.vspace: setAttribute() to NaN] + expected: FAIL + + [object.vspace: setAttribute() to Infinity] + expected: FAIL + + [object.vspace: setAttribute() to -Infinity] + expected: FAIL + + [object.vspace: setAttribute() to "\\0"] + expected: FAIL + + [object.vspace: setAttribute() to object "2"] + expected: FAIL + + [object.vspace: setAttribute() to object "3"] + expected: FAIL + + [object.vspace: IDL set to 0] + expected: FAIL + + [object.vspace: IDL set to 1] + expected: FAIL + + [object.vspace: IDL set to 257] + expected: FAIL + + [object.vspace: IDL set to 2147483647] + expected: FAIL + + [object.vspace: IDL set to "-0"] + expected: FAIL + + [object.vspace: IDL set to 2147483648] + expected: FAIL + + [object.vspace: IDL set to 4294967295] + expected: FAIL + + [object.codeBase: setAttribute() to ""] + expected: FAIL + + [object.codeBase: setAttribute() to " foo "] + expected: FAIL + + [object.codeBase: setAttribute() to "http://site.example/"] + expected: FAIL + + [object.codeBase: setAttribute() to "//site.example/path???@#l"] + expected: FAIL + + [object.codeBase: setAttribute() to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [object.codeBase: setAttribute() to undefined] + expected: FAIL + + [object.codeBase: setAttribute() to 7] + expected: FAIL + + [object.codeBase: setAttribute() to 1.5] + expected: FAIL + + [object.codeBase: setAttribute() to true] + expected: FAIL + + [object.codeBase: setAttribute() to false] + expected: FAIL + + [object.codeBase: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.codeBase: setAttribute() to NaN] + expected: FAIL + + [object.codeBase: setAttribute() to Infinity] + expected: FAIL + + [object.codeBase: setAttribute() to -Infinity] + expected: FAIL + + [object.codeBase: setAttribute() to "\\0"] + expected: FAIL + + [object.codeBase: setAttribute() to null] + expected: FAIL + + [object.codeBase: setAttribute() to object "test-toString"] + expected: FAIL + + [object.codeBase: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.codeBase: IDL set to ""] + expected: FAIL + + [object.codeBase: IDL set to " foo "] + expected: FAIL + + [object.codeBase: IDL set to "http://site.example/"] + expected: FAIL + + [object.codeBase: IDL set to "//site.example/path???@#l"] + expected: FAIL + + [object.codeBase: IDL set to "\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f "] + expected: FAIL + + [object.codeBase: IDL set to undefined] + expected: FAIL + + [object.codeBase: IDL set to 7] + expected: FAIL + + [object.codeBase: IDL set to 1.5] + expected: FAIL + + [object.codeBase: IDL set to true] + expected: FAIL + + [object.codeBase: IDL set to false] + expected: FAIL + + [object.codeBase: IDL set to object "[object Object\]"] + expected: FAIL + + [object.codeBase: IDL set to NaN] + expected: FAIL + + [object.codeBase: IDL set to Infinity] + expected: FAIL + + [object.codeBase: IDL set to -Infinity] + expected: FAIL + + [object.codeBase: IDL set to "\\0"] + expected: FAIL + + [object.codeBase: IDL set to null] + expected: FAIL + + [object.codeBase: IDL set to object "test-toString"] + expected: FAIL + + [object.codeBase: IDL set to object "test-valueOf"] + expected: FAIL + + [object.codeType: setAttribute() to ""] + expected: FAIL + + [object.codeType: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.codeType: setAttribute() to undefined] + expected: FAIL + + [object.codeType: setAttribute() to 7] + expected: FAIL + + [object.codeType: setAttribute() to 1.5] + expected: FAIL + + [object.codeType: setAttribute() to true] + expected: FAIL + + [object.codeType: setAttribute() to false] + expected: FAIL + + [object.codeType: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.codeType: setAttribute() to NaN] + expected: FAIL + + [object.codeType: setAttribute() to Infinity] + expected: FAIL + + [object.codeType: setAttribute() to -Infinity] + expected: FAIL + + [object.codeType: setAttribute() to "\\0"] + expected: FAIL + + [object.codeType: setAttribute() to null] + expected: FAIL + + [object.codeType: setAttribute() to object "test-toString"] + expected: FAIL + + [object.codeType: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.codeType: IDL set to ""] + expected: FAIL + + [object.codeType: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.codeType: IDL set to undefined] + expected: FAIL + + [object.codeType: IDL set to 7] + expected: FAIL + + [object.codeType: IDL set to 1.5] + expected: FAIL + + [object.codeType: IDL set to true] + expected: FAIL + + [object.codeType: IDL set to false] + expected: FAIL + + [object.codeType: IDL set to object "[object Object\]"] + expected: FAIL + + [object.codeType: IDL set to NaN] + expected: FAIL + + [object.codeType: IDL set to Infinity] + expected: FAIL + + [object.codeType: IDL set to -Infinity] + expected: FAIL + + [object.codeType: IDL set to "\\0"] + expected: FAIL + + [object.codeType: IDL set to null] + expected: FAIL + + [object.codeType: IDL set to object "test-toString"] + expected: FAIL + + [object.codeType: IDL set to object "test-valueOf"] + expected: FAIL + + [object.border: setAttribute() to ""] + expected: FAIL + + [object.border: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.border: setAttribute() to undefined] + expected: FAIL + + [object.border: setAttribute() to 7] + expected: FAIL + + [object.border: setAttribute() to 1.5] + expected: FAIL + + [object.border: setAttribute() to true] + expected: FAIL + + [object.border: setAttribute() to false] + expected: FAIL + + [object.border: setAttribute() to object "[object Object\]"] + expected: FAIL + + [object.border: setAttribute() to NaN] + expected: FAIL + + [object.border: setAttribute() to Infinity] + expected: FAIL + + [object.border: setAttribute() to -Infinity] + expected: FAIL + + [object.border: setAttribute() to "\\0"] + expected: FAIL + + [object.border: setAttribute() to null] + expected: FAIL + + [object.border: setAttribute() to object "test-toString"] + expected: FAIL + + [object.border: setAttribute() to object "test-valueOf"] + expected: FAIL + + [object.border: IDL set to ""] + expected: FAIL + + [object.border: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [object.border: IDL set to undefined] + expected: FAIL + + [object.border: IDL set to 7] + expected: FAIL + + [object.border: IDL set to 1.5] + expected: FAIL + + [object.border: IDL set to true] + expected: FAIL + + [object.border: IDL set to false] + expected: FAIL + + [object.border: IDL set to object "[object Object\]"] + expected: FAIL + + [object.border: IDL set to NaN] + expected: FAIL + + [object.border: IDL set to Infinity] + expected: FAIL + + [object.border: IDL set to -Infinity] + expected: FAIL + + [object.border: IDL set to "\\0"] + expected: FAIL + + [object.border: IDL set to null] + expected: FAIL + + [object.border: IDL set to object "test-toString"] + expected: FAIL + + [object.border: IDL set to object "test-valueOf"] + expected: FAIL + + [param.dir: setAttribute() to ""] + expected: FAIL + + [param.dir: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.dir: setAttribute() to undefined] + expected: FAIL + + [param.dir: setAttribute() to 7] + expected: FAIL + + [param.dir: setAttribute() to 1.5] + expected: FAIL + + [param.dir: setAttribute() to true] + expected: FAIL + + [param.dir: setAttribute() to false] + expected: FAIL + + [param.dir: setAttribute() to object "[object Object\]"] + expected: FAIL + + [param.dir: setAttribute() to NaN] + expected: FAIL + + [param.dir: setAttribute() to Infinity] + expected: FAIL + + [param.dir: setAttribute() to -Infinity] + expected: FAIL + + [param.dir: setAttribute() to "\\0"] + expected: FAIL + + [param.dir: setAttribute() to null] + expected: FAIL + + [param.dir: setAttribute() to object "test-toString"] + expected: FAIL + + [param.dir: setAttribute() to object "test-valueOf"] + expected: FAIL + + [param.dir: setAttribute() to "ltr"] + expected: FAIL + + [param.dir: setAttribute() to "xltr"] + expected: FAIL + + [param.dir: setAttribute() to "ltr\\0"] + expected: FAIL + + [param.dir: setAttribute() to "tr"] + expected: FAIL + + [param.dir: setAttribute() to "LTR"] + expected: FAIL + + [param.dir: setAttribute() to "rtl"] + expected: FAIL + + [param.dir: setAttribute() to "xrtl"] + expected: FAIL + + [param.dir: setAttribute() to "rtl\\0"] + expected: FAIL + + [param.dir: setAttribute() to "tl"] + expected: FAIL + + [param.dir: setAttribute() to "RTL"] + expected: FAIL + + [param.dir: setAttribute() to "auto"] + expected: FAIL + + [param.dir: setAttribute() to "xauto"] + expected: FAIL + + [param.dir: setAttribute() to "auto\\0"] + expected: FAIL + + [param.dir: setAttribute() to "uto"] + expected: FAIL + + [param.dir: setAttribute() to "AUTO"] + expected: FAIL + + [param.dir: IDL set to ""] + expected: FAIL + + [param.dir: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.dir: IDL set to undefined] + expected: FAIL + + [param.dir: IDL set to 7] + expected: FAIL + + [param.dir: IDL set to 1.5] + expected: FAIL + + [param.dir: IDL set to true] + expected: FAIL + + [param.dir: IDL set to false] + expected: FAIL + + [param.dir: IDL set to object "[object Object\]"] + expected: FAIL + + [param.dir: IDL set to NaN] + expected: FAIL + + [param.dir: IDL set to Infinity] + expected: FAIL + + [param.dir: IDL set to -Infinity] + expected: FAIL + + [param.dir: IDL set to "\\0"] + expected: FAIL + + [param.dir: IDL set to null] + expected: FAIL + + [param.dir: IDL set to object "test-toString"] + expected: FAIL + + [param.dir: IDL set to object "test-valueOf"] + expected: FAIL + + [param.dir: IDL set to "ltr"] + expected: FAIL + + [param.dir: IDL set to "xltr"] + expected: FAIL + + [param.dir: IDL set to "ltr\\0"] + expected: FAIL + + [param.dir: IDL set to "tr"] + expected: FAIL + + [param.dir: IDL set to "LTR"] + expected: FAIL + + [param.dir: IDL set to "rtl"] + expected: FAIL + + [param.dir: IDL set to "xrtl"] + expected: FAIL + + [param.dir: IDL set to "rtl\\0"] + expected: FAIL + + [param.dir: IDL set to "tl"] + expected: FAIL + + [param.dir: IDL set to "RTL"] + expected: FAIL + + [param.dir: IDL set to "auto"] + expected: FAIL + + [param.dir: IDL set to "xauto"] + expected: FAIL + + [param.dir: IDL set to "auto\\0"] + expected: FAIL + + [param.dir: IDL set to "uto"] + expected: FAIL + + [param.dir: IDL set to "AUTO"] + expected: FAIL + + [param.accessKey: setAttribute() to ""] + expected: FAIL + + [param.accessKey: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.accessKey: setAttribute() to undefined] + expected: FAIL + + [param.accessKey: setAttribute() to 7] + expected: FAIL + + [param.accessKey: setAttribute() to 1.5] + expected: FAIL + + [param.accessKey: setAttribute() to true] + expected: FAIL + + [param.accessKey: setAttribute() to false] + expected: FAIL + + [param.accessKey: setAttribute() to object "[object Object\]"] + expected: FAIL + + [param.accessKey: setAttribute() to NaN] + expected: FAIL + + [param.accessKey: setAttribute() to Infinity] + expected: FAIL + + [param.accessKey: setAttribute() to -Infinity] + expected: FAIL + + [param.accessKey: setAttribute() to "\\0"] + expected: FAIL + + [param.accessKey: setAttribute() to null] + expected: FAIL + + [param.accessKey: setAttribute() to object "test-toString"] + expected: FAIL + + [param.accessKey: setAttribute() to object "test-valueOf"] + expected: FAIL + + [param.accessKey: IDL set to ""] + expected: FAIL + + [param.accessKey: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.accessKey: IDL set to undefined] + expected: FAIL + + [param.accessKey: IDL set to 7] + expected: FAIL + + [param.accessKey: IDL set to 1.5] + expected: FAIL + + [param.accessKey: IDL set to true] + expected: FAIL + + [param.accessKey: IDL set to false] + expected: FAIL + + [param.accessKey: IDL set to object "[object Object\]"] + expected: FAIL + + [param.accessKey: IDL set to NaN] + expected: FAIL + + [param.accessKey: IDL set to Infinity] + expected: FAIL + + [param.accessKey: IDL set to -Infinity] + expected: FAIL + + [param.accessKey: IDL set to "\\0"] + expected: FAIL + + [param.accessKey: IDL set to null] + expected: FAIL + + [param.accessKey: IDL set to object "test-toString"] + expected: FAIL + + [param.accessKey: IDL set to object "test-valueOf"] + expected: FAIL + + [param.tabIndex: setAttribute() to -36] + expected: FAIL + + [param.tabIndex: setAttribute() to -1] + expected: FAIL + + [param.tabIndex: setAttribute() to 0] + expected: FAIL + + [param.tabIndex: setAttribute() to 1] + expected: FAIL + + [param.tabIndex: setAttribute() to 2147483647] + expected: FAIL + + [param.tabIndex: setAttribute() to -2147483648] + expected: FAIL + + [param.tabIndex: setAttribute() to "-1"] + expected: FAIL + + [param.tabIndex: setAttribute() to "-0"] + expected: FAIL + + [param.tabIndex: setAttribute() to "0"] + expected: FAIL + + [param.tabIndex: setAttribute() to "1"] + expected: FAIL + + [param.tabIndex: setAttribute() to "\\t7"] + expected: FAIL + + [param.tabIndex: setAttribute() to "\\f7"] + expected: FAIL + + [param.tabIndex: setAttribute() to " 7"] + expected: FAIL + + [param.tabIndex: setAttribute() to "\\n7"] + expected: FAIL + + [param.tabIndex: setAttribute() to "\\r7"] + expected: FAIL + + [param.tabIndex: setAttribute() to 1.5] + expected: FAIL + + [param.tabIndex: setAttribute() to object "2"] + expected: FAIL + + [param.tabIndex: IDL set to -36] + expected: FAIL + + [param.tabIndex: IDL set to -1] + expected: FAIL + + [param.tabIndex: IDL set to 0] + expected: FAIL + + [param.tabIndex: IDL set to 1] + expected: FAIL + + [param.tabIndex: IDL set to 2147483647] + expected: FAIL + + [param.tabIndex: IDL set to -2147483648] + expected: FAIL + + [param.name: setAttribute() to ""] + expected: FAIL + + [param.name: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.name: setAttribute() to undefined] + expected: FAIL + + [param.name: setAttribute() to 7] + expected: FAIL + + [param.name: setAttribute() to 1.5] + expected: FAIL + + [param.name: setAttribute() to true] + expected: FAIL + + [param.name: setAttribute() to false] + expected: FAIL + + [param.name: setAttribute() to object "[object Object\]"] + expected: FAIL + + [param.name: setAttribute() to NaN] + expected: FAIL + + [param.name: setAttribute() to Infinity] + expected: FAIL + + [param.name: setAttribute() to -Infinity] + expected: FAIL + + [param.name: setAttribute() to "\\0"] + expected: FAIL + + [param.name: setAttribute() to null] + expected: FAIL + + [param.name: setAttribute() to object "test-toString"] + expected: FAIL + + [param.name: setAttribute() to object "test-valueOf"] + expected: FAIL + + [param.name: IDL set to ""] + expected: FAIL + + [param.name: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.name: IDL set to undefined] + expected: FAIL + + [param.name: IDL set to 7] + expected: FAIL + + [param.name: IDL set to 1.5] + expected: FAIL + + [param.name: IDL set to true] + expected: FAIL + + [param.name: IDL set to false] + expected: FAIL + + [param.name: IDL set to object "[object Object\]"] + expected: FAIL + + [param.name: IDL set to NaN] + expected: FAIL + + [param.name: IDL set to Infinity] + expected: FAIL + + [param.name: IDL set to -Infinity] + expected: FAIL + + [param.name: IDL set to "\\0"] + expected: FAIL + + [param.name: IDL set to null] + expected: FAIL + + [param.name: IDL set to object "test-toString"] + expected: FAIL + + [param.name: IDL set to object "test-valueOf"] + expected: FAIL + + [param.value: setAttribute() to ""] + expected: FAIL + + [param.value: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.value: setAttribute() to undefined] + expected: FAIL + + [param.value: setAttribute() to 7] + expected: FAIL + + [param.value: setAttribute() to 1.5] + expected: FAIL + + [param.value: setAttribute() to true] + expected: FAIL + + [param.value: setAttribute() to false] + expected: FAIL + + [param.value: setAttribute() to object "[object Object\]"] + expected: FAIL + + [param.value: setAttribute() to NaN] + expected: FAIL + + [param.value: setAttribute() to Infinity] + expected: FAIL + + [param.value: setAttribute() to -Infinity] + expected: FAIL + + [param.value: setAttribute() to "\\0"] + expected: FAIL + + [param.value: setAttribute() to null] + expected: FAIL + + [param.value: setAttribute() to object "test-toString"] + expected: FAIL + + [param.value: setAttribute() to object "test-valueOf"] + expected: FAIL + + [param.value: IDL set to ""] + expected: FAIL + + [param.value: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.value: IDL set to undefined] + expected: FAIL + + [param.value: IDL set to 7] + expected: FAIL + + [param.value: IDL set to 1.5] + expected: FAIL + + [param.value: IDL set to true] + expected: FAIL + + [param.value: IDL set to false] + expected: FAIL + + [param.value: IDL set to object "[object Object\]"] + expected: FAIL + + [param.value: IDL set to NaN] + expected: FAIL + + [param.value: IDL set to Infinity] + expected: FAIL + + [param.value: IDL set to -Infinity] + expected: FAIL + + [param.value: IDL set to "\\0"] + expected: FAIL + + [param.value: IDL set to null] + expected: FAIL + + [param.value: IDL set to object "test-toString"] + expected: FAIL + + [param.value: IDL set to object "test-valueOf"] + expected: FAIL + + [param.type: setAttribute() to ""] + expected: FAIL + + [param.type: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.type: setAttribute() to undefined] + expected: FAIL + + [param.type: setAttribute() to 7] + expected: FAIL + + [param.type: setAttribute() to 1.5] + expected: FAIL + + [param.type: setAttribute() to true] + expected: FAIL + + [param.type: setAttribute() to false] + expected: FAIL + + [param.type: setAttribute() to object "[object Object\]"] + expected: FAIL + + [param.type: setAttribute() to NaN] + expected: FAIL + + [param.type: setAttribute() to Infinity] + expected: FAIL + + [param.type: setAttribute() to -Infinity] + expected: FAIL + + [param.type: setAttribute() to "\\0"] + expected: FAIL + + [param.type: setAttribute() to null] + expected: FAIL + + [param.type: setAttribute() to object "test-toString"] + expected: FAIL + + [param.type: setAttribute() to object "test-valueOf"] + expected: FAIL + + [param.type: IDL set to ""] + expected: FAIL + + [param.type: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.type: IDL set to undefined] + expected: FAIL + + [param.type: IDL set to 7] + expected: FAIL + + [param.type: IDL set to 1.5] + expected: FAIL + + [param.type: IDL set to true] + expected: FAIL + + [param.type: IDL set to false] + expected: FAIL + + [param.type: IDL set to object "[object Object\]"] + expected: FAIL + + [param.type: IDL set to NaN] + expected: FAIL + + [param.type: IDL set to Infinity] + expected: FAIL + + [param.type: IDL set to -Infinity] + expected: FAIL + + [param.type: IDL set to "\\0"] + expected: FAIL + + [param.type: IDL set to null] + expected: FAIL + + [param.type: IDL set to object "test-toString"] + expected: FAIL + + [param.type: IDL set to object "test-valueOf"] + expected: FAIL + + [param.valueType: setAttribute() to ""] + expected: FAIL + + [param.valueType: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.valueType: setAttribute() to undefined] + expected: FAIL + + [param.valueType: setAttribute() to 7] + expected: FAIL + + [param.valueType: setAttribute() to 1.5] + expected: FAIL + + [param.valueType: setAttribute() to true] + expected: FAIL + + [param.valueType: setAttribute() to false] + expected: FAIL + + [param.valueType: setAttribute() to object "[object Object\]"] + expected: FAIL + + [param.valueType: setAttribute() to NaN] + expected: FAIL + + [param.valueType: setAttribute() to Infinity] + expected: FAIL + + [param.valueType: setAttribute() to -Infinity] + expected: FAIL + + [param.valueType: setAttribute() to "\\0"] + expected: FAIL + + [param.valueType: setAttribute() to null] + expected: FAIL + + [param.valueType: setAttribute() to object "test-toString"] + expected: FAIL + + [param.valueType: setAttribute() to object "test-valueOf"] + expected: FAIL + + [param.valueType: IDL set to ""] + expected: FAIL + + [param.valueType: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [param.valueType: IDL set to undefined] + expected: FAIL + + [param.valueType: IDL set to 7] + expected: FAIL + + [param.valueType: IDL set to 1.5] + expected: FAIL + + [param.valueType: IDL set to true] + expected: FAIL + + [param.valueType: IDL set to false] + expected: FAIL + + [param.valueType: IDL set to object "[object Object\]"] + expected: FAIL + + [param.valueType: IDL set to NaN] + expected: FAIL + + [param.valueType: IDL set to Infinity] + expected: FAIL + + [param.valueType: IDL set to -Infinity] + expected: FAIL + + [param.valueType: IDL set to "\\0"] + expected: FAIL + + [param.valueType: IDL set to null] + expected: FAIL + + [param.valueType: IDL set to object "test-toString"] + expected: FAIL + + [param.valueType: IDL set to object "test-valueOf"] + expected: FAIL + + [video.dir: setAttribute() to ""] + expected: FAIL + + [video.dir: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [video.dir: setAttribute() to undefined] + expected: FAIL + + [video.dir: setAttribute() to 7] + expected: FAIL + + [video.dir: setAttribute() to 1.5] + expected: FAIL + + [video.dir: setAttribute() to true] + expected: FAIL + + [video.dir: setAttribute() to false] + expected: FAIL + + [video.dir: setAttribute() to object "[object Object\]"] + expected: FAIL + + [video.dir: setAttribute() to NaN] + expected: FAIL + + [video.dir: setAttribute() to Infinity] + expected: FAIL + + [video.dir: setAttribute() to -Infinity] + expected: FAIL + + [video.dir: setAttribute() to "\\0"] + expected: FAIL + + [video.dir: setAttribute() to null] + expected: FAIL + + [video.dir: setAttribute() to object "test-toString"] + expected: FAIL + + [video.dir: setAttribute() to object "test-valueOf"] + expected: FAIL + + [video.dir: setAttribute() to "ltr"] + expected: FAIL + + [video.dir: setAttribute() to "xltr"] + expected: FAIL + + [video.dir: setAttribute() to "ltr\\0"] + expected: FAIL + + [video.dir: setAttribute() to "tr"] + expected: FAIL + + [video.dir: setAttribute() to "LTR"] + expected: FAIL + + [video.dir: setAttribute() to "rtl"] + expected: FAIL + + [video.dir: setAttribute() to "xrtl"] + expected: FAIL + + [video.dir: setAttribute() to "rtl\\0"] + expected: FAIL + + [video.dir: setAttribute() to "tl"] + expected: FAIL + + [video.dir: setAttribute() to "RTL"] + expected: FAIL + + [video.dir: setAttribute() to "auto"] + expected: FAIL + + [video.dir: setAttribute() to "xauto"] + expected: FAIL + + [video.dir: setAttribute() to "auto\\0"] + expected: FAIL + + [video.dir: setAttribute() to "uto"] + expected: FAIL + + [video.dir: setAttribute() to "AUTO"] + expected: FAIL + + [video.dir: IDL set to ""] + expected: FAIL + + [video.dir: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [video.dir: IDL set to undefined] + expected: FAIL + + [video.dir: IDL set to 7] + expected: FAIL + + [video.dir: IDL set to 1.5] + expected: FAIL + + [video.dir: IDL set to true] + expected: FAIL + + [video.dir: IDL set to false] + expected: FAIL + + [video.dir: IDL set to object "[object Object\]"] + expected: FAIL + + [video.dir: IDL set to NaN] + expected: FAIL + + [video.dir: IDL set to Infinity] + expected: FAIL + + [video.dir: IDL set to -Infinity] + expected: FAIL + + [video.dir: IDL set to "\\0"] + expected: FAIL + + [video.dir: IDL set to null] + expected: FAIL + + [video.dir: IDL set to object "test-toString"] + expected: FAIL + + [video.dir: IDL set to object "test-valueOf"] + expected: FAIL + + [video.dir: IDL set to "ltr"] + expected: FAIL + + [video.dir: IDL set to "xltr"] + expected: FAIL + + [video.dir: IDL set to "ltr\\0"] + expected: FAIL + + [video.dir: IDL set to "tr"] + expected: FAIL + + [video.dir: IDL set to "LTR"] + expected: FAIL + + [video.dir: IDL set to "rtl"] + expected: FAIL + + [video.dir: IDL set to "xrtl"] + expected: FAIL + + [video.dir: IDL set to "rtl\\0"] + expected: FAIL + + [video.dir: IDL set to "tl"] + expected: FAIL + + [video.dir: IDL set to "RTL"] + expected: FAIL + + [video.dir: IDL set to "auto"] + expected: FAIL + + [video.dir: IDL set to "xauto"] + expected: FAIL + + [video.dir: IDL set to "auto\\0"] + expected: FAIL + + [video.dir: IDL set to "uto"] + expected: FAIL + + [video.dir: IDL set to "AUTO"] + expected: FAIL + + [video.accessKey: setAttribute() to ""] + expected: FAIL + + [video.accessKey: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [video.accessKey: setAttribute() to undefined] + expected: FAIL + + [video.accessKey: setAttribute() to 7] + expected: FAIL + + [video.accessKey: setAttribute() to 1.5] + expected: FAIL + + [video.accessKey: setAttribute() to true] + expected: FAIL + + [video.accessKey: setAttribute() to false] + expected: FAIL + + [video.accessKey: setAttribute() to object "[object Object\]"] + expected: FAIL + + [video.accessKey: setAttribute() to NaN] + expected: FAIL + + [video.accessKey: setAttribute() to Infinity] + expected: FAIL + + [video.accessKey: setAttribute() to -Infinity] + expected: FAIL + + [video.accessKey: setAttribute() to "\\0"] + expected: FAIL + + [video.accessKey: setAttribute() to null] + expected: FAIL + + [video.accessKey: setAttribute() to object "test-toString"] + expected: FAIL + + [video.accessKey: setAttribute() to object "test-valueOf"] + expected: FAIL + + [video.accessKey: IDL set to ""] + expected: FAIL + + [video.accessKey: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [video.accessKey: IDL set to undefined] + expected: FAIL + + [video.accessKey: IDL set to 7] + expected: FAIL + + [video.accessKey: IDL set to 1.5] + expected: FAIL + + [video.accessKey: IDL set to true] + expected: FAIL + + [video.accessKey: IDL set to false] + expected: FAIL + + [video.accessKey: IDL set to object "[object Object\]"] + expected: FAIL + + [video.accessKey: IDL set to NaN] + expected: FAIL + + [video.accessKey: IDL set to Infinity] + expected: FAIL + + [video.accessKey: IDL set to -Infinity] + expected: FAIL + + [video.accessKey: IDL set to "\\0"] + expected: FAIL + + [video.accessKey: IDL set to null] + expected: FAIL + + [video.accessKey: IDL set to object "test-toString"] + expected: FAIL + + [video.accessKey: IDL set to object "test-valueOf"] + expected: FAIL + + [video.tabIndex: setAttribute() to -36] + expected: FAIL + + [video.tabIndex: setAttribute() to -1] + expected: FAIL + + [video.tabIndex: setAttribute() to 0] + expected: FAIL + + [video.tabIndex: setAttribute() to 1] + expected: FAIL + + [video.tabIndex: setAttribute() to 2147483647] + expected: FAIL + + [video.tabIndex: setAttribute() to -2147483648] + expected: FAIL + + [video.tabIndex: setAttribute() to "-1"] + expected: FAIL + + [video.tabIndex: setAttribute() to "-0"] + expected: FAIL + + [video.tabIndex: setAttribute() to "0"] + expected: FAIL + + [video.tabIndex: setAttribute() to "1"] + expected: FAIL + + [video.tabIndex: setAttribute() to "\\t7"] + expected: FAIL + + [video.tabIndex: setAttribute() to "\\f7"] + expected: FAIL + + [video.tabIndex: setAttribute() to " 7"] + expected: FAIL + + [video.tabIndex: setAttribute() to "\\n7"] + expected: FAIL + + [video.tabIndex: setAttribute() to "\\r7"] + expected: FAIL + + [video.tabIndex: setAttribute() to 1.5] + expected: FAIL + + [video.tabIndex: setAttribute() to object "2"] + expected: FAIL + + [video.tabIndex: IDL set to -36] + expected: FAIL + + [video.tabIndex: IDL set to -1] + expected: FAIL + + [video.tabIndex: IDL set to 0] + expected: FAIL + + [video.tabIndex: IDL set to 1] + expected: FAIL + + [video.tabIndex: IDL set to 2147483647] + expected: FAIL + + [video.tabIndex: IDL set to -2147483648] + expected: FAIL + + [video.crossOrigin: setAttribute() to ""] + expected: FAIL + + [video.crossOrigin: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [video.crossOrigin: setAttribute() to undefined] + expected: FAIL + + [video.crossOrigin: setAttribute() to 7] + expected: FAIL + + [video.crossOrigin: setAttribute() to 1.5] + expected: FAIL + + [video.crossOrigin: setAttribute() to true] + expected: FAIL + + [video.crossOrigin: setAttribute() to false] + expected: FAIL + + [video.crossOrigin: setAttribute() to object "[object Object\]"] + expected: FAIL + + [video.crossOrigin: setAttribute() to NaN] + expected: FAIL + + [video.crossOrigin: setAttribute() to Infinity] + expected: FAIL + + [video.crossOrigin: setAttribute() to -Infinity] + expected: FAIL + + [video.crossOrigin: setAttribute() to "\\0"] + expected: FAIL + + [video.crossOrigin: setAttribute() to null] + expected: FAIL + + [video.crossOrigin: setAttribute() to object "test-toString"] + expected: FAIL + + [video.crossOrigin: setAttribute() to object "test-valueOf"] + expected: FAIL + + [video.crossOrigin: setAttribute() to "anonymous"] + expected: FAIL + + [video.crossOrigin: setAttribute() to "xanonymous"] + expected: FAIL + + [video.crossOrigin: setAttribute() to "anonymous\\0"] + expected: FAIL + + [video.crossOrigin: setAttribute() to "nonymous"] + expected: FAIL + + [video.crossOrigin: setAttribute() to "ANONYMOUS"] + expected: FAIL + + [video.crossOrigin: setAttribute() to "use-credentials"] + expected: FAIL + + [video.crossOrigin: setAttribute() to "xuse-credentials"] + expected: FAIL + + [video.crossOrigin: setAttribute() to "use-credentials\\0"] + expected: FAIL + + [video.crossOrigin: setAttribute() to "se-credentials"] + expected: FAIL + + [video.crossOrigin: setAttribute() to "USE-CREDENTIALS"] + expected: FAIL + + [video.crossOrigin: IDL set to ""] + expected: FAIL + + [video.crossOrigin: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [video.crossOrigin: IDL set to undefined] + expected: FAIL + + [video.crossOrigin: IDL set to 7] + expected: FAIL + + [video.crossOrigin: IDL set to 1.5] + expected: FAIL + + [video.crossOrigin: IDL set to true] + expected: FAIL + + [video.crossOrigin: IDL set to false] + expected: FAIL + + [video.crossOrigin: IDL set to object "[object Object\]"] + expected: FAIL + + [video.crossOrigin: IDL set to NaN] + expected: FAIL + + [video.crossOrigin: IDL set to Infinity] + expected: FAIL + + [video.crossOrigin: IDL set to -Infinity] + expected: FAIL + + [video.crossOrigin: IDL set to "\\0"] + expected: FAIL + + [video.crossOrigin: IDL set to null] + expected: FAIL + + [video.crossOrigin: IDL set to object "test-toString"] + expected: FAIL + + [video.crossOrigin: IDL set to object "test-valueOf"] + expected: FAIL + + [video.crossOrigin: IDL set to "anonymous"] + expected: FAIL + + [video.crossOrigin: IDL set to "xanonymous"] + expected: FAIL + + [video.crossOrigin: IDL set to "anonymous\\0"] + expected: FAIL + + [video.crossOrigin: IDL set to "nonymous"] + expected: FAIL + + [video.crossOrigin: IDL set to "ANONYMOUS"] + expected: FAIL + + [video.crossOrigin: IDL set to "use-credentials"] + expected: FAIL + + [video.crossOrigin: IDL set to "xuse-credentials"] + expected: FAIL + + [video.crossOrigin: IDL set to "use-credentials\\0"] + expected: FAIL + + [video.crossOrigin: IDL set to "se-credentials"] + expected: FAIL + + [video.crossOrigin: IDL set to "USE-CREDENTIALS"] + expected: FAIL + + [video.loop: setAttribute() to ""] + expected: FAIL + + [video.loop: setAttribute() to " foo "] + expected: FAIL + + [video.loop: setAttribute() to undefined] + expected: FAIL + + [video.loop: setAttribute() to null] + expected: FAIL + + [video.loop: setAttribute() to 7] + expected: FAIL + + [video.loop: setAttribute() to 1.5] + expected: FAIL + + [video.loop: setAttribute() to true] + expected: FAIL + + [video.loop: setAttribute() to false] + expected: FAIL + + [video.loop: setAttribute() to object "[object Object\]"] + expected: FAIL + + [video.loop: setAttribute() to NaN] + expected: FAIL + + [video.loop: setAttribute() to Infinity] + expected: FAIL + + [video.loop: setAttribute() to -Infinity] + expected: FAIL + + [video.loop: setAttribute() to "\\0"] + expected: FAIL + + [video.loop: setAttribute() to object "test-toString"] + expected: FAIL + + [video.loop: setAttribute() to object "test-valueOf"] + expected: FAIL + + [video.loop: setAttribute() to "loop"] + expected: FAIL + + [video.loop: IDL set to ""] + expected: FAIL + + [video.loop: IDL set to " foo "] + expected: FAIL + + [video.loop: IDL set to undefined] + expected: FAIL + + [video.loop: IDL set to null] + expected: FAIL + + [video.loop: IDL set to 7] + expected: FAIL + + [video.loop: IDL set to 1.5] + expected: FAIL + + [video.loop: IDL set to false] + expected: FAIL + + [video.loop: IDL set to object "[object Object\]"] + expected: FAIL + + [video.loop: IDL set to NaN] + expected: FAIL + + [video.loop: IDL set to Infinity] + expected: FAIL + + [video.loop: IDL set to -Infinity] + expected: FAIL + + [video.loop: IDL set to "\\0"] + expected: FAIL + + [video.loop: IDL set to object "test-toString"] + expected: FAIL + + [video.loop: IDL set to object "test-valueOf"] + expected: FAIL + + [video.mediaGroup: setAttribute() to ""] + expected: FAIL + + [video.mediaGroup: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [video.mediaGroup: setAttribute() to undefined] + expected: FAIL + + [video.mediaGroup: setAttribute() to 7] + expected: FAIL + + [video.mediaGroup: setAttribute() to 1.5] + expected: FAIL + + [video.mediaGroup: setAttribute() to true] + expected: FAIL + + [video.mediaGroup: setAttribute() to false] + expected: FAIL + + [video.mediaGroup: setAttribute() to object "[object Object\]"] + expected: FAIL + + [video.mediaGroup: setAttribute() to NaN] + expected: FAIL + + [video.mediaGroup: setAttribute() to Infinity] + expected: FAIL + + [video.mediaGroup: setAttribute() to -Infinity] + expected: FAIL + + [video.mediaGroup: setAttribute() to "\\0"] + expected: FAIL + + [video.mediaGroup: setAttribute() to null] + expected: FAIL + + [video.mediaGroup: setAttribute() to object "test-toString"] + expected: FAIL + + [video.mediaGroup: setAttribute() to object "test-valueOf"] + expected: FAIL + + [video.mediaGroup: IDL set to ""] + expected: FAIL + + [video.mediaGroup: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "] + expected: FAIL + + [video.mediaGroup: IDL set to undefined] + expected: FAIL + + [video.mediaGroup: IDL set to 7] + expected: FAIL + + [video.mediaGroup: IDL set to 1.5] + expected: FAIL + + [video.mediaGroup: IDL set to true] + expected: FAIL + + [video.mediaGroup: IDL set to false] + expected: FAIL + + [video.mediaGroup: IDL set to object "[object Object\]"] + expected: FAIL + + [video.mediaGroup: IDL set to NaN] + expected: FAIL + + [video.mediaGroup: IDL set to Infinity] + expected: FAIL + + [video.mediaGroup: IDL set to -Infinity] + expected: FAIL + + [video.mediaGroup: IDL set to "\\0"] + expected: FAIL + + [video.mediaGroup: IDL set to null] + expected: FAIL + + [video.mediaGroup: IDL set to object "test-toString"] + expected: FAIL + + [video.mediaGroup: IDL set to object "test-valueOf"] + expected: FAIL + + [video.controls: setAttribute() to ""] + expected: FAIL + + [video.controls: setAttribute() to " foo "] + expected: FAIL + + [video.controls: setAttribute() to undefined] + expected: FAIL + + [video.controls: setAttribute() to null] + expected: FAIL + + [video.controls: setAttribute() to 7] + expected: FAIL + + [video.controls: setAttribute() to 1.5] + expected: FAIL + + [video.controls: setAttribute() to true] + expected: FAIL + + [video.controls: setAttribute() to false] + expected: FAIL + + [video.controls: setAttribute() to object "[object Object\]"] + expected: FAIL + + [video.controls: setAttribute() to NaN] + expected: FAIL + + [video.controls: setAttribute() to Infinity] + expected: FAIL + + [video.controls: setAttribute() to -Infinity] + expected: FAIL + + [video.controls: setAttribute() to "\\0"] + expected: FAIL + + [video.controls: setAttribute() to object "test-toString"] + expected: FAIL + + [video.controls: setAttribute() to object "test-valueOf"] + expected: FAIL + + [video.controls: setAttribute() to "controls"] + expected: FAIL + + [video.controls: IDL set to ""] + expected: FAIL + + [video.controls: IDL set to " foo "] + expected: FAIL + + [video.controls: IDL set to undefined] + expected: FAIL + + [video.controls: IDL set to null] + expected: FAIL + + [video.controls: IDL set to 7] + expected: FAIL + + [video.controls: IDL set to 1.5] + expected: FAIL + + [video.controls: IDL set to false] + expected: FAIL + + [video.controls: IDL set to object "[object Object\]"] + expected: FAIL + + [video.controls: IDL set to NaN] + expected: FAIL + + [video.controls: IDL set to Infinity] + expected: FAIL + + [video.controls: IDL set to -Infinity] + expected: FAIL + + [video.controls: IDL set to "\\0"] + expected: FAIL + + [video.controls: IDL set to object "test-toString"] + expected: FAIL + + [video.controls: IDL set to object "test-valueOf"] + expected: FAIL + + [video.defaultMuted (: Setting .protocol = 'b' Can’t switch from special scheme to non-special. Note: this may change, see https://github.com/whatwg/url/issues/104] + expected: FAIL + + [: Setting .protocol = 'b' Can’t switch from special scheme to non-special. Note: this may change, see https://github.com/whatwg/url/issues/104] + expected: FAIL + + [: Setting .protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must.] + expected: FAIL + + [URL: Setting .protocol = 'http' Can’t switch from non-special scheme to special. Note: this may change, see https://github.com/whatwg/url/issues/104] + expected: FAIL + + [: Setting .protocol = 'http' Can’t switch from non-special scheme to special. Note: this may change, see https://github.com/whatwg/url/issues/104] + expected: FAIL + + [: Setting .protocol = 'http' Can’t switch from non-special scheme to special. Note: this may change, see https://github.com/whatwg/url/issues/104] + expected: FAIL + + [: Setting .protocol = 'https:foo : bar' Stuff after the first ':' is ignored] + expected: FAIL + + [: Setting Test>.protocol = 'view-source+data:foo : bar' Stuff after the first ':' is ignored] + expected: FAIL + + [: Setting .username = 'me' No host means no username] + expected: FAIL + + [: Setting .username = 'me' No host means no username] + expected: FAIL + + [: Setting .username = 'me' Cannot-be-a-base means no username] + expected: FAIL + + [: Setting .username = 'me'] + expected: FAIL + + [: Setting .username = 'me'] + expected: FAIL + + [: Setting .username = ''] + expected: FAIL + + [: Setting .username = ''] + expected: FAIL + + [: Setting .username = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' UTF-8 percent encoding with the userinfo encode set.] + expected: FAIL + + [: Setting .username = '%c3%89té' Bytes already percent-encoded are left as-is.] + expected: FAIL + + [: Setting .password = 'secret' No host means no password] + expected: FAIL + + [: Setting .password = 'secret' No host means no password] + expected: FAIL + + [: Setting .password = 'secret' Cannot-be-a-base means no password] + expected: FAIL + + [: Setting .password = 'secret'] + expected: FAIL + + [: Setting .password = 'secret'] + expected: FAIL + + [: Setting .password = ''] + expected: FAIL + + [: Setting .password = ''] + expected: FAIL + + [: Setting .password = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' UTF-8 percent encoding with the userinfo encode set.] + expected: FAIL + + [: Setting .password = '%c3%89té' Bytes already percent-encoded are left as-is.] + expected: FAIL + + [: Setting .host = 'example.com' Cannot-be-a-base means no host] + expected: FAIL + + [: Setting .host = 'example.net' Cannot-be-a-base means no password] + expected: FAIL + + [: Setting .host = 'example.com:8080'] + expected: FAIL + + [: Setting .host = 'example.com' Port number is unchanged if not specified in the new value] + expected: FAIL + + [URL: Setting .host = 'example.com:' Port number is unchanged if not specified] + expected: FAIL + + [: Setting .host = 'example.com:' Port number is unchanged if not specified] + expected: FAIL + + [: Setting .host = 'example.com:' Port number is unchanged if not specified] + expected: FAIL + + [: Setting .host = '' The empty host is not valid for special schemes] + expected: FAIL + + [: Setting .host = '' The empty host is OK for non-special schemes] + expected: FAIL + + [: Setting .host = 'example.net' Path-only URLs can gain a host] + expected: FAIL + + [: Setting .host = '0x7F000001:8080' IPv4 address syntax is normalized] + expected: FAIL + + [: Setting .host = '[::0:01\]:2' IPv6 address syntax is normalized] + expected: FAIL + + [: Setting .host = 'example.com:80' Default port number is removed] + expected: FAIL + + [: Setting .host = 'example.com:443' Default port number is removed] + expected: FAIL + + [: Setting .host = 'example.com:80' Default port number is only removed for the relevant scheme] + expected: FAIL + + [: Setting .host = 'example.com/stuff' Stuff after a / delimiter is ignored] + expected: FAIL + + [: Setting .host = 'example.com:8080/stuff' Stuff after a / delimiter is ignored] + expected: FAIL + + [: Setting .host = 'example.com?stuff' Stuff after a ? delimiter is ignored] + expected: FAIL + + [: Setting .host = 'example.com:8080?stuff' Stuff after a ? delimiter is ignored] + expected: FAIL + + [: Setting .host = 'example.com#stuff' Stuff after a # delimiter is ignored] + expected: FAIL + + [: Setting .host = 'example.com:8080#stuff' Stuff after a # delimiter is ignored] + expected: FAIL + + [: Setting .host = 'example.com\\stuff' Stuff after a \\ delimiter is ignored for special schemes] + expected: FAIL + + [: Setting .host = 'example.com:8080\\stuff' Stuff after a \\ delimiter is ignored for special schemes] + expected: FAIL + + [: Setting .host = 'example.com\\stuff' \\ is not a delimiter for non-special schemes, and it’s invalid in a domain] + expected: FAIL + + [: Setting .host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error] + expected: FAIL + + [: Setting .host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error] + expected: FAIL + + [: Setting .host = 'example.com:8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error] + expected: FAIL + + [: Setting .host = 'example.com:65535' Port numbers are 16 bit integers] + expected: FAIL + + [: Setting .host = 'example.com:65536' Port numbers are 16 bit integers, overflowing is an error. Hostname is still set, though.] + expected: FAIL + + [: Setting .hostname = 'example.com' Cannot-be-a-base means no host] + expected: FAIL + + [: Setting .hostname = 'example.net' Cannot-be-a-base means no password] + expected: FAIL + + [: Setting .hostname = 'example.com'] + expected: FAIL + + [: Setting .hostname = '' The empty host is not valid for special schemes] + expected: FAIL + + [: Setting .hostname = '' The empty host is OK for non-special schemes] + expected: FAIL + + [: Setting .hostname = 'example.net' Path-only URLs can gain a host] + expected: FAIL + + [: Setting .hostname = '0x7F000001' IPv4 address syntax is normalized] + expected: FAIL + + [: Setting .hostname = '[::0:01\]' IPv6 address syntax is normalized] + expected: FAIL + + [: Setting .hostname = 'example.com:8080' Stuff after a : delimiter is ignored] + expected: FAIL + + [: Setting .hostname = 'example.com:' Stuff after a : delimiter is ignored] + expected: FAIL + + [: Setting .hostname = 'example.com/stuff' Stuff after a / delimiter is ignored] + expected: FAIL + + [: Setting .hostname = 'example.com?stuff' Stuff after a ? delimiter is ignored] + expected: FAIL + + [: Setting .hostname = 'example.com#stuff' Stuff after a # delimiter is ignored] + expected: FAIL + + [: Setting .hostname = 'example.com\\stuff' Stuff after a \\ delimiter is ignored for special schemes] + expected: FAIL + + [: Setting .hostname = 'example.com\\stuff' \\ is not a delimiter for non-special schemes, and it’s invalid in a domain] + expected: FAIL + + [: Setting .port = '8080'] + expected: FAIL + + [: Setting .port = '' Port number is removed if empty is the new value] + expected: FAIL + + [: Setting .port = '80' Default port number is removed] + expected: FAIL + + [: Setting .port = '443' Default port number is removed] + expected: FAIL + + [: Setting .port = '80' Default port number is only removed for the relevant scheme] + expected: FAIL + + [: Setting .port = '8080/stuff' Stuff after a / delimiter is ignored] + expected: FAIL + + [: Setting .port = '8080?stuff' Stuff after a ? delimiter is ignored] + expected: FAIL + + [: Setting .port = '8080#stuff' Stuff after a # delimiter is ignored] + expected: FAIL + + [: Setting .port = '8080\\stuff' Stuff after a \\ delimiter is ignored for special schemes] + expected: FAIL + + [: Setting .port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error] + expected: FAIL + + [: Setting .port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error] + expected: FAIL + + [: Setting .port = '8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error] + expected: FAIL + + [: Setting .port = '65535' Port numbers are 16 bit integers] + expected: FAIL + + [: Setting .port = '65536' Port numbers are 16 bit integers, overflowing is an error] + expected: FAIL + + [: Setting .pathname = '/foo' Cannot-be-a-base don’t have a path] + expected: FAIL + + [: Setting .pathname = '/var/log/../run/bar.socket'] + expected: FAIL + + [: Setting .pathname = 'home'] + expected: FAIL + + [: Setting .pathname = '../home'] + expected: FAIL + + [: Setting .pathname = '\\a\\%2E\\b\\%2e.\\c' \\ is a segment delimiter for 'special' URLs] + expected: FAIL + + [: Setting .pathname = '\\a\\%2E\\b\\%2e.\\c' \\ is *not* a segment delimiter for non-'special' URLs] + expected: FAIL + + [URL: Setting .pathname = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.] + expected: FAIL + + [: Setting .pathname = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.] + expected: FAIL + + [: Setting .pathname = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.] + expected: FAIL + + [: Setting .pathname = '%2e%2E%c3%89té' Bytes already percent-encoded are left as-is, except %2E.] + expected: FAIL + + [: Setting .pathname = '?' ? needs to be encoded] + expected: FAIL + + [: Setting .search = 'lang=fr'] + expected: FAIL + + [: Setting .search = 'lang=fr'] + expected: FAIL + + [: Setting .search = '?lang=fr'] + expected: FAIL + + [: Setting .search = '??lang=fr'] + expected: FAIL + + [: Setting .search = '?'] + expected: FAIL + + [: Setting .search = ''] + expected: FAIL + + [: Setting .search = ''] + expected: FAIL + + [: Setting .search = ''] + expected: FAIL + + [URL: Setting .search = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.] + expected: FAIL + + [: Setting .search = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.] + expected: FAIL + + [: Setting .search = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.] + expected: FAIL + + [: Setting .search = '%c3%89té' Bytes already percent-encoded are left as-is] + expected: FAIL + + [: Setting .hash = 'main'] + expected: FAIL + + [: Setting .hash = 'main'] + expected: FAIL + + [: Setting .hash = '##nav'] + expected: FAIL + + [: Setting .hash = '#main'] + expected: FAIL + + [: Setting .hash = '#'] + expected: FAIL + + [: Setting .hash = ''] + expected: FAIL + + [URL: Setting .hash = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' No percent-encoding at all (!); nuls, tabs, and newlines are removed] + expected: FAIL + + [: Setting .hash = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' No percent-encoding at all (!); nuls, tabs, and newlines are removed] + expected: FAIL + + [: Setting .hash = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' No percent-encoding at all (!); nuls, tabs, and newlines are removed] + expected: FAIL + + [: Setting .hash = '%c3%89té' Bytes already percent-encoded are left as-is] + expected: FAIL + diff --git a/tests/wpt/metadata/websockets/multi-globals/message-received.html.ini b/tests/wpt/metadata/websockets/multi-globals/message-received.html.ini new file mode 100644 index 00000000000..7c5c35722cf --- /dev/null +++ b/tests/wpt/metadata/websockets/multi-globals/message-received.html.ini @@ -0,0 +1,8 @@ +[message-received.html] + type: testharness + [ArrayBuffer should be created in the relevant realm of the WebSocket] + expected: FAIL + + [Blob should be created in the relevant realm of the WebSocket] + expected: FAIL + diff --git a/tests/wpt/metadata/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker.js.ini b/tests/wpt/metadata/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker.js.ini index 71011a2a4ca..e15edf551e2 100644 --- a/tests/wpt/metadata/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker.js.ini +++ b/tests/wpt/metadata/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker.js.ini @@ -1,4 +1,4 @@ -[DedicatedWorkerGlobalScope-members.worker] +[DedicatedWorkerGlobalScope-members.worker.html] type: testharness [existence of onoffline] expected: FAIL diff --git a/tests/wpt/metadata/workers/constructors/Worker/expected-self-properties.worker.js.ini b/tests/wpt/metadata/workers/constructors/Worker/expected-self-properties.worker.js.ini index 1e27dc99102..4b41f263de2 100644 --- a/tests/wpt/metadata/workers/constructors/Worker/expected-self-properties.worker.js.ini +++ b/tests/wpt/metadata/workers/constructors/Worker/expected-self-properties.worker.js.ini @@ -1,7 +1,8 @@ -[expected-self-properties.worker] +[expected-self-properties.worker.html] type: testharness [existence of MessageChannel] expected: FAIL [existence of SharedWorker] expected: FAIL + diff --git a/tests/wpt/metadata/workers/data-url-shared.html.ini b/tests/wpt/metadata/workers/data-url-shared.html.ini new file mode 100644 index 00000000000..8ca363c84bd --- /dev/null +++ b/tests/wpt/metadata/workers/data-url-shared.html.ini @@ -0,0 +1,5 @@ +[data-url-shared.html] + type: testharness + [data URL shared worker] + expected: FAIL + diff --git a/tests/wpt/metadata/workers/interfaces.worker.js.ini b/tests/wpt/metadata/workers/interfaces.worker.js.ini index a3335ec02ae..9c663a5335d 100644 --- a/tests/wpt/metadata/workers/interfaces.worker.js.ini +++ b/tests/wpt/metadata/workers/interfaces.worker.js.ini @@ -1,71 +1,3 @@ -[interfaces.worker] +[interfaces.worker.html] type: testharness - expected: - if os == "mac": TIMEOUT - if os == "linux": CRASH - [WorkerGlobalScope interface: operation close()] - expected: FAIL - - [WorkerGlobalScope interface: attribute onerror] - expected: FAIL - - [WorkerGlobalScope interface: attribute onlanguagechange] - expected: FAIL - - [WorkerGlobalScope interface: attribute onoffline] - expected: FAIL - - [WorkerGlobalScope interface: attribute ononline] - expected: FAIL - - [DedicatedWorkerGlobalScope interface: operation postMessage(any,[object Object\])] - expected: FAIL - - [DedicatedWorkerGlobalScope interface: attribute onmessage] - expected: FAIL - - [WorkerGlobalScope interface: self must inherit property "onlanguagechange" with the proper type (4)] - expected: FAIL - - [WorkerGlobalScope interface: self must inherit property "onoffline" with the proper type (5)] - expected: FAIL - - [WorkerGlobalScope interface: self must inherit property "ononline" with the proper type (6)] - expected: FAIL - - [WorkerNavigator interface: attribute languages] - expected: FAIL - - [WorkerNavigator interface: attribute onLine] - expected: FAIL - - [WorkerLocation interface: attribute origin] - expected: FAIL - - [WorkerLocation interface: self.location must inherit property "origin" with the proper type (1)] - expected: FAIL - - [WorkerNavigator interface: self.navigator must inherit property "languages" with the proper type (7)] - expected: FAIL - - [WorkerNavigator interface: self.navigator must inherit property "onLine" with the proper type (8)] - expected: FAIL - - [EventTarget interface: existence and properties of interface object] - expected: FAIL - - [WorkerGlobalScope interface: existence and properties of interface object] - expected: FAIL - - [DedicatedWorkerGlobalScope interface: existence and properties of interface object] - expected: FAIL - - [WorkerNavigator interface: existence and properties of interface object] - expected: FAIL - - [WorkerLocation interface: existence and properties of interface object] - expected: FAIL - - [WorkerGlobalScope interface: self must inherit property "close" with the proper type (2)] - expected: FAIL - + disabled: https://github.com/servo/servo/issues/12654 diff --git a/tests/wpt/metadata/workers/interfaces/WorkerUtils/navigator/window-only.worker.js.ini b/tests/wpt/metadata/workers/interfaces/WorkerUtils/navigator/window-only.worker.js.ini deleted file mode 100644 index 33a27f8a6fd..00000000000 --- a/tests/wpt/metadata/workers/interfaces/WorkerUtils/navigator/window-only.worker.js.ini +++ /dev/null @@ -1,11 +0,0 @@ -[window-only.worker] - type: testharness - [NavigatorID properties exposed only for Window: appCodeName] - expected: FAIL - - [NavigatorID properties exposed only for Window: product] - expected: FAIL - - [NavigatorID properties exposed only for Window: taintEnabled] - expected: FAIL - diff --git a/tests/wpt/metadata/workers/semantics/interface-objects/001.worker.js.ini b/tests/wpt/metadata/workers/semantics/interface-objects/001.worker.js.ini index 60807857f7a..bf57cc0f245 100644 --- a/tests/wpt/metadata/workers/semantics/interface-objects/001.worker.js.ini +++ b/tests/wpt/metadata/workers/semantics/interface-objects/001.worker.js.ini @@ -1,4 +1,4 @@ -[001.worker] +[001.worker.html] type: testharness [The SharedWorker interface object should be exposed.] expected: FAIL @@ -9,21 +9,9 @@ [The MessageChannel interface object should be exposed.] expected: FAIL - [The CanvasProxy interface object should be exposed.] - expected: FAIL - [The ImageBitmap interface object should be exposed.] expected: FAIL - [The DrawingStyle interface object should be exposed.] - expected: FAIL - - [The Path interface object should be exposed.] - expected: FAIL - - [The TextMetrics interface object should be exposed.] - expected: FAIL - [The CanvasPath interface object should be exposed.] expected: FAIL @@ -80,3 +68,4 @@ [The IDBTransaction interface object should be exposed.] expected: FAIL + diff --git a/tests/wpt/metadata/workers/semantics/interface-objects/002.worker.js.ini b/tests/wpt/metadata/workers/semantics/interface-objects/002.worker.js.ini index 9d9c868c272..d05ef098814 100644 --- a/tests/wpt/metadata/workers/semantics/interface-objects/002.worker.js.ini +++ b/tests/wpt/metadata/workers/semantics/interface-objects/002.worker.js.ini @@ -1,4 +1,4 @@ -[002.worker] +[002.worker.html] type: testharness [The Location interface object should not be exposed.] expected: FAIL diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 4752ad4381f..26d7ae9189b 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -8105,7 +8105,7 @@ "mozilla/interfaces.worker.js": [ { "path": "mozilla/interfaces.worker.js", - "url": "/_mozilla/mozilla/interfaces.worker" + "url": "/_mozilla/mozilla/interfaces.worker.html" } ], "mozilla/iterable.html": [ diff --git a/tests/wpt/mozilla/meta/css/matchMedia.html.ini b/tests/wpt/mozilla/meta/css/matchMedia.html.ini index 4c3498a53a7..41b0d9b51c6 100644 --- a/tests/wpt/mozilla/meta/css/matchMedia.html.ini +++ b/tests/wpt/mozilla/meta/css/matchMedia.html.ini @@ -1,6 +1,5 @@ [matchMedia.html] type: testharness - expected: OK [window.matchMedia exists] expected: FAIL diff --git a/tests/wpt/web-platform-tests/.gitignore b/tests/wpt/web-platform-tests/.gitignore index 0274bf6ed95..b70cb0f2b34 100644 --- a/tests/wpt/web-platform-tests/.gitignore +++ b/tests/wpt/web-platform-tests/.gitignore @@ -11,3 +11,4 @@ scratch testharness_runner.html webdriver/.idea .vscode/ +.DS_Store diff --git a/tests/wpt/web-platform-tests/.travis.yml b/tests/wpt/web-platform-tests/.travis.yml index d2f88f203fa..d2ed86edd56 100644 --- a/tests/wpt/web-platform-tests/.travis.yml +++ b/tests/wpt/web-platform-tests/.travis.yml @@ -1,14 +1,50 @@ -sudo: false # cause Travis to start builds much faster +dist: trusty language: python -python: - - "2.7" +addons: + hosts: + - 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 before_install: - git submodule update --init --recursive -# command to run tests, e.g. python setup.py test + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start +install: + - pip install -U setuptools + - pip install -U requests +matrix: + include: + - os: linux + python: "2.7" + env: + - SCRIPT=ci_lint.sh + - os: linux + python: "2.7" + addons: + apt: + packages: + - libnss3-tools + env: + - secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM=" + - SCRIPT=ci_stability.sh + - PRODUCT=firefox + - os: linux + sudo: required + python: "2.7" + addons: + apt: + packages: + - libappindicator1 + - fonts-liberation + env: + - secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM=" + - SCRIPT=ci_stability.sh + - PRODUCT=chrome script: - - ./lint - - ./manifest - - ./diff-manifest.py + - bash $SCRIPT notifications: email: on_success: never diff --git a/tests/wpt/web-platform-tests/2dcontext/compositing/2d.composite.globalAlpha.canvascopy.html b/tests/wpt/web-platform-tests/2dcontext/compositing/2d.composite.globalAlpha.canvascopy.html new file mode 100644 index 00000000000..e7978c89137 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/compositing/2d.composite.globalAlpha.canvascopy.html @@ -0,0 +1,40 @@ + + +Canvas test: 2d.composite.globalAlpha.canvascopy + + + + + + +

2d.composite.globalAlpha.canvascopy

+

+ + +

Actual output:

+

FAIL (fallback content)

+

Expected output:

+

    + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html new file mode 100644 index 00000000000..3dbda598b63 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsl-1 + + + + + + +

    2d.fillStyle.parse.css-color-4-hsl-1

    +

    + +

    +

    Actual output:

    +

    FAIL (fallback content)

    +

    Expected output:

    +

      + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html new file mode 100644 index 00000000000..25e98dc794c --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsl-2 + + + + + + +

      2d.fillStyle.parse.css-color-4-hsl-2

      +

      + +

      +

      Actual output:

      +

      FAIL (fallback content)

      +

      Expected output:

      +

        + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html new file mode 100644 index 00000000000..de600d94bd8 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsl-3 + + + + + + +

        2d.fillStyle.parse.css-color-4-hsl-3

        +

        + +

        +

        Actual output:

        +

        FAIL (fallback content)

        +

        Expected output:

        +

          + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html new file mode 100644 index 00000000000..52d917c6cf7 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsl-4 + + + + + + +

          2d.fillStyle.parse.css-color-4-hsl-4

          +

          + +

          +

          Actual output:

          +

          FAIL (fallback content)

          +

          Expected output:

          +

            + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html new file mode 100644 index 00000000000..4f65b3dea2a --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsl-5 + + + + + + +

            2d.fillStyle.parse.css-color-4-hsl-5

            +

            + +

            +

            Actual output:

            +

            FAIL (fallback content)

            +

            Expected output:

            +

              + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html new file mode 100644 index 00000000000..19aa5974f2c --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsl-6 + + + + + + +

              2d.fillStyle.parse.css-color-4-hsl-6

              +

              + +

              +

              Actual output:

              +

              FAIL (fallback content)

              +

              Expected output:

              +

                + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html new file mode 100644 index 00000000000..d9b6a3c98c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsl-7 + + + + + + +

                2d.fillStyle.parse.css-color-4-hsl-7

                +

                + +

                +

                Actual output:

                +

                FAIL (fallback content)

                +

                Expected output:

                +

                  + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html new file mode 100644 index 00000000000..24e2b51830c --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsl-8 + + + + + + +

                  2d.fillStyle.parse.css-color-4-hsl-8

                  +

                  + +

                  +

                  Actual output:

                  +

                  FAIL (fallback content)

                  +

                  Expected output:

                  +

                    + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html new file mode 100644 index 00000000000..9da548f3e72 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsl-9 + + + + + + +

                    2d.fillStyle.parse.css-color-4-hsl-9

                    +

                    + +

                    +

                    Actual output:

                    +

                    FAIL (fallback content)

                    +

                    Expected output:

                    +

                      + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html new file mode 100644 index 00000000000..65881eeb15f --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsla-1 + + + + + + +

                      2d.fillStyle.parse.css-color-4-hsla-1

                      +

                      + +

                      +

                      Actual output:

                      +

                      FAIL (fallback content)

                      +

                      Expected output:

                      +

                        + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html new file mode 100644 index 00000000000..91f5e345959 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsla-2 + + + + + + +

                        2d.fillStyle.parse.css-color-4-hsla-2

                        +

                        + +

                        +

                        Actual output:

                        +

                        FAIL (fallback content)

                        +

                        Expected output:

                        +

                          + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html new file mode 100644 index 00000000000..eb6c69526e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsla-3 + + + + + + +

                          2d.fillStyle.parse.css-color-4-hsla-3

                          +

                          + +

                          +

                          Actual output:

                          +

                          FAIL (fallback content)

                          +

                          Expected output:

                          +

                            + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html new file mode 100644 index 00000000000..ce5bdef7ac3 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsla-4 + + + + + + +

                            2d.fillStyle.parse.css-color-4-hsla-4

                            +

                            + +

                            +

                            Actual output:

                            +

                            FAIL (fallback content)

                            +

                            Expected output:

                            +

                              + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html new file mode 100644 index 00000000000..47b426daf54 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsla-5 + + + + + + +

                              2d.fillStyle.parse.css-color-4-hsla-5

                              +

                              + +

                              +

                              Actual output:

                              +

                              FAIL (fallback content)

                              +

                              Expected output:

                              +

                                + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html new file mode 100644 index 00000000000..6dc5e7aef3f --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsla-6 + + + + + + +

                                2d.fillStyle.parse.css-color-4-hsla-6

                                +

                                + +

                                +

                                Actual output:

                                +

                                FAIL (fallback content)

                                +

                                Expected output:

                                +

                                  + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html new file mode 100644 index 00000000000..a1069fea9fe --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsla-7 + + + + + + +

                                  2d.fillStyle.parse.css-color-4-hsla-7

                                  +

                                  + +

                                  +

                                  Actual output:

                                  +

                                  FAIL (fallback content)

                                  +

                                  Expected output:

                                  +

                                    + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html new file mode 100644 index 00000000000..7d04b1ca552 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsla-8 + + + + + + +

                                    2d.fillStyle.parse.css-color-4-hsla-8

                                    +

                                    + +

                                    +

                                    Actual output:

                                    +

                                    FAIL (fallback content)

                                    +

                                    Expected output:

                                    +

                                      + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html new file mode 100644 index 00000000000..0a10c6e61c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-hsla-9 + + + + + + +

                                      2d.fillStyle.parse.css-color-4-hsla-9

                                      +

                                      + +

                                      +

                                      Actual output:

                                      +

                                      FAIL (fallback content)

                                      +

                                      Expected output:

                                      +

                                        + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html new file mode 100644 index 00000000000..fd6376e1a2a --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgb-1 + + + + + + +

                                        2d.fillStyle.parse.css-color-4-rgb-1

                                        +

                                        + +

                                        +

                                        Actual output:

                                        +

                                        FAIL (fallback content)

                                        +

                                        Expected output:

                                        +

                                          + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html new file mode 100644 index 00000000000..ec0f62344f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgb-2 + + + + + + +

                                          2d.fillStyle.parse.css-color-4-rgb-2

                                          +

                                          + +

                                          +

                                          Actual output:

                                          +

                                          FAIL (fallback content)

                                          +

                                          Expected output:

                                          +

                                            + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html new file mode 100644 index 00000000000..980abef36c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgb-3 + + + + + + +

                                            2d.fillStyle.parse.css-color-4-rgb-3

                                            +

                                            + +

                                            +

                                            Actual output:

                                            +

                                            FAIL (fallback content)

                                            +

                                            Expected output:

                                            +

                                              + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html new file mode 100644 index 00000000000..a2543b566ab --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgb-4 + + + + + + +

                                              2d.fillStyle.parse.css-color-4-rgb-4

                                              +

                                              + +

                                              +

                                              Actual output:

                                              +

                                              FAIL (fallback content)

                                              +

                                              Expected output:

                                              +

                                                + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html new file mode 100644 index 00000000000..6b310d763ba --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgb-5 + + + + + + +

                                                2d.fillStyle.parse.css-color-4-rgb-5

                                                +

                                                + +

                                                +

                                                Actual output:

                                                +

                                                FAIL (fallback content)

                                                +

                                                Expected output:

                                                +

                                                  + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html new file mode 100644 index 00000000000..d38f7e0ac0e --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgb-6 + + + + + + +

                                                  2d.fillStyle.parse.css-color-4-rgb-6

                                                  +

                                                  + +

                                                  +

                                                  Actual output:

                                                  +

                                                  FAIL (fallback content)

                                                  +

                                                  Expected output:

                                                  +

                                                    + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html new file mode 100644 index 00000000000..83dfb2f86af --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgba-1 + + + + + + +

                                                    2d.fillStyle.parse.css-color-4-rgba-1

                                                    +

                                                    + +

                                                    +

                                                    Actual output:

                                                    +

                                                    FAIL (fallback content)

                                                    +

                                                    Expected output:

                                                    +

                                                      + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html new file mode 100644 index 00000000000..390d0bd0fab --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgba-2 + + + + + + +

                                                      2d.fillStyle.parse.css-color-4-rgba-2

                                                      +

                                                      + +

                                                      +

                                                      Actual output:

                                                      +

                                                      FAIL (fallback content)

                                                      +

                                                      Expected output:

                                                      +

                                                        + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html new file mode 100644 index 00000000000..f0fd88ee6c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgba-3 + + + + + + +

                                                        2d.fillStyle.parse.css-color-4-rgba-3

                                                        +

                                                        + +

                                                        +

                                                        Actual output:

                                                        +

                                                        FAIL (fallback content)

                                                        +

                                                        Expected output:

                                                        +

                                                          + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html new file mode 100644 index 00000000000..bd3e8edb2f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgba-4 + + + + + + +

                                                          2d.fillStyle.parse.css-color-4-rgba-4

                                                          +

                                                          + +

                                                          +

                                                          Actual output:

                                                          +

                                                          FAIL (fallback content)

                                                          +

                                                          Expected output:

                                                          +

                                                            + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.png new file mode 100644 index 0000000000000000000000000000000000000000..2733836c998fa919d9f6880fd96a32026e82ca2c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!2~2#!(YAxQfx`y?k)`fL2$v|<&%LTO`a}} zAsLNtFF0~CC@>sw*jk^y_CcJ|9aV|h$^3e2uQS>kY8%iLTDVVOOukmV+zsd&22WQ% Jmvv4FO#p%IF~$G@ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html new file mode 100644 index 00000000000..0287ef693cd --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgba-5 + + + + + + +

                                                            2d.fillStyle.parse.css-color-4-rgba-5

                                                            +

                                                            + +

                                                            +

                                                            Actual output:

                                                            +

                                                            FAIL (fallback content)

                                                            +

                                                            Expected output:

                                                            +

                                                              + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html new file mode 100644 index 00000000000..09042c8778e --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.css-color-4-rgba-6 + + + + + + +

                                                              2d.fillStyle.parse.css-color-4-rgba-6

                                                              +

                                                              + +

                                                              +

                                                              Actual output:

                                                              +

                                                              FAIL (fallback content)

                                                              +

                                                              Expected output:

                                                              +

                                                                + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.png b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.png new file mode 100644 index 0000000000000000000000000000000000000000..c5661de82b2f95de99eab36c728d4ea0d6ffb721 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z*!3HE(nbz$CQfx`y?k)`fL2$v|<&%LTlRRA< zLn`LHz33>&peS%)!&9Ay@zQ(z8EaLztS+0Tf1B`eFW-an6C|9IcsdPLj?td+jLG^l WNA literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html new file mode 100644 index 00000000000..25bab97b05d --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-hsl-1 + + + + + + +

                                                                2d.fillStyle.parse.invalid.css-color-4-hsl-1

                                                                +

                                                                + + +

                                                                Actual output:

                                                                +

                                                                FAIL (fallback content)

                                                                +

                                                                Expected output:

                                                                +

                                                                  + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html new file mode 100644 index 00000000000..f4a47f5d8aa --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-hsl-2 + + + + + + +

                                                                  2d.fillStyle.parse.invalid.css-color-4-hsl-2

                                                                  +

                                                                  + + +

                                                                  Actual output:

                                                                  +

                                                                  FAIL (fallback content)

                                                                  +

                                                                  Expected output:

                                                                  +

                                                                    + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-7.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html similarity index 82% rename from tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-7.html rename to tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html index 06580f64816..490c66f362e 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-7.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html @@ -1,13 +1,13 @@ -Canvas test: 2d.fillStyle.parse.invalid.rgba-7 +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-hsl-3 -

                                                                    2d.fillStyle.parse.invalid.rgba-7

                                                                    +

                                                                    2d.fillStyle.parse.invalid.css-color-4-hsl-3

                                                                    @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgba(255, 0, 0, '; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'hsl(0, 100% 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-7.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html similarity index 82% rename from tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-7.html rename to tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html index bc0bb5ef6f6..a3ab91c16a8 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-7.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html @@ -1,13 +1,13 @@ -Canvas test: 2d.fillStyle.parse.invalid.rgb-7 +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-hsl-4 -

                                                                    2d.fillStyle.parse.invalid.rgb-7

                                                                    +

                                                                    2d.fillStyle.parse.invalid.css-color-4-hsl-4

                                                                    @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgb(255, 0, 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'hsl(0 100% 50% /)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html new file mode 100644 index 00000000000..a437cd99cc7 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-hsl-5 + + + + + + +

                                                                    2d.fillStyle.parse.invalid.css-color-4-hsl-5

                                                                    +

                                                                    + + +

                                                                    Actual output:

                                                                    +

                                                                    FAIL (fallback content)

                                                                    +

                                                                    Expected output:

                                                                    +

                                                                      + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html new file mode 100644 index 00000000000..5f71de33098 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-hsla-1 + + + + + + +

                                                                      2d.fillStyle.parse.invalid.css-color-4-hsla-1

                                                                      +

                                                                      + + +

                                                                      Actual output:

                                                                      +

                                                                      FAIL (fallback content)

                                                                      +

                                                                      Expected output:

                                                                      +

                                                                        + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html new file mode 100644 index 00000000000..36c9fd1a6e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-hsla-2 + + + + + + +

                                                                        2d.fillStyle.parse.invalid.css-color-4-hsla-2

                                                                        +

                                                                        + + +

                                                                        Actual output:

                                                                        +

                                                                        FAIL (fallback content)

                                                                        +

                                                                        Expected output:

                                                                        +

                                                                          + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html new file mode 100644 index 00000000000..049ad397e00 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-hsla-3 + + + + + + +

                                                                          2d.fillStyle.parse.invalid.css-color-4-hsla-3

                                                                          +

                                                                          + + +

                                                                          Actual output:

                                                                          +

                                                                          FAIL (fallback content)

                                                                          +

                                                                          Expected output:

                                                                          +

                                                                            + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html new file mode 100644 index 00000000000..7a2534ceb29 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-rgb-1 + + + + + + +

                                                                            2d.fillStyle.parse.invalid.css-color-4-rgb-1

                                                                            +

                                                                            + + +

                                                                            Actual output:

                                                                            +

                                                                            FAIL (fallback content)

                                                                            +

                                                                            Expected output:

                                                                            +

                                                                              + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-4.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html similarity index 82% rename from tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-4.html rename to tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html index e4d78b20e14..ca5a591ef64 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-4.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html @@ -1,13 +1,13 @@ -Canvas test: 2d.fillStyle.parse.invalid.rgb-4 +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-rgb-2 -

                                                                              2d.fillStyle.parse.invalid.rgb-4

                                                                              +

                                                                              2d.fillStyle.parse.invalid.css-color-4-rgb-2

                                                                              @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgb(100%, 0, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgb(255 0 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html new file mode 100644 index 00000000000..e34ddfdf9af --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-rgb-3 + + + + + + +

                                                                              2d.fillStyle.parse.invalid.css-color-4-rgb-3

                                                                              +

                                                                              + + +

                                                                              Actual output:

                                                                              +

                                                                              FAIL (fallback content)

                                                                              +

                                                                              Expected output:

                                                                              +

                                                                                + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-5.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html similarity index 82% rename from tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-5.html rename to tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html index 92f933db799..682da31d2db 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-5.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html @@ -1,13 +1,13 @@ -Canvas test: 2d.fillStyle.parse.invalid.rgb-5 +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-rgb-4 -

                                                                                2d.fillStyle.parse.invalid.rgb-5

                                                                                +

                                                                                2d.fillStyle.parse.invalid.css-color-4-rgb-4

                                                                                @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgb(255 0 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgb(0 0 0 /)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html new file mode 100644 index 00000000000..75a11dc199f --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-rgb-5 + + + + + + +

                                                                                2d.fillStyle.parse.invalid.css-color-4-rgb-5

                                                                                +

                                                                                + + +

                                                                                Actual output:

                                                                                +

                                                                                FAIL (fallback content)

                                                                                +

                                                                                Expected output:

                                                                                +

                                                                                  + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html new file mode 100644 index 00000000000..778fa479ce9 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-rgba-1 + + + + + + +

                                                                                  2d.fillStyle.parse.invalid.css-color-4-rgba-1

                                                                                  +

                                                                                  + + +

                                                                                  Actual output:

                                                                                  +

                                                                                  FAIL (fallback content)

                                                                                  +

                                                                                  Expected output:

                                                                                  +

                                                                                    + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-6.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html similarity index 82% rename from tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-6.html rename to tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html index e3de9df5387..14c83a56912 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-6.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html @@ -1,13 +1,13 @@ -Canvas test: 2d.fillStyle.parse.invalid.rgb-6 +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-rgba-2 -

                                                                                    2d.fillStyle.parse.invalid.rgb-6

                                                                                    +

                                                                                    2d.fillStyle.parse.invalid.css-color-4-rgba-2

                                                                                    @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgb(255, - 1, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgba(255 0 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html new file mode 100644 index 00000000000..9647877b2a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.fillStyle.parse.invalid.css-color-4-rgba-3 + + + + + + +

                                                                                    2d.fillStyle.parse.invalid.css-color-4-rgba-3

                                                                                    +

                                                                                    + + +

                                                                                    Actual output:

                                                                                    +

                                                                                    FAIL (fallback content)

                                                                                    +

                                                                                    Expected output:

                                                                                    +

                                                                                      + + diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html index 87b6a5731ce..0e3f8514847 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'hsl(0, 100%, 100%, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'hsl(0, 100.%, 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html index 008e278b558..6343ab12525 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'hsl(0, 100.%, 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'hsl(0, 100%, 50%,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-6.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html similarity index 84% rename from tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-6.html rename to tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html index 3e7f06ad436..698a6cb9abc 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-6.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html @@ -1,13 +1,13 @@ -Canvas test: 2d.fillStyle.parse.invalid.rgba-6 +Canvas test: 2d.fillStyle.parse.invalid.hsla-3 -

                                                                                      2d.fillStyle.parse.invalid.rgba-6

                                                                                      +

                                                                                      2d.fillStyle.parse.invalid.hsla-3

                                                                                      @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgba(255, 0, 0, 1.)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'hsla(0, 0, 50%, 1,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html index fc0433eae59..66fb8e13d28 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgb(255.0, 0, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgb(255.0, 0, 0,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html index 68c06e5ebec..7f9457c8220 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgb(255, 0.0, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgb(100%, 0, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html index f864c9f2bc4..2530569c28d 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgb(255.0, 0, 0,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgb(255, - 1, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html index 774aed13d51..1dc343ad188 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgba(255, 0, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgba(100%, 0, 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html index 14065e63426..5f5bb7941ae 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgba(255.0, 0, 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgba(255, 0, 0, 1. 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html index 5947169fe55..67ed7f2a226 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgba(100%, 0, 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgba(255, 0, 0, 1.)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html index 9870b14f9d1..aea9725a2dc 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgba(255, 0, 0, 100%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgba(255, 0, 0, '; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html index 4274996cae3..a149ed343a3 100644 --- a/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html +++ b/tests/wpt/web-platform-tests/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html @@ -21,7 +21,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#0f0'; -try { ctx.fillStyle = 'rgba(255, 0, 0, 1. 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does +try { ctx.fillStyle = 'rgba(255, 0, 0, 1,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); diff --git a/tests/wpt/web-platform-tests/2dcontext/line-styles/setLineDash.html b/tests/wpt/web-platform-tests/2dcontext/line-styles/setLineDash.html new file mode 100644 index 00000000000..06fcada768f --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/line-styles/setLineDash.html @@ -0,0 +1,104 @@ + + +setLineDash + + + + + diff --git a/tests/wpt/web-platform-tests/2dcontext/path-objects/2d.path.lineTo.nonfinite.details.html b/tests/wpt/web-platform-tests/2dcontext/path-objects/2d.path.lineTo.nonfinite.details.html new file mode 100644 index 00000000000..88886ebe245 --- /dev/null +++ b/tests/wpt/web-platform-tests/2dcontext/path-objects/2d.path.lineTo.nonfinite.details.html @@ -0,0 +1,31 @@ + + +Canvas test: 2d.path.lineTo.nonfinite.details + + + + + + +

                                                                                      2d.path.lineTo.nonfinite.details

                                                                                      +

                                                                                      lineTo() with Infinity/NaN for first arg still converts the second arg

                                                                                      + + +

                                                                                      Actual output:

                                                                                      +

                                                                                      FAIL (fallback content)

                                                                                      +

                                                                                      Expected output:

                                                                                      +

                                                                                        + + diff --git a/tests/wpt/web-platform-tests/2dcontext/tools/tests2d.yaml b/tests/wpt/web-platform-tests/2dcontext/tools/tests2d.yaml index 546e994fbe9..20a77dbd1f5 100644 --- a/tests/wpt/web-platform-tests/2dcontext/tools/tests2d.yaml +++ b/tests/wpt/web-platform-tests/2dcontext/tools/tests2d.yaml @@ -1005,6 +1005,26 @@ @assert pixel 50,25 ==~ 2,253,0,255; expected: green +- name: 2d.composite.globalAlpha.canvascopy + testing: + - 2d.composite.globalAlpha.image + code: | + var canvas2 = document.createElement('canvas'); + canvas2.width = 100; + canvas2.height = 50; + var ctx2 = canvas2.getContext('2d'); + ctx2.fillStyle = '#0f0'; + ctx2.fillRect(0, 0, 100, 50); + + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 100, 50); + + ctx.globalCompositeOperation = 'copy' + ctx.globalAlpha = 0.51; + ctx.drawImage(canvas2, 0, 0); + @assert pixel 50,25 ==~ 0,255,0,130; + expected: green + - meta: | # Composite operation tests @@ -1372,6 +1392,40 @@ ('hsla-clamp-6', 'hsla(120, 100%, 0%, -2)', 0,0,0,0, ""), ('svg-1', 'gray', 128,128,128,255, ""), ('svg-2', 'grey', 128,128,128,255, ""), + # css-color-4 rgb() color function + # https://drafts.csswg.org/css-color/#numeric-rgb + ('css-color-4-rgb-1', 'rgb(0, 255.0, 0)', 0,255,0,255, ""), + ('css-color-4-rgb-2', 'rgb(0, 255, 0, 0.2)', 0,255,0,51, ""), + ('css-color-4-rgb-3', 'rgb(0, 255, 0, 20%)', 0,255,0,51, ""), + ('css-color-4-rgb-4', 'rgb(0 255 0)', 0,255,0,255, ""), + ('css-color-4-rgb-5', 'rgb(0 255 0 / 0.2)', 0,255,0,51, ""), + ('css-color-4-rgb-6', 'rgb(0 255 0 / 20%)', 0,255,0,51, ""), + ('css-color-4-rgba-1', 'rgba(0, 255.0, 0)', 0,255,0,255, ""), + ('css-color-4-rgba-2', 'rgba(0, 255, 0, 0.2)', 0,255,0,51, ""), + ('css-color-4-rgba-3', 'rgba(0, 255, 0, 20%)', 0,255,0,51, ""), + ('css-color-4-rgba-4', 'rgba(0 255 0)', 0,255,0,255, ""), + ('css-color-4-rgba-5', 'rgba(0 255 0 / 0.2)', 0,255,0,51, ""), + ('css-color-4-rgba-6', 'rgba(0 255 0 / 20%)', 0,255,0,51, ""), + # css-color-4 hsl() color function + # https://drafts.csswg.org/css-color/#the-hsl-notation + ('css-color-4-hsl-1', 'hsl(120 100.0% 50.0%)', 0,255,0,255, ""), + ('css-color-4-hsl-2', 'hsl(120 100.0% 50.0% / 0.2)', 0,255,0,51, ""), + ('css-color-4-hsl-3', 'hsl(120.0, 100.0%, 50.0%, 0.2)', 0,255,0,51, ""), + ('css-color-4-hsl-4', 'hsl(120.0, 100.0%, 50.0%, 20%)', 0,255,0,51, ""), + ('css-color-4-hsl-5', 'hsl(120deg, 100.0%, 50.0%, 0.2)', 0,255,0,51, ""), + ('css-color-4-hsl-6', 'hsl(120deg, 100.0%, 50.0%)', 0,255,0,255, ""), + ('css-color-4-hsl-7', 'hsl(133.33333333grad, 100.0%, 50.0%)', 0,255,0,255, ""), + ('css-color-4-hsl-8', 'hsl(2.0943951024rad, 100.0%, 50.0%)', 0,255,0,255, ""), + ('css-color-4-hsl-9', 'hsl(0.3333333333turn, 100.0%, 50.0%)', 0,255,0,255, ""), + ('css-color-4-hsla-1', 'hsl(120 100.0% 50.0%)', 0,255,0,255, ""), + ('css-color-4-hsla-2', 'hsl(120 100.0% 50.0% / 0.2)', 0,255,0,51, ""), + ('css-color-4-hsla-3', 'hsl(120.0, 100.0%, 50.0%, 0.2)', 0,255,0,51, ""), + ('css-color-4-hsla-4', 'hsl(120.0, 100.0%, 50.0%, 20%)', 0,255,0,51, ""), + ('css-color-4-hsla-5', 'hsl(120deg, 100.0%, 50.0%, 0.2)', 0,255,0,51, ""), + ('css-color-4-hsla-6', 'hsl(120deg, 100.0%, 50.0%)', 0,255,0,255, ""), + ('css-color-4-hsla-7', 'hsl(133.33333333grad, 100.0%, 50.0%)', 0,255,0,255, ""), + ('css-color-4-hsla-8', 'hsl(2.0943951024rad, 100.0%, 50.0%)', 0,255,0,255, ""), + ('css-color-4-hsla-9', 'hsl(0.3333333333turn, 100.0%, 50.0%)', 0,255,0,255, ""), # currentColor is handled later ]: # TODO: test by retrieving fillStyle, instead of actually drawing? @@ -1404,33 +1458,47 @@ ('hex6', '#fg0000'), ('hex7', '#ff0000f'), ('hex8', '#fg0000ff'), - ('rgb-1', 'rgb(255.0, 0, 0)'), - ('rgb-2', 'rgb(255, 0.0, 0)'), - ('rgb-3', 'rgb(255.0, 0, 0,)'), - ('rgb-4', 'rgb(100%, 0, 0)'), - ('rgb-5', 'rgb(255 0 0)'), - ('rgb-6', 'rgb(255, - 1, 0)'), - ('rgb-7', 'rgb(255, 0, 0, 1)'), - ('rgba-1', 'rgba(255, 0, 0)'), - ('rgba-2', 'rgba(255.0, 0, 0, 1)'), - ('rgba-3', 'rgba(100%, 0, 0, 1)'), - ('rgba-4', 'rgba(255, 0, 0, 100%)'), - ('rgba-5', 'rgba(255, 0, 0, 1. 0)'), - ('rgba-6', 'rgba(255, 0, 0, 1.)'), - ('rgba-7', 'rgba(255, 0, 0, '), + ('rgb-1', 'rgb(255.0, 0, 0,)'), + ('rgb-2', 'rgb(100%, 0, 0)'), + ('rgb-3', 'rgb(255, - 1, 0)'), + ('rgba-1', 'rgba(100%, 0, 0, 1)'), + ('rgba-2', 'rgba(255, 0, 0, 1. 0)'), + ('rgba-3', 'rgba(255, 0, 0, 1.)'), + ('rgba-4', 'rgba(255, 0, 0, '), + ('rgba-5', 'rgba(255, 0, 0, 1,)'), ('hsl-1', 'hsl(0%, 100%, 50%)'), ('hsl-2', 'hsl(z, 100%, 50%)'), ('hsl-3', 'hsl(0, 0, 50%)'), ('hsl-4', 'hsl(0, 100%, 0)'), - ('hsl-5', 'hsl(0, 100%, 100%, 1)'), - ('hsl-6', 'hsl(0, 100.%, 50%)'), + ('hsl-5', 'hsl(0, 100.%, 50%)'), + ('hsl-6', 'hsl(0, 100%, 50%,)'), ('hsla-1', 'hsla(0%, 100%, 50%, 1)'), ('hsla-2', 'hsla(0, 0, 50%, 1)'), + ('hsla-3', 'hsla(0, 0, 50%, 1,)'), ('name-1', 'darkbrown'), ('name-2', 'firebrick1'), ('name-3', 'red blue'), ('name-4', '"red"'), ('name-5', '"red'), + # css-color-4 color function + # comma and comma-less expressions should not mix together. + ('css-color-4-rgb-1', 'rgb(255, 0, 0 / 1)'), + ('css-color-4-rgb-2', 'rgb(255 0 0, 1)'), + ('css-color-4-rgb-3', 'rgb(255, 0 0)'), + ('css-color-4-rgba-1', 'rgba(255, 0, 0 / 1)'), + ('css-color-4-rgba-2', 'rgba(255 0 0, 1)'), + ('css-color-4-rgba-3', 'rgba(255, 0 0)'), + ('css-color-4-hsl-1', 'hsl(0, 100%, 50% / 1)'), + ('css-color-4-hsl-2', 'hsl(0 100% 50%, 1)'), + ('css-color-4-hsl-3', 'hsl(0, 100% 50%)'), + ('css-color-4-hsla-1', 'hsla(0, 100%, 50% / 1)'), + ('css-color-4-hsla-2', 'hsla(0 100% 50%, 1)'), + ('css-color-4-hsla-3', 'hsla(0, 100% 50%)'), + # trailing slash + ('css-color-4-rgb-4', 'rgb(0 0 0 /)'), + ('css-color-4-rgb-5', 'rgb(0, 0, 0 /)'), + ('css-color-4-hsl-4', 'hsl(0 100% 50% /)'), + ('css-color-4-hsl-5', 'hsl(0, 100%, 50% /)'), ]: test = { 'name': '2d.fillStyle.parse.invalid.%s' % name, @@ -6197,6 +6265,18 @@ @assert pixel 90,45 == 0,255,0,255; expected: green +- name: 2d.path.lineTo.nonfinite.details + desc: lineTo() with Infinity/NaN for first arg still converts the second arg + testing: + - 2d.nonfinite + code: | + for (var arg1 of [Infinity, -Infinity, NaN]) { + var converted = false; + ctx.lineTo(arg1, { valueOf: function() { converted = true; return 0; } }); + @assert converted; + } + expected: clear + - name: 2d.path.quadraticCurveTo.ensuresubpath.1 desc: If there is no subpath, the first control point is added (and nothing is drawn up to it) testing: diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm new file mode 100644 index 00000000000..0d35218b9e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm @@ -0,0 +1,382 @@ + + + +IDBCursor.continuePrimaryKey() - Exception Orders + + + + + + + + +
                                                                                        diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex-rename-abort.html b/tests/wpt/web-platform-tests/IndexedDB/idbindex-rename-abort.html new file mode 100644 index 00000000000..f8dca52020e --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex-rename-abort.html @@ -0,0 +1,110 @@ + +IndexedDB: index renaming support in aborted transactions + + + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex-rename-errors.html b/tests/wpt/web-platform-tests/IndexedDB/idbindex-rename-errors.html new file mode 100644 index 00000000000..1f50f36c64f --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex-rename-errors.html @@ -0,0 +1,130 @@ + +IndexedDB: index renaming error handling + + + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex-rename.html b/tests/wpt/web-platform-tests/IndexedDB/idbindex-rename.html new file mode 100644 index 00000000000..2ef26d295e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex-rename.html @@ -0,0 +1,298 @@ + +IndexedDB: index renaming support + + + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-abort.html b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-abort.html new file mode 100644 index 00000000000..b59117a8084 --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-abort.html @@ -0,0 +1,120 @@ + +IndexedDB: object store renaming support in aborted transactions + + + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-errors.html b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-errors.html new file mode 100644 index 00000000000..8e603baeccd --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-errors.html @@ -0,0 +1,118 @@ + +IndexedDB: object store renaming error handling + + + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-store.html b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-store.html new file mode 100644 index 00000000000..47860b59014 --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-rename-store.html @@ -0,0 +1,366 @@ + +IndexedDB: object store renaming support + + + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/interfaces.html b/tests/wpt/web-platform-tests/IndexedDB/interfaces.html index cc4e7f20392..55e752f2630 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/interfaces.html +++ b/tests/wpt/web-platform-tests/IndexedDB/interfaces.html @@ -21,8 +21,8 @@ setup(function() { var idls = request.responseText; idlArray.add_untested_idls("[PrimaryGlobal] interface Window { };"); - idlArray.add_untested_idls("interface Event { };"); - idlArray.add_untested_idls("interface EventTarget { };"); + idlArray.add_untested_idls("[Exposed=(Window,Worker)] interface Event { };"); + idlArray.add_untested_idls("[Exposed=(Window,Worker)] interface EventTarget { };"); // From Indexed DB: idlArray.add_idls(idls); diff --git a/tests/wpt/web-platform-tests/IndexedDB/interfaces.idl b/tests/wpt/web-platform-tests/IndexedDB/interfaces.idl index 353864de259..de196bf2d3a 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/interfaces.idl +++ b/tests/wpt/web-platform-tests/IndexedDB/interfaces.idl @@ -9,6 +9,7 @@ enum IDBRequestReadyState { "done" }; +[Exposed=(Window,Worker)] interface IDBKeyRange { readonly attribute any lower; readonly attribute any upper; @@ -42,6 +43,7 @@ dictionary IDBVersionChangeEventInit : EventInit { unsigned long long? newVersion = null; }; +[Exposed=(Window,Worker)] interface IDBRequest : EventTarget { readonly attribute any result; readonly attribute DOMError error; @@ -52,12 +54,14 @@ interface IDBRequest : EventTarget { attribute EventHandler onerror; }; +[Exposed=(Window,Worker)] interface IDBOpenDBRequest : IDBRequest { attribute EventHandler onblocked; attribute EventHandler onupgradeneeded; }; -[Constructor(DOMString type, optional IDBVersionChangeEventInit eventInitDict)] +[Exposed=(Window,Worker), + Constructor(DOMString type, optional IDBVersionChangeEventInit eventInitDict)] interface IDBVersionChangeEvent : Event { readonly attribute unsigned long long oldVersion; readonly attribute unsigned long long? newVersion; @@ -68,12 +72,14 @@ interface IDBEnvironment { readonly attribute IDBFactory indexedDB; }; +[Exposed=(Window,Worker)] interface IDBFactory { IDBOpenDBRequest open (DOMString name, [EnforceRange] optional unsigned long long version); IDBOpenDBRequest deleteDatabase (DOMString name); short cmp (any first, any second); }; +[Exposed=(Window,Worker)] interface IDBDatabase : EventTarget { readonly attribute DOMString name; readonly attribute unsigned long long version; @@ -88,6 +94,7 @@ interface IDBDatabase : EventTarget { attribute EventHandler onversionchange; }; +[Exposed=(Window,Worker)] interface IDBObjectStore { attribute DOMString name; readonly attribute any keyPath; @@ -106,6 +113,7 @@ interface IDBObjectStore { IDBRequest count (optional any key); }; +[Exposed=(Window,Worker)] interface IDBIndex { attribute DOMString name; readonly attribute IDBObjectStore objectStore; @@ -119,6 +127,7 @@ interface IDBIndex { IDBRequest count (optional any key); }; +[Exposed=(Window,Worker)] interface IDBCursor { readonly attribute (IDBObjectStore or IDBIndex) source; readonly attribute IDBCursorDirection direction; @@ -130,10 +139,12 @@ interface IDBCursor { IDBRequest delete (); }; +[Exposed=(Window,Worker)] interface IDBCursorWithValue : IDBCursor { readonly attribute any value; }; +[Exposed=(Window,Worker)] interface IDBTransaction : EventTarget { readonly attribute IDBTransactionMode mode; readonly attribute IDBDatabase db; diff --git a/tests/wpt/web-platform-tests/IndexedDB/interfaces.worker.js b/tests/wpt/web-platform-tests/IndexedDB/interfaces.worker.js index 161acca34da..87e33805087 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/interfaces.worker.js +++ b/tests/wpt/web-platform-tests/IndexedDB/interfaces.worker.js @@ -10,9 +10,9 @@ request.onload = function() { var idlArray = new IdlArray(); var idls = request.responseText; - idlArray.add_untested_idls("interface WorkerGlobalScope {};"); - idlArray.add_untested_idls("interface Event { };"); - idlArray.add_untested_idls("interface EventTarget { };"); + idlArray.add_untested_idls("[Exposed=Worker] interface WorkerGlobalScope {};"); + idlArray.add_untested_idls("[Exposed=(Window,Worker)] interface Event { };"); + idlArray.add_untested_idls("[Exposed=(Window,Worker)] interface EventTarget { };"); // From Indexed DB: idlArray.add_idls("WorkerGlobalScope implements IDBEnvironment;"); diff --git a/tests/wpt/web-platform-tests/IndexedDB/support-promises.js b/tests/wpt/web-platform-tests/IndexedDB/support-promises.js new file mode 100644 index 00000000000..c24a9fb92bd --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/support-promises.js @@ -0,0 +1,200 @@ +// Returns an IndexedDB database name likely to be unique to the test case. +const databaseName = (testCase) => { + return 'db' + self.location.pathname + '-' + testCase.name; +}; + +// Creates an EventWatcher covering all the events that can be issued by +// IndexedDB requests and transactions. +const requestWatcher = (testCase, request) => { + return new EventWatcher(testCase, request, + ['error', 'success', 'upgradeneeded']); +}; + +// Migrates an IndexedDB database whose name is unique for the test case. +// +// newVersion must be greater than the database's current version. +// +// migrationCallback will be called during a versionchange transaction and will +// be given the created database and the versionchange transaction. +// +// Returns a promise. If the versionchange transaction goes through, the promise +// resolves to an IndexedDB database that must be closed by the caller. If the +// versionchange transaction is aborted, the promise resolves to an error. +const migrateDatabase = (testCase, newVersion, migrationCallback) => { + // We cannot use eventWatcher.wait_for('upgradeneeded') here, because + // the versionchange transaction auto-commits before the Promise's then + // callback gets called. + return new Promise((resolve, reject) => { + const request = indexedDB.open(databaseName(testCase), newVersion); + request.onupgradeneeded = testCase.step_func(event => { + const database = event.target.result; + const transaction = event.target.transaction; + let abortCalled = false; + + // We wrap IDBTransaction.abort so we can set up the correct event + // listeners and expectations if the test chooses to abort the + // versionchange transaction. + const transactionAbort = transaction.abort.bind(transaction); + transaction.abort = () => { + request.onerror = event => { + event.preventDefault(); + resolve(event); + }; + request.onsuccess = () => reject(new Error( + 'indexedDB.open should not succeed after the ' + + 'versionchange transaction is aborted')); + transactionAbort(); + abortCalled = true; + } + + migrationCallback(database, transaction); + if (!abortCalled) { + request.onsuccess = null; + resolve(requestWatcher(testCase, request).wait_for('success')); + } + }); + request.onerror = event => reject(event.target.error); + request.onsuccess = () => reject(new Error( + 'indexedDB.open should not succeed without creating a ' + + 'versionchange transaction')); + }).then(event => event.target.result || event.target.error); +}; + +// Creates an IndexedDB database whose name is unique for the test case. +// +// setupCallback will be called during a versionchange transaction, and will be +// given the created database and the versionchange transaction. +// +// Returns a promise that resolves to an IndexedDB database. The caller must +// close the database. +const createDatabase = (testCase, setupCallback) => { + const request = indexedDB.deleteDatabase(databaseName(testCase)); + const eventWatcher = requestWatcher(testCase, request); + + return eventWatcher.wait_for('success').then(event => + migrateDatabase(testCase, 1, setupCallback)); +}; + +// Opens an IndexedDB database without performing schema changes. +// +// The given version number must match the database's current version. +// +// Returns a promise that resolves to an IndexedDB database. The caller must +// close the database. +const openDatabase = (testCase, version) => { + const request = indexedDB.open(databaseName(testCase), version); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for('success').then( + event => event.target.result); +} + +// The data in the 'books' object store records in the first example of the +// IndexedDB specification. +const BOOKS_RECORD_DATA = [ + { title: 'Quarry Memories', author: 'Fred', isbn: 123456 }, + { title: 'Water Buffaloes', author: 'Fred', isbn: 234567 }, + { title: 'Bedrock Nights', author: 'Barney', isbn: 345678 }, +]; + +// Creates a 'books' object store whose contents closely resembles the first +// example in the IndexedDB specification. +const createBooksStore = (testCase, database) => { + const store = database.createObjectStore('books', + { keyPath: 'isbn', autoIncrement: true }); + store.createIndex('by_author', 'author'); + store.createIndex('by_title', 'title', { unique: true }); + for (let record of BOOKS_RECORD_DATA) + store.put(record); + return store; +}; + +// Creates a 'not_books' object store used to test renaming into existing or +// deleted store names. +const createNotBooksStore = (testCase, database) => { + const store = database.createObjectStore('not_books'); + store.createIndex('not_by_author', 'author'); + store.createIndex('not_by_title', 'title', { unique: true }); + return store; +}; + +// Verifies that an object store's indexes match the indexes used to create the +// books store in the test database's version 1. +// +// The errorMessage is used if the assertions fail. It can state that the +// IndexedDB implementation being tested is incorrect, or that the testing code +// is using it incorrectly. +const checkStoreIndexes = (testCase, store, errorMessage) => { + assert_array_equals( + store.indexNames, ['by_author', 'by_title'], errorMessage); + const authorIndex = store.index('by_author'); + const titleIndex = store.index('by_title'); + return Promise.all([ + checkAuthorIndexContents(testCase, authorIndex, errorMessage), + checkTitleIndexContents(testCase, titleIndex, errorMessage), + ]); +}; + +// Verifies that an object store's key generator is in the same state as the +// key generator created for the books store in the test database's version 1. +// +// The errorMessage is used if the assertions fail. It can state that the +// IndexedDB implementation being tested is incorrect, or that the testing code +// is using it incorrectly. +const checkStoreGenerator = (testCase, store, expectedKey, errorMessage) => { + const request = store.put( + { title: 'Bedrock Nights ' + expectedKey, author: 'Barney' }); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for('success').then(() => { + const result = request.result; + assert_equals(result, expectedKey, errorMessage); + }); +}; + +// Verifies that an object store's contents matches the contents used to create +// the books store in the test database's version 1. +// +// The errorMessage is used if the assertions fail. It can state that the +// IndexedDB implementation being tested is incorrect, or that the testing code +// is using it incorrectly. +const checkStoreContents = (testCase, store, errorMessage) => { + const request = store.get(123456); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for('success').then(() => { + const result = request.result; + assert_equals(result.isbn, BOOKS_RECORD_DATA[0].isbn, errorMessage); + assert_equals(result.author, BOOKS_RECORD_DATA[0].author, errorMessage); + assert_equals(result.title, BOOKS_RECORD_DATA[0].title, errorMessage); + }); +}; + +// Verifies that index matches the 'by_author' index used to create the +// by_author books store in the test database's version 1. +// +// The errorMessage is used if the assertions fail. It can state that the +// IndexedDB implementation being tested is incorrect, or that the testing code +// is using it incorrectly. +const checkAuthorIndexContents = (testCase, index, errorMessage) => { + const request = index.get(BOOKS_RECORD_DATA[2].author); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for('success').then(() => { + const result = request.result; + assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage); + assert_equals(result.title, BOOKS_RECORD_DATA[2].title, errorMessage); + }); +}; + +// Verifies that an index matches the 'by_title' index used to create the books +// store in the test database's version 1. +// +// The errorMessage is used if the assertions fail. It can state that the +// IndexedDB implementation being tested is incorrect, or that the testing code +// is using it incorrectly. +const checkTitleIndexContents = (testCase, index, errorMessage) => { + const request = index.get(BOOKS_RECORD_DATA[2].title); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for('success').then(() => { + const result = request.result; + assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage); + assert_equals(result.author, BOOKS_RECORD_DATA[2].author, errorMessage); + }); +}; diff --git a/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-generator-revert.html b/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-generator-revert.html new file mode 100644 index 00000000000..770d623f7b4 --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-generator-revert.html @@ -0,0 +1,108 @@ + +IndexedDB: aborting transactions reverts an object store's key generator state + + + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-index-metadata-revert.html b/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-index-metadata-revert.html new file mode 100644 index 00000000000..88ea28e22fa --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-index-metadata-revert.html @@ -0,0 +1,276 @@ + +IndexedDB: aborting transactions reverts index metadata + + + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-multiple-metadata-revert.html b/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-multiple-metadata-revert.html new file mode 100644 index 00000000000..4a00d4113ad --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-multiple-metadata-revert.html @@ -0,0 +1,291 @@ + +IndexedDB: aborting transactions reverts multiple operations on the same metadata + + + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-object-store-metadata-revert.html b/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-object-store-metadata-revert.html new file mode 100644 index 00000000000..1a109d06928 --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/transaction-abort-object-store-metadata-revert.html @@ -0,0 +1,233 @@ + +IndexedDB: aborting transactions reverts object store metadata + + + + + + diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.js b/tests/wpt/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.js index 7a36f366660..5d1c5486f3d 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.js @@ -1,3 +1,4 @@ +// timeout=long importScripts("/resources/testharness.js"); importScripts("wrapKey_unwrapKey.js"); diff --git a/tests/wpt/web-platform-tests/WebIDL/current-realm.html b/tests/wpt/web-platform-tests/WebIDL/current-realm.html new file mode 100644 index 00000000000..fd24709b3be --- /dev/null +++ b/tests/wpt/web-platform-tests/WebIDL/current-realm.html @@ -0,0 +1,145 @@ + + + +Current Realm + + +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-after-send.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-after-send.htm index c4885c9911b..523a0d616b6 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-after-send.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-after-send.htm @@ -4,6 +4,7 @@ XMLHttpRequest: abort() after send() + @@ -19,36 +20,26 @@ var test = async_test() test.step(function() { var client = new XMLHttpRequest(), - control_flag = false, - result = [], - expected = [1, 4, 'progress', 'abort', 'loadend'] // open() -> 1, abort() -> 4 - client.onreadystatechange = function() { - test.step(function() { - result.push(client.readyState) - if(client.readyState == 4) { - control_flag = true - assert_equals(client.responseXML, null) - assert_equals(client.responseText, "") - assert_equals(client.status, 0) - assert_equals(client.statusText, "") - assert_equals(client.getAllResponseHeaders(), "") - assert_equals(client.getResponseHeader('Content-Type'), null) - } - }) - } + control_flag = false; + prepare_xhr_for_event_order_test(client); + client.addEventListener("readystatechange", test.step_func(function() { + if(client.readyState == 4) { + control_flag = true + assert_equals(client.responseXML, null) + assert_equals(client.responseText, "") + assert_equals(client.status, 0) + assert_equals(client.statusText, "") + assert_equals(client.getAllResponseHeaders(), "") + assert_equals(client.getResponseHeader('Content-Type'), null) + } + })) client.open("GET", "resources/well-formed.xml", true) client.send(null) - client.addEventListener('progress', logEvt) - client.addEventListener('abort', logEvt) - client.addEventListener('loadend', logEvt) client.abort() assert_true(control_flag) assert_equals(client.readyState, 0) - assert_array_equals(result, expected) + assert_xhr_event_order_matches([1, "loadstart(0,0,false)", 4, "abort(0,0,false)", "loadend(0,0,false)"]) test.done() - function logEvt (e) { - result.push(e.type) - } }) diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-open.js b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-open.js index 4ddb84fe8b7..381a0bff81e 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-open.js +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-open.js @@ -7,8 +7,8 @@ test.step(function() { assert_unreached() }) } + assert_equals(client.readyState, 1, "before abort()") client.abort() - assert_equals(client.readyState, 0) - assert_throws("InvalidStateError", function() { client.send("test") }, "calling send() after abort()") + assert_equals(client.readyState, 1, "after abort()") }) test.done() diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-upload.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-upload.htm index 766dcc4693d..9fbc8b9bbb4 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-upload.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-upload.htm @@ -18,7 +18,7 @@ client.open("POST", "resources/delay.py?ms=1000") client.addEventListener("loadend", function(e) { test.step(function() { - assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,9999,true)", 4, "upload.progress(0,0,false)", "upload.abort(0,0,false)", "upload.loadend(0,0,false)", "progress(0,0,false)", "abort(0,0,false)", "loadend(0,0,false)"]); + assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,9999,true)", 4, "upload.abort(0,0,false)", "upload.loadend(0,0,false)", "abort(0,0,false)", "loadend(0,0,false)"]); test.done() }) }); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-event-abort.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-event-abort.htm index 2382241cad3..eb2b2b743e6 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-event-abort.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-event-abort.htm @@ -4,7 +4,7 @@ - XMLHttpRequest: The abort() method: do not fire abort event in OPENED state when send() flag is unset. send() throws after abort(). + XMLHttpRequest: The abort() method: do not fire abort event in OPENED state when send() flag is unset. @@ -24,6 +24,7 @@ if (xhr.readyState == 1) { xhr.abort(); + assert_equals(xhr.readyState, 1, "abort() cannot change readyState when readyState is 1 and send() flag is unset") } }); }; @@ -37,7 +38,7 @@ }; xhr.open("GET", "./resources/content.py", true); // This should cause a readystatechange event that calls abort() - assert_throws("InvalidStateError", function(){ xhr.send() }) + xhr.send() // should not throw since abort() was a no-op test.done() }); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-event-order.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-event-order.htm index cb405a71acc..f05c20628c4 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-event-order.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-event-order.htm @@ -37,7 +37,7 @@ { test.step(function() { - assert_xhr_event_order_matches([1, "loadstart(0,0,false)", 4, "upload.progress(0,0,false)", "upload.abort(0,0,false)", "upload.loadend(0,0,false)", "progress(0,0,false)", "abort(0,0,false)", "loadend(0,0,false)"]); + assert_xhr_event_order_matches([1, "loadstart(0,0,false)", 4, "upload.abort(0,0,false)", "upload.loadend(0,0,false)", "abort(0,0,false)", "loadend(0,0,false)"]); assert_equals(xhr.readyState, 0, 'state should be UNSENT'); test.done(); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/event-timeout-order.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/event-timeout-order.htm index 1d9ba31d6e0..7376ca2f8b1 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/event-timeout-order.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/event-timeout-order.htm @@ -20,7 +20,7 @@ prepare_xhr_for_event_order_test(xhr); xhr.addEventListener("loadend", function() { test.step(function() { - assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,12,true)", 4, "upload.progress(0,0,false)", "upload.timeout(0,0,false)", "upload.loadend(0,0,false)", "progress(0,0,false)", "timeout(0,0,false)", "loadend(0,0,false)"]); + assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,12,true)", 4, "upload.timeout(0,0,false)", "upload.loadend(0,0,false)", "timeout(0,0,false)", "loadend(0,0,false)"]); test.done(); }); }); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.sub.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.htm similarity index 100% rename from tests/wpt/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.sub.htm rename to tests/wpt/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.htm diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/open-during-abort.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/open-during-abort.htm index 1d01415d55b..d03ca7afa63 100755 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/open-during-abort.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/open-during-abort.htm @@ -26,6 +26,7 @@ abort_flag = true client.abort() assert_array_equals(result, expected) + assert_equals(client.readyState, 1) // abort() should only set state to UNSENT when DONE }) diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip.htm index dc166a2396a..058064636d4 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip.htm @@ -36,17 +36,20 @@ * If lengthComputable is true: * Event.total must match Content-length header - * event.loaded should be a smaller number while resource is loading - and match Content-length when loading is finished - * Setting event.loaded to equal event.total for each progress event if the - resource is not fully downloaded would be cheating + * event.loaded must only ever increase in progress events + (and may never repeat its value). + * event.loaded must never exceed the Content-length. * If lengthComputable is false: * event.total should be 0 + * event.loaded must only ever increase in progress events + (and may never repeat its value). * event.loaded should be the length of the decompressed content, i.e. bigger than Content-length header value when finished loading */ + var lastTotal; + var lastLoaded = -1; client.addEventListener('loadend', test.step_func(function(e){ var len = parseInt(client.getResponseHeader('content-length'), 10) if(e.lengthComputable){ @@ -59,14 +62,17 @@ test.done(); }), false) client.addEventListener('progress', test.step_func(function(e){ - if(e.lengthComputable && e.total && e.loaded && e.target.readyState < 4){ - assert_not_equals(e.total, e.loaded, 'total should not equal loaded while download/decode is incomplete') - // We should only do this assertation once - // it's theoretically possible that all the data would get in - // and a progress event fire before the readyState switches from 3 to 4 - - // in this case we might report bogus and random failures. Better to remove the event listener again.. - client.removeEventListener('progress', arguments.callee, false); + if(lastTotal === undefined){ + lastTotal = e.total; } + if(e.lengthComputable && e.total && e.loaded){ + assert_equals(e.total, lastTotal, 'event.total should remain invariant') + assert_less_than_equal(e.loaded, lastTotal, 'event.loaded should not exceed content-length') + }else{ + assert_equals(e.total, 0, 'event.total should be 0') + } + assert_greater_than(e.loaded, lastLoaded, 'event.loaded should only ever increase') + lastLoaded = e.loaded; }), false) // image.gif is 165375 bytes compressed. Sending 45000 bytes at a time with 1 second delay will load it in 4 seconds client.open("GET", "resources/image.gif?pipe=gzip|trickle(45000:d1:r2)", true) diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-1.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-1.htm new file mode 100644 index 00000000000..4e4c3faff90 --- /dev/null +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-1.htm @@ -0,0 +1,23 @@ + + + + XMLHttpRequest: send() with document.domain set: loading documents from original origin after setting document.domain + + + + + + + diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-2.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-2.htm new file mode 100644 index 00000000000..073268c21c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-2.htm @@ -0,0 +1,20 @@ + + + + XMLHttpRequest: send() with document.domain set: loading documents from the origin document.domain was set to should throw + + + + + + + diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-helper.js b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-helper.js new file mode 100644 index 00000000000..f5c762b042b --- /dev/null +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-helper.js @@ -0,0 +1,29 @@ +function assert_equals(value, expected) { + if (value != expected) { + throw "Got wrong value.\nExpected '" + expected + "',\ngot '" + value + "'"; + } +} + +function assert_throws(expected_exc, func) { + try { + func.call(this); + } catch(e) { + var actual = e.name || e.type; + if (actual != expected_exc) { + throw "Got wrong exception.\nExpected '" + expected_exc + "',\ngot '" + actual + "'."; + } + return; + } + throw "Expected exception, but none was thrown"; +} + +function run_test(test, name) { + var result = {passed: true, message: null, name: name}; + try { + test(); + } catch(e) { + result.passed = false; + result.message = e + ""; + } + opener.postMessage(result, "*"); +} diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js index 820f9ee2214..77fc0e784ef 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js @@ -21,13 +21,60 @@ } } + function getNextEvent(arr) { + var eventStr = arr.shift(); + + // we can only handle strings, numbers (readystates) and undefined + if (eventStr === undefined) { + return event; + } + if (typeof eventStr !== "string") { + if (Number.isInteger(eventStr)) { + eventStr = "readystatechange(" + eventStr + ")"; + } else { + throw "Test error: unexpected event type " + eventStr; + } + } + + // parse out the general type, loaded and total values + var type = eventStr.type = eventStr.split("(")[0].split(".").pop(); + eventStr.mayFollowOptionalProgressEvents = type == "progress" || + type == "load" || type == "abort" || type == "error"; + var loadedAndTotal = eventStr.match(/\((\d)+,(\d)+/); + if (loadedAndTotal) { + eventStr.loaded = parseInt(loadedAndTotal[0]); + eventStr.total = parseInt(loadedAndTotal[1]); + } + + return eventStr; + } + global.assert_xhr_event_order_matches = function(expected) { - try { - assert_array_equals(recorded_xhr_events, expected); - } catch(e) { - e.message += "\nRecorded events were:" + recorded_xhr_events.join(", "); - e.message += "\nExpected events were:" + expected.join(", "); - throw e; + var recorded = recorded_xhr_events; + var lastRecordedLoaded = -1; + + while(expected.length && recorded.length) { + var currentExpected = getNextEvent(expected), + currentRecorded = getNextEvent(recorded); + + // skip to the last progress event if we've hit one + while (recorded.length && currentRecorded.type == "progress") { + assert_greater(currentRecorded.loaded, lastRecordedLoaded, + "progress event 'loaded' values must only increase"); + lastRecordedLoaded = currentRecorded.loaded; + currentRecorded = getNextEvent(recorded); + } + if (currentRecorded.type == "loadstart") { + lastRecordedLoaded = -1; + } + + assert_equals(currentRecorded, currentExpected); + } + if (recorded.length) { + throw "\nUnexpected extra events: " + recorded.join(", "); + } + if (expected.length) { + throw "\nExpected more events: " + expected.join(", "); } } }(this)); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/responsexml-basic.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/responsexml-basic.htm index cc4b8dc4838..a3ce7b5b544 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/responsexml-basic.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/responsexml-basic.htm @@ -19,7 +19,7 @@ assert_equals(client.responseXML.documentElement.localName, "html", 'localName is html') assert_equals(client.responseXML.documentElement.childNodes.length, 5, 'childNodes is 5') assert_equals(client.responseXML.getElementById("n1").localName, client.responseXML.documentElement.childNodes[1].localName) - assert_equals(client.responseXML.getElementById("n2"), client.responseXML.documentElement.childrenNodes[3], 'getElementById("n2")') + assert_equals(client.responseXML.getElementById("n2"), client.responseXML.documentElement.childNodes[3], 'getElementById("n2")') assert_equals(client.responseXML.getElementsByTagName("p")[1].namespaceURI, "namespacesarejuststrings", 'namespaceURI') }) test(function() { diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm index c12f21b260b..18e3fb2f2b7 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm @@ -10,7 +10,7 @@
                                                                                        -
                                                                                        diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type.html b/tests/wpt/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type.html index 98fef659238..e7ab989fdc6 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type.html +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type.html @@ -20,17 +20,19 @@ ["invalid mime type", new Blob(["data"], {type: "Invalid \r\n mime \r\n type"})] ]; - blobTests.forEach(function(item){ + function doSyncTest(testItem, method) { test(function() { var xhr = new XMLHttpRequest(); - xhr.open("POST", "./resources/content.py", false); - xhr.send(item[1]); + xhr.open(method, "./resources/content.py", false); + xhr.send(testItem[1]); assert_equals(xhr.getResponseHeader("X-Request-Content-Length"), "4"); assert_equals(xhr.getResponseHeader("X-Request-Content-Type"), "NO"); - }, "Synchronous blob loading with " + item[0]); + }, "Synchronous blob loading with " + testItem[0] + " [" + method + "]"); + } - var atest = async_test("Asynchronous blob loading with " + item[0]); + function doAsyncTest(testItem, method) { + var atest = async_test("Asynchronous blob loading with " + testItem[0] + " [" + method + "]"); atest.step(function() { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { @@ -42,9 +44,17 @@ atest.done(); } } - xhr.open("POST", "./resources/content.py", true); - xhr.send(item[1]); + xhr.open(method, "./resources/content.py", true); + xhr.send(testItem[1]); }); + } + + blobTests.forEach(function(item){ + doSyncTest(item, "POST"); + doAsyncTest(item, "POST"); + + doSyncTest(item, "PUT"); + doAsyncTest(item, "PUT"); }); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring.htm index 357a9cff9d9..b8a3b4ae690 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring.htm @@ -17,9 +17,8 @@ client.abort(); }} client.open('POST', 'resources/content.py') - assert_throws("InvalidStateError", function(){ - client.send(objAbortsOnStringification) - }) + client.send(objAbortsOnStringification) + assert_equals(client.readyState, 1) test1.done() }); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/send-non-same-origin.htm similarity index 100% rename from tests/wpt/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub.htm rename to tests/wpt/web-platform-tests/XMLHttpRequest/send-non-same-origin.htm diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/send-response-event-order.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/send-response-event-order.htm index 64dfaa670f8..041cb23c6ea 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/send-response-event-order.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/send-response-event-order.htm @@ -12,6 +12,7 @@ + XMLHttpRequest: The send() method: event order when synchronous flag is unset @@ -24,38 +25,12 @@ test.step(function() { var xhr = new XMLHttpRequest(); - var expect = ["loadstart", "upload.loadstart", "upload.progress", "upload.load", "upload.loadend", "progress", 4, "load", "loadend"]; - var actual = []; + prepare_xhr_for_event_order_test(xhr); - xhr.onreadystatechange = function() - { - test.step(function() - { - if (xhr.readyState == 4) - { - actual.push(xhr.readyState); - } - }); - }; - - xhr.onloadstart = function(e){ actual.push(e.type); }; - xhr.onload = function(e){ actual.push(e.type); }; - xhr.onloadend = function(e){ actual.push(e.type); VerifyResult()}; - xhr.onprogress = function(e){ actual.push(e.type);}; - - xhr.upload.onloadstart = function(e){ actual.push("upload." + e.type); }; - xhr.upload.onload = function(e){ actual.push("upload." + e.type); }; - xhr.upload.onloadend = function(e){ actual.push("upload." + e.type);}; - xhr.upload.onprogress = function(e){ actual.push("upload." + e.type);}; - - function VerifyResult() - { - test.step(function() - { - assert_array_equals(actual, expect); - test.done(); - }); - }; + xhr.addEventListener("loadend", test.step_func(function() { + assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,12,true)", "upload.progress(12,12,true)", "upload.load(12,12,true)", "upload.loadend(12,12,true)", 2, 3, "progress(12,12,true)", 4, "load(12,12,true)", "loadend(12,12,true)"]); + test.done(); + })); xhr.open("POST", "./resources/content.py", true); xhr.send("Test Message"); diff --git a/tests/wpt/web-platform-tests/annotation-model/CONTRIBUTING.md b/tests/wpt/web-platform-tests/annotation-model/CONTRIBUTING.md index b71eaa5a9d9..f591d2a9702 100644 --- a/tests/wpt/web-platform-tests/annotation-model/CONTRIBUTING.md +++ b/tests/wpt/web-platform-tests/annotation-model/CONTRIBUTING.md @@ -53,6 +53,7 @@ Context](JSONtest-v1.jsonld). That context defines the following terms: |description | string | A long self-describing paragraph that explains the purpose of the test and the expected input |ref | URI | An optional reference to the portion of the specification to which the test relates |testType | `automated`, `manual`, `ref` | The type of test - this informs [WPT](https://github.com/w3c/web-platform-tests) how the test should be controlled and presented +|skipFailures | list of strings | An optional list of assertionType values that, if present, should have their test skipped if the result would be "unexpected". Defaults to the empty list. |assertions | list of URI, List @@@ATRISK@@@, or AssertionObject | The ordered collection of tests the input should be run against. See [JSON Schema Usage](#jsonSchema) for the structure of the objects. URI is relative to the top level folder of the test collection if it has a slash; relative to the current directory if it does not. @@@@ATRISK@@@@ Lists can be nested to define groups of sub-tests. Assertions / groups can be conditionally skipped. See [Assertion Lists](#assertionLists) for more details. |content | URI or object | An object containing content to be checked against the referenced assertions, or a URI from which to retrieve that content @@ -71,9 +72,10 @@ Each test case has a suffix of `.test` and a shape like: { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Verify annotation has target", - "type": "object", + "assertionType": "must", "expectedResult": "valid", "errorMessage": "The object was missing a required 'target' property", + "type": "object", "properties": { "target": { "anyOf": [ diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationMusts-manual.html b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationMusts-manual.html index d2435ed0991..adfcca89da8 100644 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationMusts-manual.html +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationMusts-manual.html @@ -12,12 +12,13 @@ setup({explicit_timeout: true, explicit_done: true }); var theDefinitions=[ - "definitions/specificResource.json", "definitions/choiceSet.json", + "definitions/id.json", "definitions/bodyTarget.json", "definitions/annotations.json", + "definitions/specificResource.json", "definitions/otherProperties.json", - "definitions/id.json" + "definitions/collections.json" ]; var theTestFile="annotationMusts.test"; diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationOptionals-manual.html b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationOptionals-manual.html index 2b9f4e74511..65be15a582c 100644 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationOptionals-manual.html +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationOptionals-manual.html @@ -12,12 +12,13 @@ setup({explicit_timeout: true, explicit_done: true }); var theDefinitions=[ - "definitions/specificResource.json", "definitions/choiceSet.json", + "definitions/id.json", "definitions/bodyTarget.json", "definitions/annotations.json", + "definitions/specificResource.json", "definitions/otherProperties.json", - "definitions/id.json" + "definitions/collections.json" ]; var theTestFile="annotationOptionals.test"; diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationOptionals.test b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationOptionals.test index 955ac39d41d..16def6b4474 100644 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationOptionals.test +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationOptionals.test @@ -3,6 +3,7 @@ "name": "Annotation implements optional keys and meets optional key value constraints", "description": "Web Annotations:
                                                                                        • Should include certain properties (keys)
                                                                                        • May include additional keys
                                                                                        • should have Annotation key values that conform to model recommended constraints
                                                                                        Note: failing an assertion indicates that a recommended or optional feature has not been implemented or has not been implemented correctly.", "testType": "manual", + "skipFailures": [ "should", "may" ], "ref": "https://www.w3.org/TR/annotation-model/#other-properties", "assertions": [ "annotations/3.3.1-annotationSingleCreatorImplemented.json", diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals-manual.html b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals-manual.html index bb1590624cf..b187008dade 100644 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals-manual.html +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals-manual.html @@ -12,12 +12,13 @@ setup({explicit_timeout: true, explicit_done: true }); var theDefinitions=[ - "definitions/specificResource.json", "definitions/choiceSet.json", + "definitions/id.json", "definitions/bodyTarget.json", "definitions/annotations.json", + "definitions/specificResource.json", "definitions/otherProperties.json", - "definitions/id.json" + "definitions/collections.json" ]; var theTestFile="annotationsAgentOptionals.test"; diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals.test b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals.test index c5eb8713a6a..3b6616eed80 100644 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals.test +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals.test @@ -3,6 +3,7 @@ "name": "Annotation implements optional keys and meets optional key value constraints for Creator and Generator Agents", "description": "Agents (Creators, Generators) involved in an Annotation:
                                                                                        • Should include certain properties (keys)
                                                                                        • May include additional keys
                                                                                        • should have Agent key values that conform to model recommended constraints
                                                                                        Note: failing an assertion indicates that a recommended or optional feature has not been implemented or has not been implemented correctly.", "testType": "manual", + "skipFailures": [ "should", "may" ], "ref": "https://www.w3.org/TR/annotation-model/#other-properties", "assertions": [ diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-targNoTypeTextualBody.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-targNoTypeTextualBody.json index 03c6ab210c7..8e875951b9e 100644 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-targNoTypeTextualBody.json +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-targNoTypeTextualBody.json @@ -13,15 +13,15 @@ "target": { "allOf": [ - { "not": { "$ref": "bodyTarget.json#/definitions/embeddedTextTypeIncludesTextualBody" } }, - { "not": { "$ref": "bodyTarget.json#/definitions/itemEmbeddedTextTypeIncludesTextualBody" } }, + { "not": { "$ref": "bodyTarget.json#/definitions/embeddedTextTypeInclTextualBodyWithoutId" } }, + { "not": { "$ref": "bodyTarget.json#/definitions/itemEmbeddedTextTypeInclTextualBodyWithoutId" } }, { "items": { "not": { "anyOf": [ - { "$ref": "bodyTarget.json#/definitions/embeddedTextTypeIncludesTextualBody" }, - { "$ref": "bodyTarget.json#/definitions/itemEmbeddedTextTypeIncludesTextualBody" } + { "$ref": "bodyTarget.json#/definitions/embeddedTextTypeInclTextualBodyWithoutId" }, + { "$ref": "bodyTarget.json#/definitions/itemEmbeddedTextTypeInclTextualBodyWithoutId" } ] } } diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatedImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatedImplemented.json new file mode 100644 index 00000000000..d57ecd1efef --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatedImplemented.json @@ -0,0 +1,17 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-collectionCreatedImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Valid Annotation Collection-level created key not found. Annotation Collection may have exactly one created key value.", + "title": "Implements Annotation Collection-level **_created_ key** which has a **single value** that is a **string of format date-time** - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when the Annotation Collection implements exactly one created key value (Sections 3.3.1 and 5.1)", + "allOf": + [ + { "$ref": "otherProperties.json#/definitions/createdValidIfPresent"}, + { "type": "object", + "required" : [ "created" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatedValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatedValidated.json new file mode 100644 index 00000000000..09ff1aa9d08 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatedValidated.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-collectionCreatedValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Collection has multiple created key values or a single created key value that is not of format date-time.", + "title": "If present the Annotation Collection-level **_created_ key** has a **single value** that is of **format date-time** - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when no Annotation Collection created key present or when created key has a single value that is of format date-time (Section 3.3.1)", + "type": "object", + "allOf": [ + { "$ref": "otherProperties.json#/definitions/createdValidIfPresent" } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatorImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatorImplemented.json new file mode 100644 index 00000000000..1bd4d144255 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionCreatorImplemented.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-collectionCreatorImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Collection creator key not found. Annotation Collection may have zero or more creators.", + "title": "Implements **Annotation Collection _creator_ key** which has one or more values, each of which is a **string of format uri** or an **object** - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when the Annotation Collection implements creator key (Section 3.3.1)", + "allOf": + [ + { "$ref": "otherProperties.json#/definitions/creatorValidIfPresent"}, + { "type": "object", + "required": [ "creator" ] } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionModifiedImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionModifiedImplemented.json new file mode 100644 index 00000000000..8deba356bd5 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionModifiedImplemented.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-collectionModifiedImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Valid Annotation Collection-level modified key not found. Annotation Collection may have zero or exactly one modified key value.", + "title": "Implements Annotation Collection-level **_modified_ key** which has a **single value** that is a **string of format date-time** - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when the Annotation Collection implements exactly one modified key value (Section 3.3.1, 5.1)", + "allOf": + [ + { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent"}, + { "type": "object", + "required": [ "modified" ] } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionModifiedValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionModifiedValidated.json new file mode 100644 index 00000000000..65a571e84ee --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.1-collectionModifiedValidated.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-collectionModifiedValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Collection has multiple modified key values or a single modified key value that is not of format date-time.", + "title": "If present the Annotation Collection-level **_modified_ key** has a **single value** that is of **format date-time** - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when no Annotation Collection modified key present or when modified key has a single value that is of format date-time (Section 3.3.1)", + "type": "object", + "allOf": [ + { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent" } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentEmailImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentEmailImplemented.json new file mode 100644 index 00000000000..34b5c560b98 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentEmailImplemented.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-collectionCreatorAgentEmailImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Email for Annotation Collection Creator (Agent) not found. Agents may have one or more email values.", + "title": "Implements Annotation Collection-level creator (Agent) **_email_ key** with one or more values, each of which is a **mailto: uri** - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when one or more email values for Annotation Collection Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentEmailFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentEmailFound" } } } + } + ] + } + }, + "required": ["creator"] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentEmail_sha1Implemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentEmail_sha1Implemented.json new file mode 100644 index 00000000000..6e8ef750755 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentEmail_sha1Implemented.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-collectionCreatorAgentEmail_sha1Implemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Email_sha1 for Annotation Collection Creator (Agent) not found. Agents may have one or more email_sha1 values.", + "title": "Implements Annotation Collection-level creator (Agent) **email_sha1 key** with one or more values - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when one or more email_sha1 values for Annotation Collection Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentEmail_sha1Found" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentEmail_sha1Found" } } } + } + ] + } + }, + "required": ["creator"] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentHomepageImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentHomepageImplemented.json new file mode 100644 index 00000000000..c3ed8d3b0c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentHomepageImplemented.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-collectionCreatorAgentHomepageImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Homepage for Annotation Collection Creator (Agent) not found. Agents may have one or more homepage values.", + "title": "Implements Annotation Collection-level creator (Agent) **_homepage_ key** with one or more values, each of which is a **string of format uri** - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when one or more homepage values for Annotation Collection Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentHomepageFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentHomepageFound" } } } + } + ] + } + }, + "required": ["creator"] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentIdImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentIdImplemented.json new file mode 100644 index 00000000000..3f7241d0553 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentIdImplemented.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-collectionCreatorAgentIdImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Id for Annotation Collection Creator (Agent) not found or more than 1 found. Agents should have exactly one id of format uri.", + "title": "Implements Annotation Collection-level creator (Agent) **_id_ key** with **single value** that is a **string of format uri** - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when type for Annotation Collection Creator (Agent) has exactly one id (Section 3.3.2)", + "properties": + { "creator": + { "oneOf": + [ + { "$ref": "id.json#/definitions/idValueFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "id.json#/definitions/idValueFound" } } } + } + ] + } + }, + "required": ["creator"] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentNameImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentNameImplemented.json new file mode 100644 index 00000000000..5f1a07b0f0a --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentNameImplemented.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-collectionCreatorAgentNameImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Name for Annotation Collection Creator (Agent) not found. Agents may have one or more name values.", + "title": "Implements Annotation Collection-level creator (Agent) **_name_ key** with one or more values - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when one or more name values for Annotation Collection Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentNameFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentNameFound" } } } + } + ] + } + }, + "required": ["creator"] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentNicknameImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentNicknameImplemented.json new file mode 100644 index 00000000000..9da32ff09f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentNicknameImplemented.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-collectionCreatorAgentNicknameImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Nickname for Annotation Collection Creator (Agent) not found. Agents should have exactly one nickname value.", + "title": "Implements Annotation Collection-level creator (Agent) **_nickname_ key** with a **single value** that is a string - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when exactly one nickname for Annotation Collection Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentSingularNicknameFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentSingularNicknameFound" } } } + } + ] + } + }, + "required": ["creator"] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentTypeImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentTypeImplemented.json new file mode 100644 index 00000000000..43f5fc32f40 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.2-collectionCreatorAgentTypeImplemented.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-collectionCreatorAgentTypeImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Type (Person, Organization, Software) for Annotation Collection Creator (Agent) not found. Agents should have one or more type values.", + "title": "Implements Annotation Collection-level creator (Agent) **_type_ key** with one or more values from **model-recommended list (Person, Organization, Software)** - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when type for Annotation Collection Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentTypeFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentTypeFound" } } } + } + ] + } + }, + "required": ["creator"] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.6-collectionRightsImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.6-collectionRightsImplemented.json new file mode 100644 index 00000000000..927f93eb3e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.6-collectionRightsImplemented.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.6-collectionRightsImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Collection-level rights key having string value(s) of format uri not found. Annotation Collection may have zero or more rights key values.", + "title": "Implements Annotation Collection-level **_rights_** key which has one or more values, each of which is a **string of format uri** - [model 3.3.6](https://www.w3.org/TR/annotation-model/#rights-information)", + "description": "True when the Annotation Collection implements rights key with with string(s) of format uri value(s) (Sections 5.1 and 3.3.6)", + "allOf": + [ + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent"}, + { "type": "object", + "required": [ "rights" ]} + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/3.3.6-collectionRightsValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.6-collectionRightsValidated.json new file mode 100644 index 00000000000..68410460589 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/3.3.6-collectionRightsValidated.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.6-collectionRightsValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Collection Collection has one or more values for the rights key that are not strings of format uri.", + "title": "If present the Annotation Collection Collection-level **_rights_ key** has values that are all **strings of format uri** - [model 3.3.6](https://www.w3.org/TR/annotation-model/#rights-information)", + "description": "True when no Annotation Collection Collection rights key present or when all values of rights key are strings of format uri (Section 3.3.6)", + "type": "object", + "allOf": [ + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionContextValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionContextValidated.json new file mode 100644 index 00000000000..d9a5dc31235 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionContextValidated.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionContextValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Collection is missing @context key or 'http://www.w3.org/ns/anno.jsonld' is not a value of @context.", + "title": "Implements **_@context_ key** and '**http://www.w3.org/ns/anno.jsonld**' is **a value of _@context_** - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "description": "True when the Annotation Collection has @context key and 'http://www.w3.org/ns/anno.jsonld' is an @context value (Section 5.1)", + "type": "object", + "required": [ "@context" ], + "properties": { + "@context": { + "oneOf": [ + { "$ref": "collections.json#/definitions/contextValueFound" }, + { "$ref": "collections.json#/definitions/contextValueInArrayFound" } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionFirstImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionFirstImplemented.json new file mode 100644 index 00000000000..0eee805921e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionFirstImplemented.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionFirstImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Collection is allowed exactly one first key.", + "title": "Implements **Annotation Collection _first_ key** - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "$ref": "collections.json#/definitions/firstFound" +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionFirstValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionFirstValidated.json new file mode 100644 index 00000000000..4c31e1fd744 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionFirstValidated.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionFirstValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Collection has invalid first key or has total value more than zero without a valid first key.", + "title": "**Annotation Collection has _first_ key**, or no **_total_ key**, or **_total_ key** with value of zero - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "$ref": "collections.json#/definitions/firstRequiredIfTotalMoreThanZero" +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionIdValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionIdValidated.json new file mode 100644 index 00000000000..164620879ee --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionIdValidated.json @@ -0,0 +1,11 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionIdValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Collection is missing id key or value of id key is not a single string of format uri.", + "title": "Implements **Annotation Collection _id_ key** which has a **single value** that is a **string of format uri** - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "description": "True when the Annotation Collection has a single id that is a string of format uri (Section 5.1)", + "$ref": "id.json#/definitions/idValueFound" +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLabelImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLabelImplemented.json new file mode 100644 index 00000000000..916ba5c80d7 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLabelImplemented.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionLabelImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Collection should have a label key.", + "title": "Implements **Annotation Collection _label_ key** - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "$ref": "collections.json#/definitions/labelFound" +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLabelValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLabelValidated.json new file mode 100644 index 00000000000..7543d515da4 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLabelValidated.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionLabelValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Collection has label key with non-string value or an array as value containing non-string value.", + "title": "**Annotation Collection _label_ key**, if present, is **a value of type string** - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "$ref": "collections.json#/definitions/labelDefinition" +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLastImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLastImplemented.json new file mode 100644 index 00000000000..528a5616e88 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLastImplemented.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionLastImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Collection should include exactly one last key with value that is string of uri format.", + "title": "Implements **Annotation Collection _last_ key** - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "$ref": "collections.json#/definitions/lastFound" +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLastValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLastValidated.json new file mode 100644 index 00000000000..d00e90da69b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionLastValidated.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionLastValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Collection has last key with non-uri value or array as value containing more than one item.", + "title": "**Annotation Collection _last_ key**, if present, is **a single value of format uri** - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "$ref": "collections.json#/definitions/lastValidIfPresent" +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTotalImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTotalImplemented.json new file mode 100644 index 00000000000..088e785c2e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTotalImplemented.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionTotalImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Collection should include exactly one total key with non-negative numeric value.", + "title": "Implements **Annotation Collection _total_ key** - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "$ref": "collections.json#/definitions/totalFound" +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTotalValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTotalValidated.json new file mode 100644 index 00000000000..51b3ff263a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTotalValidated.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionTotalValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Collection has total key with non-numeric value, a negative numeric value, or more than one value.", + "title": "**Annotation Collection _total_ key**, if present, is **a non-negative integer value** - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "$ref": "collections.json#/definitions/totalDefinition" +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTypeValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTypeValidated.json new file mode 100644 index 00000000000..3c858ab92d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/5.1-collectionTypeValidated.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.1-collectionTypeValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Collection is missing type key or 'AnnotationCollection' is not a value of type.", + "title": "Implements **Annotation Collection _type_ key** such that '**AnnotationCollection**' is **a value of _type_** - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "$ref": "collections.json#/definitions/annotationCollectionTypeValueFound" +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/collectionMusts-manual.html b/tests/wpt/web-platform-tests/annotation-model/collections/collectionMusts-manual.html new file mode 100644 index 00000000000..d1ff44491b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/collectionMusts-manual.html @@ -0,0 +1,49 @@ + + + +A single Annotation Collection has all required keys and all collection keys used meet required value constraints + + + + + + + + + +

                                                                                        Fill the textarea below with JSON output from your annotation client +implementation that supports the following criteria:

                                                                                        +
                                                                                        +
                                                                                        + +

                                                                                        +

                                                                                        +
                                                                                        +

                                                                                        Specifically, the following assertions will be evaluated:

                                                                                        +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/collectionMusts.test b/tests/wpt/web-platform-tests/annotation-model/collections/collectionMusts.test new file mode 100644 index 00000000000..31864b784f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/collectionMusts.test @@ -0,0 +1,19 @@ +{ + "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld", + "name": "A single Annotation Collection has all required keys and all collection keys used meet required value constraints", + "description": "Collections of Web Annotations:
                                                                                        • MUST include certain properties (keys)
                                                                                        • MUST satisfy model constraints on values of required and any optional Annotation keys used
                                                                                        Note: Implementation of optional Annotation Collection keys (features), optional constraints on key values, and optional keys and constraints on Agents involved in an Annotation Collection checked by other tests.
                                                                                        Please fill textarea with json-ld serialization of a single Annotation Collection description", + "testType": "manual", + "ref": "https://www.w3.org/TR/annotation-model/", + "assertions": [ + "collections/5.1-collectionContextValidated.json", + "collections/5.1-collectionIdValidated.json", + "collections/5.1-collectionTypeValidated.json", + "collections/5.1-collectionLabelValidated.json", + "collections/5.1-collectionTotalValidated.json", + "collections/5.1-collectionFirstValidated.json", + "collections/5.1-collectionLastValidated.json", + "collections/3.3.1-collectionCreatedValidated.json", + "collections/3.3.1-collectionModifiedValidated.json", + "collections/3.3.6-collectionRightsValidated.json" + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/collectionOptionals-manual.html b/tests/wpt/web-platform-tests/annotation-model/collections/collectionOptionals-manual.html new file mode 100644 index 00000000000..ce489fce204 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/collectionOptionals-manual.html @@ -0,0 +1,49 @@ + + + +A single Annotation Collection implements optional keys and meets optional key value constraints + + + + + + + + + +

                                                                                        Fill the textarea below with JSON output from your annotation client +implementation that supports the following criteria:

                                                                                        +
                                                                                        +
                                                                                        + +

                                                                                        +

                                                                                        +
                                                                                        +

                                                                                        Specifically, the following assertions will be evaluated:

                                                                                        +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/collectionOptionals.test b/tests/wpt/web-platform-tests/annotation-model/collections/collectionOptionals.test new file mode 100644 index 00000000000..885b3f4020c --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/collectionOptionals.test @@ -0,0 +1,24 @@ +{ + "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld", + "name": "A single Annotation Collection implements optional keys and meets optional key value constraints", + "description": "A Collection of Web Annotations:
                                                                                        • Should include certain properties (keys)
                                                                                        • May include additional keys
                                                                                        • May have creator Agent key values that conform to model recommended constraints
                                                                                        Note: failing an assertion indicates only that a recommended or optional feature has not been implemented or has not been implemented correctly.
                                                                                        Please fill textarea with json-ld serialization of a single Annotation Collection description", + "testType": "manual", + "ref": "https://www.w3.org/TR/annotation-model/", + "assertions": [ + "collections/5.1-collectionLabelImplemented.json", + "collections/5.1-collectionLastImplemented.json", + "collections/5.1-collectionTotalImplemented.json", + "collections/5.1-collectionFirstImplemented.json", + "collections/3.3.1-collectionModifiedImplemented.json", + "collections/3.3.1-collectionCreatorImplemented.json", + "collections/3.3.1-collectionCreatedImplemented.json", + "collections/3.3.6-collectionRightsImplemented.json", + "collections/3.3.2-collectionCreatorAgentEmail_sha1Implemented.json", + "collections/3.3.2-collectionCreatorAgentEmailImplemented.json", + "collections/3.3.2-collectionCreatorAgentHomepageImplemented.json", + "collections/3.3.2-collectionCreatorAgentIdImplemented.json", + "collections/3.3.2-collectionCreatorAgentNameImplemented.json", + "collections/3.3.2-collectionCreatorAgentNicknameImplemented.json", + "collections/3.3.2-collectionCreatorAgentTypeImplemented.json" + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatedImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatedImplemented.json new file mode 100644 index 00000000000..e65ea8f29c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatedImplemented.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-pageCreatedImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Valid Annotation Page-level created key not found. Annotation Page may have exactly one created key value inherited from Collection.", + "title": "Implements Annotation Page-level **_created_ key** which has a **single value** that is a **string of format date-time** - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when the Annotation Page implements exactly one created key value (Sections 3.3.1 and 5.2)", + "oneOf": [ + { "allOf": [ + { "$ref": "#/definitions/createdImplemented" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "#/definitions/createdImplemented" } + }, + "required": [ "first" ] + } + ], + "definitions": + { + "createdImplemented": + { + "allOf": + [ + { "$ref": "otherProperties.json#/definitions/createdValidIfPresent"}, + { "type": "object", + "required" : [ "created" ] + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatedValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatedValidated.json new file mode 100644 index 00000000000..be4e9c32487 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatedValidated.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-pageCreatedValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation page has multiple created key values or a single created key value that is not of format date-time.", + "title": "If present the Annotation page-level **_created_ key** has a **single value** that is of **format date-time** - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when no Annotation page created key present or when created key has a single value that is of format date-time (Section 3.3.1)", + "type": "object", + "oneOf": [ + { "allOf": [ + { "$ref": "otherProperties.json#/definitions/createdValidIfPresent" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "properties": + {"first": + { "$ref": "otherProperties.json#/definitions/createdValidIfPresent" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatorImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatorImplemented.json new file mode 100644 index 00000000000..8b6ded3a4ec --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageCreatorImplemented.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-pageCreatorImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Valid Annotation Page-level creator key not found. Annotation Page may have zero or more creators inherited from Collection.", + "title": "Implements **Annotation Page-level _creator_ key** which has one or more values, each of which is a **string of format uri** or an **object** - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when the Annotation Page implements creator key (Section 3.3.1)", + "oneOf": [ + { "allOf": [ + { "$ref": "#/definitions/creatorImplemented" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "#/definitions/creatorImplemented" } + }, + "required": [ "first" ] + } + ], + "definitions": + { + "creatorImplemented": + { + "allOf": + [ + { "$ref": "otherProperties.json#/definitions/creatorValidIfPresent"}, + { "type": "object", + "required": [ "creator" ] } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageModifiedImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageModifiedImplemented.json new file mode 100644 index 00000000000..5bccc821152 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageModifiedImplemented.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-pageModifiedImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Valid Annotation Page-level modified key not found. Annotation Page may have zero or exactly one modified key value inherited from Collection.", + "title": "Implements Annotation Page-level **_modified_ key** which has a **single value** that is a **string of format date-time** - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when the Annotation Page implements exactly one modified key value (Section 3.3.1, 5.2)", + "oneOf": [ + { "allOf": [ + { "$ref": "#/definitions/modifiedImplemented" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "#/definitions/modifiedImplemented" } + }, + "required": [ "first" ] + } + ], + "definitions": + { + "modifiedImplemented": + { + "allOf": + [ + { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent"}, + { "type": "object", + "required": [ "modified" ] } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageModifiedValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageModifiedValidated.json new file mode 100644 index 00000000000..d8591cd16a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.1-pageModifiedValidated.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-pageModifiedValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation page has multiple modified key values or a single modified key value that is not of format date-time.", + "title": "If present the Annotation page-level **_modified_ key** has a **single value** that is of **format date-time** - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when no Annotation page modified key present or when modified key has a single value that is of format date-time (Section 3.3.1)", + "type": "object", + "oneOf": [ + { "allOf": [ + { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "properties": + {"first": + { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentEmailImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentEmailImplemented.json new file mode 100644 index 00000000000..c30f81ac28f --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentEmailImplemented.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-pageCreatorAgentEmailImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Email for Annotation Page Creator (Agent), inherited from Collection, not found. Agents may have one or more email values.", + "title": "Implements Annotation Page-level creator (Agent), inherited from Collection, **_email_ key** with one or more values, each of which is a **mailto: uri** - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when one or more email values for Annotation Page Creator (Agent), inherited from Collection, is implemented (Section 3.3.2)", + "oneOf": [ + { "allOf": [ + { "$ref": "#/definitions/creatorAgentEmailFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "#/definitions/creatorAgentEmailFound" } + }, + "required": [ "first" ] + } + ], + "definitions": { + "creatorAgentEmailFound": + { "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentEmailFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentEmailFound" } } } + } + ] + } + }, + "required": ["creator"] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentEmail_sha1Implemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentEmail_sha1Implemented.json new file mode 100644 index 00000000000..41e6ec0f6a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentEmail_sha1Implemented.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-pageCreatorAgentEmail_sha1Implemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Email_sha1 for Annotation Page Creator (Agent), inherited from Collection, not found. Agents may have one or more email_sha1 values.", + "title": "Implements Annotation Page-level creator (Agent), inherited from Collection, **email_sha1 key** with one or more values - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when one or more email_sha1 values for Annotation Page Creator (Agent), inherited from Collection, is implemented (Section 3.3.2)", + "oneOf": [ + { "allOf": [ + { "$ref": "#/definitions/creatorAgentEmail_sha1Found" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "#/definitions/creatorAgentEmail_sha1Found" } + }, + "required": [ "first" ] + } + ], + "definitions": { + "creatorAgentEmail_sha1Found": + { "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentEmail_sha1Found" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentEmail_sha1Found" } } } + } + ] + } + }, + "required": ["creator"] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentHomepageImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentHomepageImplemented.json new file mode 100644 index 00000000000..d325b17ba83 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentHomepageImplemented.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-pageCreatorAgentHomepageImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Homepage for Annotation Page Creator (Agent), inherited from Collection, not found. Agents may have one or more homepage values.", + "title": "Implements Annotation Page-level creator (Agent), inherited from Collection, **_homepage_ key** with one or more values, each of which is a **string of format uri** - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when one or more homepage values for Annotation Page Creator (Agent), inherited from Collection, is implemented (Section 3.3.2)", + "oneOf": [ + { "allOf": [ + { "$ref": "#/definitions/creatorAgentHomePageFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "#/definitions/creatorAgentHomePageFound" } + }, + "required": [ "first" ] + } + ], + "definitions": { + "creatorAgentHomePageFound": + { "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentHomepageFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentHomepageFound" } } } + } + ] + } + }, + "required": ["creator"] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentIdImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentIdImplemented.json new file mode 100644 index 00000000000..6d45c1df72b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentIdImplemented.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-pageCreatorAgentIdImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Single id for Annotation Page Creator (Agent), inherited from Collection, not found for any Creator. Agents should have exactly one id of format uri.", + "title": "Implements Annotation Page-level creator (Agent), inherited from Collection, **_id_ key** with **single value** that is a **string of format uri** - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when at least one Annotation Page Creator (Agent), inherited from Collection, has exactly one id (Section 3.3.2)", + "oneOf": [ + { "allOf": [ + { "$ref": "#/definitions/creatorAgentIdFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "#/definitions/creatorAgentIdFound" } + }, + "required": [ "first" ] + } + ], + "definitions": { + "creatorAgentIdFound": + { + "properties": + { "creator": + { "oneOf": + [ + { "$ref": "id.json#/definitions/idValueFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "id.json#/definitions/idValueFound" } } } + } + ] + } + }, + "required": ["creator"] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentNameImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentNameImplemented.json new file mode 100644 index 00000000000..077c3d51402 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentNameImplemented.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-pageCreatorAgentNameImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Name for Annotation Page Creator (Agent), inherited from Collection, not found. Agents may have one or more name values.", + "title": "Implements Annotation Page-level creator (Agent), inherited from Collection, **_name_ key** with one or more values - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when one or more name values for Annotation Page Creator (Agent), inherited from Collection, is implemented (Section 3.3.2)", + "oneOf": [ + { "allOf": [ + { "$ref": "#/definitions/creatorAgentNameFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "#/definitions/creatorAgentNameFound" } + }, + "required": [ "first" ] + } + ], + "definitions": { + "creatorAgentNameFound": + { "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentNameFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentNameFound" } } } + } + ] + } + }, + "required": ["creator"] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentNicknameImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentNicknameImplemented.json new file mode 100644 index 00000000000..60398fed77c --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentNicknameImplemented.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-pageCreatorAgentNicknameImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Single nickname for Annotation Page Creator (Agent), inherited from Collection, not found for any Creator. Agents should have exactly one id of format uri.", + "title": "Implements Annotation Page-level creator (Agent), inherited from Collection, **_nickname_ key** with **single value** that is a **string of format uri** - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when at least one Annotation Page Creator (Agent), inherited from Collection, has exactly one nickname (Section 3.3.2)", + "oneOf": [ + { "allOf": [ + { "$ref": "#/definitions/creatorAgentNicknameFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "#/definitions/creatorAgentNicknameFound" } + }, + "required": [ "first" ] + } + ], + "definitions": { + "creatorAgentNicknameFound": + { + "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentSingularNicknameFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentSingularNicknameFound" } } } + } + ] + } + }, + "required": ["creator"] + } + } +} + + diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentTypeImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentTypeImplemented.json new file mode 100644 index 00000000000..8144fa24e5a --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.2-pageCreatorAgentTypeImplemented.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-pageCreatorAgentTypeImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Type (Person, Organization, Software) for Annotation Page Creator (Agent), inherited from Collection, not found. Agents should have one or more type values.", + "title": "Implements Annotation Page-level creator (Agent), inherited from Collection, **_type_ key** with one or more values from **model-recommended list (Person, Organization, Software)** - [model 3.2.2](https://www.w3.org/TR/annotation-model/#agents)", + "description": "True when type for Annotation Page Creator (Agent), inherited from Collection, is implemented (Section 3.3.2)", + "oneOf": [ + { "allOf": [ + { "$ref": "#/definitions/creatorAgentNameFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "#/definitions/creatorAgentNameFound" } + }, + "required": [ "first" ] + } + ], + "definitions": { + "creatorAgentNameFound": + { "properties": + { "creator": + { "oneOf": + [ + { "$ref": "otherProperties.json#/definitions/agentNameFound" }, + { "type": "array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "otherProperties.json#/definitions/agentNameFound" } } } + } + ] + } + }, + "required": ["creator"] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.6-pageRightsImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.6-pageRightsImplemented.json new file mode 100644 index 00000000000..56e4e910124 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.6-pageRightsImplemented.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.6-pageRightsImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Page rights key (inherited from Collection) having string value(s) of format uri not found. Annotation Page may may have zero or more rights key values.", + "title": "Implements Annotation Page **_rights_** key (inherited from Collection) which has one or more values, each of which is a **string of format uri** - [model 3.3.6](https://www.w3.org/TR/annotation-model/#rights-information)", + "description": "True when the Annotation Page implements rights key with with string(s) of format uri value(s) (Sections 5.1 and 3.3.6)", + "oneOf": [ + { "allOf": [ + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" }, + { "type": "object", + "required": [ "rights" ]}, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "allOf": [ + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" }, + { "type": "object", + "required": [ "rights" ]} + ] + } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.6-pageRightsValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.6-pageRightsValidated.json new file mode 100644 index 00000000000..472c316dc6b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/3.3.6-pageRightsValidated.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.6-pageRightsValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation page page has one or more values for the rights key that are not strings of format uri.", + "title": "If present the Annotation page page-level **_rights_ key** has values that are all **strings of format uri** - [model 3.3.6](https://www.w3.org/TR/annotation-model/#rights-information)", + "description": "True when no Annotation page page rights key present or when all values of rights key are strings of format uri (Section 3.3.6)", + "type": "object", + "oneOf": [ + { "allOf": [ + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "properties": + {"first": + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageContextValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageContextValidated.json new file mode 100644 index 00000000000..66cbe0779fd --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageContextValidated.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageContextValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page/Collection is missing @context key or 'http://www.w3.org/ns/anno.jsonld' is not a value of @context.", + "title": "Implements **Annotation Page** (or Annotation Collection for embedded Page) **_@context_ key** and '**http://www.w3.org/ns/anno.jsonld**' is **a value of _@context_** - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "description": "True when the Annotation Page/Collection has @context key and 'http://www.w3.org/ns/anno.jsonld' is an @context value (Section 5.2)", + "type": "object", + "required": [ "@context" ], + "properties": { + "@context": { + "oneOf": [ + { "$ref": "collections.json#/definitions/contextValueFound" }, + { "$ref": "collections.json#/definitions/contextValueInArrayFound" } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageFirstImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageFirstImplemented.json new file mode 100644 index 00000000000..1c7dfb141e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageFirstImplemented.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageFirstImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Page has no first key (inherited from Collection).", + "title": "Implements **Annotation Page _first_ key** (inherited from Collection) with valid value - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/firstFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/firstFound" } + }, + "required": [ "first" ] + } + ] +} + + diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageFirstValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageFirstValidated.json new file mode 100644 index 00000000000..2e260b1d36e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageFirstValidated.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageFirstValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page has invalid first key.", + "title": "**Annotation Page _first_ key** (inherited from Collection), if present, has value of string of format uri - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/firstValidIfPresent" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/firstValidIfPresent" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageIdValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageIdValidated.json new file mode 100644 index 00000000000..bafa019c465 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageIdValidated.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageIdValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page is missing id key or value of id key is not a single string of format uri.", + "title": "Implements **Annotation Page _id_ key** which has a **single value** that is a **string of format uri** - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "description": "True when the Annotation Page has a single id that is a string of format uri (Section 5.2)", + "oneOf": [ + { "allOf": [ + { "$ref": "id.json#/definitions/idValueFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "id.json#/definitions/idValueFound" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageItemsValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageItemsValidated.json new file mode 100644 index 00000000000..57bedba8506 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageItemsValidated.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageItemsValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page is missing items key or value of items key is not an array of strings of format uri and/or objects of type Annotation.", + "title": "Implements **Annotation Page _items_ key** such that value of items key is an array of strings of format uri and/or objects of type Annotation - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "$ref": "collections.json#/definitions/itemsFound" }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/itemsFound" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLabelImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLabelImplemented.json new file mode 100644 index 00000000000..e64d5d80b24 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLabelImplemented.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageLabelImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Page has no label key (inherited from Collection).", + "title": "Implements **Annotation Page _label_ key** (inherited from Collection) with valid value - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/labelFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/labelFound" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLabelValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLabelValidated.json new file mode 100644 index 00000000000..740bd622aed --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLabelValidated.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageLabelValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page has label key with non-string value or an array as value containing non-string value.", + "title": "**Annotation Page _label_ key**, if present (inherited from Collection), is **a value of type string** - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/labelDefinition" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/labelDefinition" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLastImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLastImplemented.json new file mode 100644 index 00000000000..dc0806404fd --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLastImplemented.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageLastImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Page has no last key (inherited from Collection).", + "title": "Implements **Annotation Page _last_ key** (inherited from Collection) with valid value - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/lastFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/lastFound" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLastValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLastValidated.json new file mode 100644 index 00000000000..9d02948b39d --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageLastValidated.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageLastValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page has last key with non-uri value or array as value containing more than one item.", + "title": "**Annotation Page _last_ key** (inherited from Collection), if present, is **a single value of format uri** - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/lastValidIfPresent" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/lastValidIfPresent" } + }, + "required": [ "first" ] + } + ] + + + + +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageNextImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageNextImplemented.json new file mode 100644 index 00000000000..fb057117596 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageNextImplemented.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageNextImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Page has no next key.", + "title": "Implements **Annotation Page _next_ key** with valid value of string of format uri - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "$ref": "collections.json#/definitions/nextFound" }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/nextFound" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageNextValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageNextValidated.json new file mode 100644 index 00000000000..ab9198cc204 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageNextValidated.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageNextValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page has an invalid next value.", + "title": "True when **Annotation Page has no _next_ key** or has **_next_ key** with valid value of string of format uri - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/nextValidIfPresent" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/nextValidIfPresent" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePartOfImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePartOfImplemented.json new file mode 100644 index 00000000000..a23e27ea689 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePartOfImplemented.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pagePartOfImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Page has no partOf key.", + "title": "Implements **Annotation Page _partOf_ key** with valid value of string of format uri - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "$ref": "collections.json#/definitions/partOfFound" }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/partOfFound" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePartOfValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePartOfValidated.json new file mode 100644 index 00000000000..d073c63050b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePartOfValidated.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pagePartOfValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page has an invalid partOf value.", + "title": "True when **Annotation Page has no _partOf_ key** or has **_partOf_ key** with valid value oof string of format uri - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/partOfValidIfPresent" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/partOfValidIfPresent" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePrevImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePrevImplemented.json new file mode 100644 index 00000000000..0ba0e8792e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePrevImplemented.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pagePrevImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Page has no prev key.", + "title": "Implements **Annotation Page _prev_ key** with valid value of string of format uri - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "$ref": "collections.json#/definitions/prevFound" }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/prevFound" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePrevValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePrevValidated.json new file mode 100644 index 00000000000..a9fbc71e6d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pagePrevValidated.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pagePrevValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page has an invalid prev value.", + "title": "True when **Annotation Page has no _prev_ key** or has **_prev_ key** with valid value of string of format uri - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/prevValidIfPresent" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/prevValidIfPresent" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageStartIndexImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageStartIndexImplemented.json new file mode 100644 index 00000000000..00a1eddd28c --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageStartIndexImplemented.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageStartIndexImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Page has has no valid startIndex value.", + "title": "Implements **Annotation Page _startIndex_ key** with valid value of _type_ integer >= 0 - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "$ref": "collections.json#/definitions/startIndexFound" }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/startIndexFound" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageStartIndexValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageStartIndexValidated.json new file mode 100644 index 00000000000..21771937700 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageStartIndexValidated.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageStartIndexValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page has an invalid startIndex value.", + "title": "True when **Annotation Page has no _startIndex_ key** or has **_startIndex_ key** with valid value of _type_ integer >= 0 - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/startIndexDefinition" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/startIndexDefinition" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTotalImplemented.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTotalImplemented.json new file mode 100644 index 00000000000..6e0e61a5c15 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTotalImplemented.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageTotalImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Annotation Page has no total key (inherited from Collection).", + "title": "Implements **Annotation Page _total_ key** (inherited from Collection) with valid value - [model 5.1](https://www.w3.org/TR/annotation-model/#annotation-collection)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/totalFound" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/totalFound" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTotalValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTotalValidated.json new file mode 100644 index 00000000000..eb9411d8522 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTotalValidated.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageTotalValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page has total key with non-numeric value, a negative numeric value, or more than one value.", + "title": "**Annotation Page _total_ key**, if present (inherited from Collection), is **a non-negative integer value** - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "allOf": [ + { "$ref": "collections.json#/definitions/totalDefinition" }, + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/totalDefinition" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTypeValidated.json b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTypeValidated.json new file mode 100644 index 00000000000..cb0e2f362db --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/5.2-pageTypeValidated.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "5.2-pageTypeValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation Page is missing type key or 'AnnotationPage' is not a value of type.", + "title": "Implements **Annotation Page _type_ key** such that '**AnnotationPage**' is **a value of _type_** - [model 5.2](https://www.w3.org/TR/annotation-model/#annotation-page)", + "oneOf": [ + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" }, + { "type": "object", + "properties": + {"first": + { "$ref": "collections.json#/definitions/annotationPageTypeValueFound" } + }, + "required": [ "first" ] + } + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageMusts-manual.html b/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageMusts-manual.html new file mode 100644 index 00000000000..843faaf5e78 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageMusts-manual.html @@ -0,0 +1,49 @@ + + + +A single Annotation Page has all required keys and all page keys present meet required value constraints + + + + + + + + + +

                                                                                        Fill the textarea below with JSON output from your annotation client +implementation that supports the following criteria:

                                                                                        +
                                                                                        +
                                                                                        + +

                                                                                        +

                                                                                        +
                                                                                        +

                                                                                        Specifically, the following assertions will be evaluated:

                                                                                        +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageMusts.test b/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageMusts.test new file mode 100644 index 00000000000..38722d75d26 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageMusts.test @@ -0,0 +1,24 @@ +{ + "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld", + "name": "A single Annotation Page has all required keys and all page keys present meet required value constraints", + "description": "Pages of Web Annotations:
                                                                                        • MUST include certain properties (keys)
                                                                                        • MUST satisfy model constraints on values of required and any optional Annotation keys used
                                                                                        Note: Implementation of optional Annotation Collection keys (features), optional constraints on key values, and optional keys and constraints on Agents involved in an Annotation Collection checked by other tests.
                                                                                        Please fill textarea with json-ld serialization of a single Annotation Page or an Annotation Collection with an embedded Page", + "testType": "manual", + "ref": "https://www.w3.org/TR/annotation-model/", + "assertions": [ + "collections/pages/5.2-pageContextValidated.json", + "collections/pages/5.2-pageIdValidated.json", + "collections/pages/5.2-pageTypeValidated.json", + "collections/pages/5.2-pageItemsValidated.json", + "collections/pages/5.2-pageStartIndexValidated.json", + "collections/pages/5.2-pagePartOfValidated.json", + "collections/pages/5.2-pageNextValidated.json", + "collections/pages/5.2-pagePrevValidated.json", + "collections/pages/5.2-pageTotalValidated.json", + "collections/pages/5.2-pageLabelValidated.json", + "collections/pages/5.2-pageFirstValidated.json", + "collections/pages/5.2-pageLastValidated.json", + "collections/pages/3.3.1-pageCreatedValidated.json", + "collections/pages/3.3.1-pageModifiedValidated.json", + "collections/pages/3.3.6-pageRightsValidated.json" + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageOptionals-manual.html b/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageOptionals-manual.html new file mode 100644 index 00000000000..e68f2d17c65 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageOptionals-manual.html @@ -0,0 +1,49 @@ + + + +A single Annotation Page implements optional keys and meets optional key value constraints + + + + + + + + + +

                                                                                        Fill the textarea below with JSON output from your annotation client +implementation that supports the following criteria:

                                                                                        +
                                                                                        +
                                                                                        + +

                                                                                        +

                                                                                        +
                                                                                        +

                                                                                        Specifically, the following assertions will be evaluated:

                                                                                        +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageOptionals.test b/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageOptionals.test new file mode 100644 index 00000000000..2d53d6550c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/collections/pages/pageOptionals.test @@ -0,0 +1,28 @@ +{ + "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld", + "name": "A single Annotation Page implements optional keys and meets optional key value constraints", + "description": "Pages of Web Annotations:
                                                                                        • MUST include certain properties (keys)
                                                                                        • MUST satisfy model constraints on values of required and any optional Annotation keys used
                                                                                        Note: Implementation of optional Annotation Collection keys (features), optional constraints on key values, and optional keys and constraints on Agents involved in an Annotation Collection checked by other tests.
                                                                                        Please fill textarea with json-ld serialization of a single Annotation Page or an Annotation Collection with an embedded Page", + "testType": "manual", + "ref": "https://www.w3.org/TR/annotation-model/", + "assertions": [ + "collections/pages/5.2-pagePartOfImplemented.json", + "collections/pages/5.2-pageStartIndexImplemented.json", + "collections/pages/5.2-pageNextImplemented.json", + "collections/pages/5.2-pagePrevImplemented.json", + "collections/pages/5.2-pageLabelImplemented.json", + "collections/pages/5.2-pageLastImplemented.json", + "collections/pages/5.2-pageTotalImplemented.json", + "collections/pages/5.2-pageFirstImplemented.json", + "collections/pages/3.3.1-pageModifiedImplemented.json", + "collections/pages/3.3.1-pageCreatorImplemented.json", + "collections/pages/3.3.1-pageCreatedImplemented.json", + "collections/pages/3.3.6-pageRightsImplemented.json", + "collections/pages/3.3.2-pageCreatorAgentEmail_sha1Implemented.json", + "collections/pages/3.3.2-pageCreatorAgentEmailImplemented.json", + "collections/pages/3.3.2-pageCreatorAgentHomepageImplemented.json", + "collections/pages/3.3.2-pageCreatorAgentIdImplemented.json", + "collections/pages/3.3.2-pageCreatorAgentNameImplemented.json", + "collections/pages/3.3.2-pageCreatorAgentNicknameImplemented.json", + "collections/pages/3.3.2-pageCreatorAgentTypeImplemented.json" + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/definitions/bodyTarget.json b/tests/wpt/web-platform-tests/annotation-model/definitions/bodyTarget.json index 65af961f681..b51c0461f9c 100644 --- a/tests/wpt/web-platform-tests/annotation-model/definitions/bodyTarget.json +++ b/tests/wpt/web-platform-tests/annotation-model/definitions/bodyTarget.json @@ -9,13 +9,12 @@ { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Definition: External Web Resource", - "description": "True when the object is an External Web Resource, i.e., includes an id that is of format uri but does not contain value (Textual Body) or source (Specific Resource) keys (Sections 3.2.1, 3.2.4, 4).", + "description": "True when the object is an External Web Resource, i.e., includes an id that is of format uri but does not contain source (Specific Resource) keys (Sections 3.2.1, 3.2.4, 4).", "type": "object", "allOf": [ {"$ref": "id.json#/definitions/idValueFound"} ], "not": { "anyOf": [ - { "required": ["value"] }, { "required": ["source"] }, { "required": ["target"] } ] @@ -26,23 +25,23 @@ { "type": "object", "properties": - { - "source": {"$ref": "#/definitions/externalWebResourceDetected"} - } + { + "source": {"$ref": "#/definitions/externalWebResourceDetected"} + } }, "itemEwrDetected": { "type": "object", "properties": - { - "items": { - "type": "array", - "minItems": 1, - "not": - { "items": {"not": { "$ref": "#/definitions/externalWebResourceDetected" } } } + { + "items": { + "type": "array", + "minItems": 1, + "not": + { "items": {"not": { "$ref": "#/definitions/externalWebResourceDetected" } } } + } } - } }, "textualBodyFound" : @@ -65,14 +64,14 @@ { "type": "object", "properties": - { - "items": { - "type": "array", - "minItems": 1, - "not": - { "items": {"not": { "$ref": "#/definitions/textualBodyFound" } } } + { + "items": { + "type": "array", + "minItems": 1, + "not": + { "items": {"not": { "$ref": "#/definitions/textualBodyFound" } } } + } } - } }, "targetResourcesFound" : @@ -98,15 +97,15 @@ "title": "Definition: Resources that can be used as Body", "description": "True when the string is format uri or the object is recognized as a valid body resource (Sections 3.2 and 4).", "type" : ["string", "object"], - "oneOf": [ + "anyOf": [ {"$ref": "id.json#/definitions/stringUri"}, {"$ref": "choiceSet.json#/definitions/choiceDetected" }, {"$ref": "choiceSet.json#/definitions/compositeDetected" }, - {"$ref": "choiceSet.json#/definitions/independentsDetected" }, - {"$ref": "choiceSet.json#/definitions/listDetected" }, - {"$ref": "specificResource.json#/definitions/specificeResourceDetected" }, - {"$ref": "#/definitions/externalWebResourceDetected" }, - {"$ref": "#/definitions/textualBodyFound" } + {"$ref": "choiceSet.json#/definitions/independentsDetected" }, + {"$ref": "choiceSet.json#/definitions/listDetected" }, + {"$ref": "specificResource.json#/definitions/specificeResourceDetected" }, + {"$ref": "#/definitions/externalWebResourceDetected" }, + {"$ref": "#/definitions/textualBodyFound" } ] }, @@ -297,16 +296,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/recognizedTypeFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/recognizedTypeFound" } } + } } - } }, "required": ["items"] }, @@ -319,12 +318,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["type"] , - "$ref": "#/definitions/resourceTypeRecognizedIfPresent" - } + "source": + { + "type": "object", + "required": ["type"] , + "$ref": "#/definitions/resourceTypeRecognizedIfPresent" + } }, "required": ["source"] }, @@ -408,16 +407,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/formatPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/formatPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -430,12 +429,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["format"] , - "$ref": "#/definitions/formatValidIfPresent" - } + "source": + { + "type": "object", + "required": ["format"] , + "$ref": "#/definitions/formatValidIfPresent" + } }, "required": ["source"] }, @@ -466,16 +465,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/singleFormatPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/singleFormatPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -488,12 +487,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["format"] , - "$ref": "#/definitions/formatSingularIfPresent" - } + "source": + { + "type": "object", + "required": ["format"] , + "$ref": "#/definitions/formatSingularIfPresent" + } }, "required": ["source"] }, @@ -582,16 +581,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/languagePropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/languagePropertyFound" } } + } } - } }, "required": ["items"] }, @@ -604,12 +603,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["language"] , - "$ref": "#/definitions/languageValidIfPresent" - } + "source": + { + "type": "object", + "required": ["language"] , + "$ref": "#/definitions/languageValidIfPresent" + } }, "required": ["source"] }, @@ -640,16 +639,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/singleLanguagePropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/singleLanguagePropertyFound" } } + } } - } }, "required": ["items"] }, @@ -662,12 +661,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["language"] , - "$ref": "#/definitions/languageSingularIfPresent" - } + "source": + { + "type": "object", + "required": ["language"] , + "$ref": "#/definitions/languageSingularIfPresent" + } }, "required": ["source"] }, @@ -720,16 +719,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/processingLanguagePropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/processingLanguagePropertyFound" } } + } } - } }, "required": ["items"] }, @@ -742,12 +741,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["processingLanguage"] , - "$ref": "#/definitions/processingLanguageValidIfPresent" - } + "source": + { + "type": "object", + "required": ["processingLanguage"] , + "$ref": "#/definitions/processingLanguageValidIfPresent" + } }, "required": ["source"] }, @@ -802,16 +801,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/textDirectionPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/textDirectionPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -824,12 +823,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["textDirection"] , - "$ref": "#/definitions/textDirectionValidIfPresent" - } + "source": + { + "type": "object", + "required": ["textDirection"] , + "$ref": "#/definitions/textDirectionValidIfPresent" + } }, "required": ["source"] }, @@ -848,9 +847,9 @@ { "type": "object", "properties": - { - "source": {"$ref": "#/definitions/ewrWithItems"} - }, + { + "source": {"$ref": "#/definitions/ewrWithItems"} + }, "required": ["source"] }, @@ -858,14 +857,14 @@ { "type": "object", "properties": - { - "items": { - "type": "array", - "minItems": 1, - "not": - { "items": {"not": { "$ref": "#/definitions/ewrWithItems" } } } - } - }, + { + "items": { + "type": "array", + "minItems": 1, + "not": + { "items": {"not": { "$ref": "#/definitions/ewrWithItems" } } } + } + }, "required": ["items"] }, @@ -882,9 +881,9 @@ { "type": "object", "properties": - { - "source": {"$ref": "#/definitions/ewrWithPurpose"} - }, + { + "source": {"$ref": "#/definitions/ewrWithPurpose"} + }, "required": ["source"] }, @@ -892,14 +891,14 @@ { "type": "object", "properties": - { - "items": { - "type": "array", - "minItems": 1, - "not": - { "items": {"not": { "$ref": "#/definitions/ewrWithPurpose" } } } - } - }, + { + "items": { + "type": "array", + "minItems": 1, + "not": + { "items": {"not": { "$ref": "#/definitions/ewrWithPurpose" } } } + } + }, "required": ["items"] }, @@ -916,14 +915,14 @@ { "type": "object", "properties": - { - "items": { - "type": "array", - "minItems": 1, - "not": - { "items": {"not": { "$ref": "#/definitions/embeddedTextualBodyWithItems" } } } - } - }, + { + "items": { + "type": "array", + "minItems": 1, + "not": + { "items": {"not": { "$ref": "#/definitions/embeddedTextualBodyWithItems" } } } + } + }, "required": ["items"] }, @@ -940,109 +939,158 @@ { "type": "object", "properties": - { - "items": { - "type": "array", - "minItems": 1, - "not": - { "items": {"not": { "$ref": "#/definitions/embeddedTextualBodyWithSource" } } } - } - }, + { + "items": { + "type": "array", + "minItems": 1, + "not": + { "items": {"not": { "$ref": "#/definitions/embeddedTextualBodyWithSource" } } } + } + }, "required": ["items"] }, "embeddedTextTypeIncludesTextualBody": { - "allOf": + "allOf": [ - { "$ref": "#/definitions/textualBodyFound" }, - { "required": ["type"] }, - { "properties": - { - "type": - { - "oneOf": - [ - { "type": "string", - "enum": ["TextualBody"] }, - { "type": "array", - "minItems": 1, - "not": - { "items": - { "not": { "enum": [ "TextualBody"] } } - } - } - ] - } + { "$ref": "#/definitions/textualBodyFound" }, + { "required": ["type"] }, + { "properties": + { + "type": + { + "oneOf": + [ + { "type": "string", + "enum": ["TextualBody"] }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "enum": [ "TextualBody"] } } + } + } + ] + } + } } - } - ] + ] + }, + + "embeddedTextTypeInclTextualBodyWithoutId": + { + "allOf": + [ + { "$ref": "#/definitions/textualBodyFound" }, + { "required": ["type"] }, + { "properties": + { + "type": + { + "oneOf": + [ + { "type": "string", + "enum": ["TextualBody"] }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "enum": [ "TextualBody"] } } + } + } + ] + } + } + }, + { "not": { "$ref": "id.json#/definitions/idValueFound" } } + ] }, "itemEmbeddedTextTypeIncludesTextualBody": { - "type": "object", - "properties": - { - "items": + "type": "object", + "properties": { - "type": "array", - "minItems": 1, - "not": - { - "items": - { "not": { "$ref": "#/definitions/embeddedTextTypeIncludesTextualBody" } } - } - } - }, - "required": ["items"] + "items": + { + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/embeddedTextTypeIncludesTextualBody" } } + } + } + }, + "required": ["items"] }, - "embeddedTextTypeIncludesText": + "itemEmbeddedTextTypeInclTextualBodyWithoutId": { - "allOf": + "type": "object", + "properties": + { + "items": + { + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/embeddedTextTypeIncludesTextualBody" } } + } + } + }, + "required": ["items"], + "not": { "$ref": "id.json#/definitions/idValueFound" } + }, + +"embeddedTextTypeIncludesText": + { + "allOf": [ - { "$ref": "#/definitions/textualBodyFound" }, - { "required": ["type"] }, - { "properties": - { - "type": + { "$ref": "#/definitions/textualBodyFound" }, + { "required": ["type"] }, + { "properties": { - "oneOf": - [ - { "type": "string", - "enum": ["Text"] }, - { "type": "array", - "minItems": 1, - "not": - { "items": - { "not": { "enum": [ "Text"] } } - } - } - ] + "type": + { + "oneOf": + [ + { "type": "string", + "enum": ["Text"] }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "enum": [ "Text"] } } + } + } + ] + } } } - } - ] + ] }, "itemEmbeddedTextTypeIncludesText": { - "type": "object", - "properties": - { - "items": + "type": "object", + "properties": { - "type": "array", - "minItems": 1, - "not": - { - "items": - { "not": { "$ref": "#/definitions/embeddedTextTypeIncludesText" } } - } - } - }, - "required": ["items"] + "items": + { + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/embeddedTextTypeIncludesText" } } + } + } + }, + "required": ["items"] } } diff --git a/tests/wpt/web-platform-tests/annotation-model/definitions/choiceSet.json b/tests/wpt/web-platform-tests/annotation-model/definitions/choiceSet.json index ffe21a0f0e0..89c2ebdc74c 100644 --- a/tests/wpt/web-platform-tests/annotation-model/definitions/choiceSet.json +++ b/tests/wpt/web-platform-tests/annotation-model/definitions/choiceSet.json @@ -21,14 +21,14 @@ "items": { "oneOf": [ - { "$ref": "specificResource.json#/definitions/specificeResourceDetected" }, - { "$ref": "bodyTarget.json#/definitions/externalWebResourceDetected" }, - { "$ref": "bodyTarget.json#/definitions/textualBodyFound" }, + { "$ref": "specificResource.json#/definitions/specificeResourceDetected" }, + { "$ref": "bodyTarget.json#/definitions/externalWebResourceDetected" }, + { "$ref": "bodyTarget.json#/definitions/textualBodyFound" }, { "$ref": "id.json#/definitions/stringUri" }, { "allOf": [ - { "$ref" : "#/definitions/choiceOrSetTypeDefinition" }, - { "$ref": "#/definitions/itemsDetected" } + { "$ref" : "#/definitions/choiceOrSetTypeDefinition" }, + { "$ref": "#/definitions/itemsDetected" } ] } ] @@ -108,19 +108,19 @@ "choiceOrSetTypeDefinition": { - "$schema": "http://json-schema.org/draft-04/schema#", - "title": "Definition: Choice or Set type", - "description": "True when object has type key and object's type is any of 'Choice', 'Composite', 'List', 'Independents' (Section 3.2.7)", - "type": "object", - "properties": - { - "type": - { - "type": "string", - "enum": ["Choice", "Composite", "List", "Independents"] - } - }, - "required": [ "type" ] + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: Choice or Set type", + "description": "True when object has type key and object's type is any of 'Choice', 'Composite', 'List', 'Independents' (Section 3.2.7)", + "type": "object", + "properties": + { + "type": + { + "type": "string", + "enum": ["Choice", "Composite", "List", "Independents"] + } + }, + "required": [ "type" ] }, "choiceDetected": { @@ -178,36 +178,36 @@ "type": "object", "allOf": [ - { "$ref": "#/definitions/choiceOrSetTypeDefinition" }, - { "$ref": "#/definitions/itemsDetected" } + { "$ref": "#/definitions/choiceOrSetTypeDefinition" }, + { "$ref": "#/definitions/itemsDetected" } ] }, "choiceSetWithValue" : { - "allOf": - [ - { "$ref": "#/definitions/choiceOrSetDetected" }, - { "required": [ "value" ] } - ] + "allOf": + [ + { "$ref": "#/definitions/choiceOrSetDetected" }, + { "required": [ "value" ] } + ] }, "choiceSetWithSource" : { - "allOf": - [ - { "$ref": "#/definitions/choiceOrSetDetected" }, - { "required": [ "source" ] } - ] + "allOf": + [ + { "$ref": "#/definitions/choiceOrSetDetected" }, + { "required": [ "source" ] } + ] }, "choiceSetWithPurpose" : { - "allOf": - [ - { "$ref": "#/definitions/choiceOrSetDetected" }, - { "required": [ "purpose" ] } - ] + "allOf": + [ + { "$ref": "#/definitions/choiceOrSetDetected" }, + { "required": [ "purpose" ] } + ] } } diff --git a/tests/wpt/web-platform-tests/annotation-model/definitions/collections.json b/tests/wpt/web-platform-tests/annotation-model/definitions/collections.json new file mode 100644 index 00000000000..9f5b13a9f83 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/definitions/collections.json @@ -0,0 +1,428 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "collections.json", + "title": "Definitions: Annotation Collections.", + "description": "Schemas in #/definitions detect or validate keys/objects (direct children) uniquely used to describe Annotation Collections (Section 5.1 and 5.2).", + "definitions": { + + "contextValueFound": { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: Valid @context string included in Collection / Page description", + "description": "True when the string has value http://www.w3.org/ns/anno.jsonld (Section 5)", + "type": "string", + "enum": [ "http://www.w3.org/ns/anno.jsonld" ] + }, + + "contextValueInArrayFound": { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: Valid @context string found in array included in Collection / Page description", + "description": "True when the array contains a string item having value http://www.w3.org/ns/anno.jsonld (Section 5)", + "type": "array", + "not": + { "items": + { "not": + { "$ref": "#/definitions/contextValueFound" } + } + } + }, + + "annotationCollectionTypeValueRecognized": { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: Valid AnnotationCollection type value string included in Collection description", + "description": "True when the string has value 'AnnotationCollection' (Section 5.1)", + "type": "string", + "enum": [ "AnnotationCollection" ] + }, + + "annotationCollectionTypeValueInArrayRecognized": { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: Valid AnnotationCollection type in array included in Collection description", + "description": "True when the array contains a string item having value 'AnnotationCollection' (Section 5.1)", + "type": "array", + "not": + { "items": + { "not": + { "$ref": "#/definitions/annotationCollectionTypeValueRecognized" } + } + } + }, + + "annotationCollectionTypeValueFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Implementation: AnnotationCollection type", + "description": "True when the Annotation Collection has type key and 'AnnotationCollection' is a value of type (Section 5.1)", + "type": "object", + "required": [ "type" ], + "properties": { + "type": { + "oneOf": [ + { "$ref": "#/definitions/annotationCollectionTypeValueRecognized" }, + { "$ref": "#/definitions/annotationCollectionTypeValueInArrayRecognized" } + ] + } + } + }, + + "annotationPageTypeValueRecognized": { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: Valid AnnotationPage type value string included in Page description", + "description": "True when the string has value 'AnnotationPage' (Section 5.2)", + "type": "string", + "enum": [ "AnnotationPage" ] + }, + + "annotationPageTypeValueInArrayRecognized": { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: Valid AnnotationPage type in array included in Page description", + "description": "True when the array contains a string item having value 'AnnotationPage' (Section 5.2)", + "type": "array", + "not": + { "items": + { "not": + { "$ref": "#/definitions/annotationPageTypeValueRecognized" } + } + } + }, + + "annotationPageTypeValueFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Implementation: AnnotationPage type", + "description": "True when the Annotation Page has type key and 'AnnotationPage' is a value of type (Section 5.2)", + "type": "object", + "required": [ "type" ], + "properties": { + "type": { + "oneOf": [ + { "$ref": "#/definitions/annotationPageTypeValueRecognized" }, + { "$ref": "#/definitions/annotationPageTypeValueInArrayRecognized" } + ] + } + } + }, + + "labelDefinition": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: label (Annotation Collections)", + "description": "True when the object has no label or has one or more label values of type string (Section 5.1)", + "type": "object", + "properties": + { + "label": + { + "oneOf": + [ + {"type": "string" }, + {"type": "array", + "minItems": 1, + "items": {"type": "string"} + } + ] + } + } + }, + + "labelFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Check for implementation of Annotation Collection label", + "description": "True when the object has one or more label value(s) (Section 5.1)", + "allOf": [ + {"required": ["label"]}, + {"$ref": "#/definitions/labelDefinition"} + ] + }, + + "totalDefinition": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: total (Annotation Collections)", + "description": "True when the object has no total key or has exactly one total value of type integer greater or equal to zero (Section 5.1)", + "type": "object", + "properties": + { + "total": + { + "oneOf": + [ + {"type": "integer", + "minimum": 0 }, + {"type": "array", + "minItems": 1, + "maxItems": 1, + "items": {"type": "integer", + "minimum": 0 } + } + ] + } + } + }, + + "totalFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Check for implementation of Annotation Collection total key", + "description": "True when the object has exactly one total value (Section 5.1)", + "allOf": [ + {"required": ["total"]}, + {"$ref": "#/definitions/totalDefinition"} + ] + }, + + "totalMoreThanZero": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: total more than zero (Annotation Collections)", + "description": "True when the object has exactly one total value of type integer and greater than zero (Section 5.1)", + "type": "object", + "properties": + { + "total": + { + "oneOf": + [ + {"type": "integer", + "minimum": 0, + "exclusiveMinimum": true}, + {"type": "array", + "minItems": 1, + "maxItems": 1, + "items": {"type": "integer", + "minimum": 0, + "exclusiveMinimum": true} + } + ] + } + }, + "required": [ "total" ] + }, + + "firstValidIfPresent": + { "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Validation: first value (Annotation Collection)", + "description": "True when the Annotation Collection has no first key or has 1 first key value that is string of format uri or has first key value that is an object of type AnnotationPage (Section 5.1)", + "type": "object", + "properties": {"first": + { "oneOf": [ + { + "oneOf": [ + { "$ref": "id.json#/definitions/stringUri" }, + { "$ref": "#/definitions/annotationPageTypeValueFound" } + ] + }, + { "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { + "oneOf": [ + { "$ref": "id.json#/definitions/stringUri" }, + { "$ref": "#/definitions/annotationPageTypeValueFound" } + ] + } + } + ] + } + } + }, + + "firstFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Check for implementation of Annotation Collection first key", + "description": "True when the object has exactly one first value (Section 5.1)", + "allOf": [ + {"required": ["first"]}, + {"$ref": "#/definitions/firstValidIfPresent"} + ] + }, + + "firstRequiredIfTotalMoreThanZero": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "If total greater than zero, check for implementation of Annotation Collection first key", + "description": "True when the object has no total or has total = zero or has exactly one first value (Section 5.1)", + "type": "object", + "oneOf": [ + { + "allOf": [ + { "$ref": "#/definitions/totalMoreThanZero" }, + { "$ref": "#/definitions/firstFound" } + ] + }, + { "not": { "$ref": "#/definitions/totalMoreThanZero" } } + ] + }, + + "lastValidIfPresent": + { "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Validation: last value (Annotation Collection)", + "description": "True when the Annotation Collection has no last key or has 1 last key value that is string of format uri (Section 5.1)", + "type": "object", + "properties": {"last": + { "oneOf": [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { "$ref": "id.json#/definitions/stringUri" } + } + ] + } + } + }, + + "lastFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Check for implementation of Annotation Collection last key", + "description": "True when the object has exactly one last value that is string of format uri (Section 5.1)", + "allOf": [ + {"required": ["last"]}, + {"$ref": "#/definitions/lastValidIfPresent"} + ] + }, + + "partOfValidIfPresent": + { "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Validation: partOf value (Annotation Page)", + "description": "True when the Annotation Page has no partOf key or has 1 partOf key value that is string of format uri (Section 5.2)", + "type": "object", + "properties": {"partOf": + { "oneOf": [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "$ref": "id.json#/definitions/idValueFound" } + ] + } + } + }, + + "partOfFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Check for implementation of Annotation Page partOf key", + "description": "True when the object has exactly one partOf value that is string of format uri (Section 5.2)", + "allOf": [ + {"required": ["partOf"]}, + {"$ref": "#/definitions/partOfValidIfPresent"} + ] + }, + + "nextValidIfPresent": + { "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Validation: next value (Annotation Page)", + "description": "True when the Annotation Page has no next key or has 1 next key value that is string of format uri (Section 5.2)", + "type": "object", + "properties": {"next": + { "oneOf": [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { "$ref": "id.json#/definitions/stringUri" } + } + ] + } + } + }, + + "nextFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Check for implementation of Annotation Page next key", + "description": "True when the object has exactly one next value that is string of format uri (Section 5.2)", + "allOf": [ + {"required": ["next"]}, + {"$ref": "#/definitions/nextValidIfPresent"} + ] + }, + + "prevValidIfPresent": + { "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Validation: prev value (Annotation Page)", + "description": "True when the Annotation Page has no prev key or has 1 prev key value that is string of format uri (Section 5.2)", + "type": "object", + "properties": {"prev": + { "oneOf": [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { "$ref": "id.json#/definitions/stringUri" } + } + ] + } + } + }, + + "prevFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Check for implementation of Annotation Page prev key", + "description": "True when the object has exactly one prev value that is string of format uri (Section 5.2)", + "allOf": [ + {"required": ["prev"]}, + {"$ref": "#/definitions/prevValidIfPresent"} + ] + }, + + "startIndexDefinition": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Definition: startIndex (Annotation Pages)", + "description": "True when the object has no startIndex key or has exactly one startIndex value of type integer greater or equal to zero (Section 5.2)", + "type": "object", + "properties": + { + "startIndex": + { + "oneOf": + [ + {"type": "integer", + "minimum": 0 }, + {"type": "array", + "minItems": 1, + "maxItems": 1, + "items": {"type": "integer", + "minimum": 0 } + } + ] + } + } + }, + + "startIndexFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Check for implementation of Annotation Page startIndex key", + "description": "True when the object has exactly one startIndex value (Section 5.2)", + "allOf": [ + {"required": ["startIndex"]}, + {"$ref": "#/definitions/startIndexDefinition"} + ] + }, + + "itemsFound": + { + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Check for implementation of Annotation Page items key", + "description": "True when the object has items key with value that is an array of strings of format uri and/or objects of type Annotation (Section 5.2)", + "type": "object", + "properties": + { "items": + { "type": "array", + "items": { + "oneOf":[ + { "$ref": "annotations.json#/definitions/annotationTypeValueFound" }, + { "type": "string", + "format": "uri" } + ] + } + } + }, + "required": [ "items" ] + } + + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/definitions/otherProperties.json b/tests/wpt/web-platform-tests/annotation-model/definitions/otherProperties.json index 0cf42525cb4..faa2231f302 100644 --- a/tests/wpt/web-platform-tests/annotation-model/definitions/otherProperties.json +++ b/tests/wpt/web-platform-tests/annotation-model/definitions/otherProperties.json @@ -51,16 +51,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/createdPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/createdPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -73,12 +73,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["created"] , - "$ref": "#/definitions/createdValidIfPresent" - } + "source": + { + "type": "object", + "required": ["created"] , + "$ref": "#/definitions/createdValidIfPresent" + } }, "required": ["source"] }, @@ -110,7 +110,7 @@ "title": "Collate: generated key with qualifying body/target classes", "description": "Supports implementation check of generated (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)", "oneOf": [ - {"$ref": "annotations.json#/definitions/annotationTypeValueFound"} + {"$ref": "annotations.json#/definitions/annotationTypeValueFound"} ], "allOf": [ {"$ref": "#/definitions/generatedValidIfPresent"}, @@ -164,16 +164,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/modifiedPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/modifiedPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -186,12 +186,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["modified"] , - "$ref": "#/definitions/modifiedValidIfPresent" - } + "source": + { + "type": "object", + "required": ["modified"] , + "$ref": "#/definitions/modifiedValidIfPresent" + } }, "required": ["source"] }, @@ -269,16 +269,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/creatorPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/creatorPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -291,12 +291,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["creator"] , - "$ref": "#/definitions/creatorValidIfPresent" - } + "source": + { + "type": "object", + "required": ["creator"] , + "$ref": "#/definitions/creatorValidIfPresent" + } }, "required": ["source"] }, @@ -325,16 +325,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/singleCreatorPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/singleCreatorPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -347,12 +347,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["creator"] , - "$ref": "#/definitions/creatorSingularIfPresent" - } + "source": + { + "type": "object", + "required": ["creator"] , + "$ref": "#/definitions/creatorSingularIfPresent" + } }, "required": ["source"] }, @@ -386,7 +386,7 @@ "title": "Collate: generator key with qualifying body/target classes", "description": "Supports implementation check of generator (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Section 3.3.1)", "oneOf": [ - {"$ref": "annotations.json#/definitions/annotationTypeValueFound"} + {"$ref": "annotations.json#/definitions/annotationTypeValueFound"} ], "allOf": [ {"required": ["generator"]}, @@ -474,16 +474,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/audiencePropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/audiencePropertyFound" } } + } } - } }, "required": ["items"] }, @@ -496,12 +496,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["audience"] , - "$ref": "#/definitions/audienceValidIfPresent" - } + "source": + { + "type": "object", + "required": ["audience"] , + "$ref": "#/definitions/audienceValidIfPresent" + } }, "required": ["source"] }, @@ -551,16 +551,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/accessibilityPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/accessibilityPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -573,12 +573,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["accessibility"] , - "$ref": "#/definitions/accessibilityValidIfPresent" - } + "source": + { + "type": "object", + "required": ["accessibility"] , + "$ref": "#/definitions/accessibilityValidIfPresent" + } }, "required": ["source"] }, @@ -623,16 +623,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/rightsPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/rightsPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -645,12 +645,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["rights"] , - "$ref": "#/definitions/rightsValidIfPresent" - } + "source": + { + "type": "object", + "required": ["rights"] , + "$ref": "#/definitions/rightsValidIfPresent" + } }, "required": ["source"] }, @@ -689,16 +689,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/canonicalPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/canonicalPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -711,12 +711,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["canonical"] , - "$ref": "#/definitions/canonicalValidIfPresent" - } + "source": + { + "type": "object", + "required": ["canonical"] , + "$ref": "#/definitions/canonicalValidIfPresent" + } }, "required": ["source"] }, @@ -761,16 +761,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/viaPropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/viaPropertyFound" } } + } } - } }, "required": ["items"] }, @@ -783,12 +783,12 @@ "type": "object", "properties": { - "source": - { - "type": "object", - "required": ["via"] , - "$ref": "#/definitions/viaValidIfPresent" - } + "source": + { + "type": "object", + "required": ["via"] , + "$ref": "#/definitions/viaValidIfPresent" + } }, "required": ["source"] }, @@ -831,16 +831,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/purposePropertyFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/purposePropertyFound" } } + } } - } }, "required": ["items"] }, @@ -866,11 +866,11 @@ "sourceCreatorAgentWithIdFound": { "type": "object", "properties": - { - "source": - { "$ref": "#/definitions/creatorAgentWithIdFound" } - }, - "required": ["source"] + { + "source": + { "$ref": "#/definitions/creatorAgentWithIdFound" } + }, + "required": ["source"] }, "itemCreatorAgentWithIdFound": @@ -878,16 +878,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/creatorAgentWithIdFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/creatorAgentWithIdFound" } } + } } - } }, "required": ["items"] }, @@ -954,11 +954,11 @@ "sourceCreatorAgentWithTypeFound": { "type": "object", "properties": - { - "source": - { "$ref": "#/definitions/creatorAgentWithTypeFound" } - }, - "required": ["source"] + { + "source": + { "$ref": "#/definitions/creatorAgentWithTypeFound" } + }, + "required": ["source"] }, "itemCreatorAgentWithTypeFound": @@ -966,16 +966,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/creatorAgentWithTypeFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/creatorAgentWithTypeFound" } } + } } - } }, "required": ["items"] }, @@ -1057,11 +1057,11 @@ "sourceCreatorAgentWithNameFound": { "type": "object", "properties": - { - "source": - { "$ref": "#/definitions/creatorAgentWithNameFound" } - }, - "required": ["source"] + { + "source": + { "$ref": "#/definitions/creatorAgentWithNameFound" } + }, + "required": ["source"] }, "itemCreatorAgentWithNameFound": @@ -1069,16 +1069,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/creatorAgentWithNameFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/creatorAgentWithNameFound" } } + } } - } }, "required": ["items"] }, @@ -1115,11 +1115,11 @@ "sourceCreatorAgentWithSingularNameFound": { "type": "object", "properties": - { - "source": - { "$ref": "#/definitions/creatorAgentWithSingularNameFound" } - }, - "required": ["source"] + { + "source": + { "$ref": "#/definitions/creatorAgentWithSingularNameFound" } + }, + "required": ["source"] }, "itemCreatorAgentWithSingularNameFound": @@ -1127,16 +1127,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/creatorAgentWithSingularNameFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/creatorAgentWithSingularNameFound" } } + } } - } }, "required": ["items"] }, @@ -1196,11 +1196,11 @@ "sourceCreatorAgentWithSingularNicknameFound": { "type": "object", "properties": - { - "source": - { "$ref": "#/definitions/creatorAgentWithSingularNicknameFound" } - }, - "required": ["source"] + { + "source": + { "$ref": "#/definitions/creatorAgentWithSingularNicknameFound" } + }, + "required": ["source"] }, "itemCreatorAgentWithSingularNicknameFound": @@ -1208,16 +1208,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/creatorAgentWithSingularNicknameFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/creatorAgentWithSingularNicknameFound" } } + } } - } }, "required": ["items"] }, @@ -1280,11 +1280,11 @@ "sourceCreatorAgentWithEmailFound": { "type": "object", "properties": - { - "source": - { "$ref": "#/definitions/creatorAgentWithEmailFound" } - }, - "required": ["source"] + { + "source": + { "$ref": "#/definitions/creatorAgentWithEmailFound" } + }, + "required": ["source"] }, "itemCreatorAgentWithEmailFound": @@ -1292,16 +1292,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/creatorAgentWithEmailFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/creatorAgentWithEmailFound" } } + } } - } }, "required": ["items"] }, @@ -1360,11 +1360,11 @@ "sourceCreatorAgentWithEmail_sha1Found": { "type": "object", "properties": - { - "source": - { "$ref": "#/definitions/creatorAgentWithEmail_sha1Found" } - }, - "required": ["source"] + { + "source": + { "$ref": "#/definitions/creatorAgentWithEmail_sha1Found" } + }, + "required": ["source"] }, "itemCreatorAgentWithEmail_sha1Found": @@ -1372,16 +1372,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/creatorAgentWithEmail_sha1Found" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/creatorAgentWithEmail_sha1Found" } } + } } - } }, "required": ["items"] }, @@ -1442,11 +1442,11 @@ "sourceCreatorAgentWithHomepageFound": { "type": "object", "properties": - { - "source": - { "$ref": "#/definitions/creatorAgentWithHomepageFound" } - }, - "required": ["source"] + { + "source": + { "$ref": "#/definitions/creatorAgentWithHomepageFound" } + }, + "required": ["source"] }, "itemCreatorAgentWithHomepageFound": @@ -1454,16 +1454,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/creatorAgentWithHomepageFound" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/creatorAgentWithHomepageFound" } } + } } - } }, "required": ["items"] } diff --git a/tests/wpt/web-platform-tests/annotation-model/definitions/specificResource.json b/tests/wpt/web-platform-tests/annotation-model/definitions/specificResource.json index c3d97541efd..b830f68bd2d 100644 --- a/tests/wpt/web-platform-tests/annotation-model/definitions/specificResource.json +++ b/tests/wpt/web-platform-tests/annotation-model/definitions/specificResource.json @@ -16,8 +16,8 @@ { "type": ["string", "object" ], "oneOf": [ - { "$ref": "id.json#/definitions/stringUri" }, - { "$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"} + { "$ref": "id.json#/definitions/stringUri" }, + { "$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"} ] } }, @@ -29,14 +29,14 @@ "title": "Detection: Specific Resource", "description": "True when object has exactly 1 source value and at least one of purpose, selector, state, styleClass, renderedVia, scope (Section 4)", "type": "object", - "$ref": "#/definitions/sourceDetected", + "$ref": "#/definitions/sourceDetected", "anyOf": [ - { "$ref": "otherProperties.json#/definitions/purposeRecognizedIfPresent", "required": ["purpose"] }, - { "$ref": "#/definitions/selectorDetected" }, - { "$ref": "#/definitions/stateDetected" }, + { "$ref": "otherProperties.json#/definitions/purposeRecognizedIfPresent", "required": ["purpose"] }, + { "$ref": "#/definitions/selectorDetected" }, + { "$ref": "#/definitions/stateDetected" }, { "$ref": "#/definitions/styleClassDetected" }, { "$ref": "#/definitions/renderedViaDetected" }, - { "$ref": "#/definitions/scopeDetected" } + { "$ref": "#/definitions/scopeDetected" } ] }, @@ -47,16 +47,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/specificeResourceDetected" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/specificeResourceDetected" } } + } } - } }, "required": ["items"] }, @@ -77,11 +77,11 @@ {"$ref": "id.json#/definitions/idValueFound"}, {"$ref": "#/definitions/fragmentSelectorDetected"}, {"$ref": "#/definitions/cssSelectorDetected"}, - {"$ref": "#/definitions/xpathSelectorDetected"}, + {"$ref": "#/definitions/xpathSelectorDetected"}, {"$ref": "#/definitions/textQuoteSelectorDetected"}, - {"$ref": "#/definitions/textPositionSelectorDetected"}, + {"$ref": "#/definitions/textPositionSelectorDetected"}, {"$ref": "#/definitions/dataPositionSelectorDetected"}, - {"$ref": "#/definitions/rangeSelectorDetected"}, + {"$ref": "#/definitions/rangeSelectorDetected"}, {"$ref": "#/definitions/svgSelectorDetected"} ] }, @@ -96,11 +96,11 @@ {"$ref": "id.json#/definitions/idValueFound"}, {"$ref": "#/definitions/fragmentSelectorDetected"}, {"$ref": "#/definitions/cssSelectorDetected"}, - {"$ref": "#/definitions/xpathSelectorDetected"}, + {"$ref": "#/definitions/xpathSelectorDetected"}, {"$ref": "#/definitions/textQuoteSelectorDetected"}, - {"$ref": "#/definitions/textPositionSelectorDetected"}, + {"$ref": "#/definitions/textPositionSelectorDetected"}, {"$ref": "#/definitions/dataPositionSelectorDetected"}, - {"$ref": "#/definitions/rangeSelectorDetected"}, + {"$ref": "#/definitions/rangeSelectorDetected"}, {"$ref": "#/definitions/svgSelectorDetected"} ] } @@ -114,23 +114,23 @@ "itemSelectorValidIfPresent": { - "description": "True if ALL items in the items array of object tested have no selector, or have a selector that is uri, or have a selector that has recognized value(s)", - "type": "object", - "properties": - { - "items": - { "type": "array", - "minItems": 1, - "items": - { - "oneOf": - [ - { "$ref": "id.json#/definitions/stringUri" }, - { "$ref": "#/definitions/selectorDefined" } - ] - } + "description": "True if ALL items in the items array of object tested have no selector, or have a selector that is uri, or have a selector that has recognized value(s)", + "type": "object", + "properties": + { + "items": + { "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { "$ref": "#/definitions/selectorDefined" } + ] + } + } } - } }, "selectorDetected": @@ -138,7 +138,7 @@ "title": "Detection: selector type", "description": "True when object tested has selector(s) that is(are) recognized as being one or more of the selectors described in the model (Section 4.2)", "type": "object", - "$ref": "#/definitions/selectorDefined", + "$ref": "#/definitions/selectorDefined", "required": ["selector"] }, @@ -146,9 +146,9 @@ { "type": "object", "properties": - { - "type": { "type": "string", "enum": ["FragmentSelector"] } - }, + { + "type": { "type": "string", "enum": ["FragmentSelector"] } + }, "required": ["type"] }, @@ -157,7 +157,7 @@ "title": "Detection: fragment selector", "description": "True when object is a fragment selelctor (Section 4.2.1)", "allOf": - [ + [ { "$ref": "#/definitions/fragmentSelectorTypeDetected"}, { "type": "object", @@ -168,7 +168,7 @@ }, "required": ["value"] } - ] + ] }, "conformsToPropertyFound": @@ -177,20 +177,20 @@ "description": "True when object is a fragment selelctor with a conformsTo key (Section 4.2.1)", "type": "object", "allOf": - [ + [ { "$ref": "#/definitions/fragmentSelectorDetected"}, { "required": ["conformsTo"] } - ] + ] }, "fragmentSelectorTypeValidIfPresent": { - "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", - "oneOf": - [ - { "not": { "$ref": "#/definitions/fragmentSelectorTypeDetected" } }, - { "$ref": "#/definitions/fragmentSelectorDetected" } - ] + "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", + "oneOf": + [ + { "not": { "$ref": "#/definitions/fragmentSelectorTypeDetected" } }, + { "$ref": "#/definitions/fragmentSelectorDetected" } + ] }, "cssSelectorTypeDetected": @@ -208,7 +208,7 @@ "title": "Detection: CssSelector selector", "description": "True when object is a CssSelector selelctor (Section 4.2.2)", "allOf": - [ + [ { "$ref": "#/definitions/cssSelectorTypeDetected" }, { "type": "object", @@ -218,17 +218,17 @@ }, "required": ["value"] } - ] + ] }, "cssSelectorTypeValidIfPresent": { - "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", - "oneOf": - [ - { "not": { "$ref": "#/definitions/cssSelectorTypeDetected" } }, - { "$ref": "#/definitions/cssSelectorDetected" } - ] + "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", + "oneOf": + [ + { "not": { "$ref": "#/definitions/cssSelectorTypeDetected" } }, + { "$ref": "#/definitions/cssSelectorDetected" } + ] }, "xpathSelectorTypeDetected": @@ -246,7 +246,7 @@ "title": "Detection: XPath selector", "description": "True when object is a XPath selelctor (Section 4.2.3)", "allOf": - [ + [ { "$ref": "#/definitions/xpathSelectorTypeDetected" }, { "type": "object", @@ -256,18 +256,18 @@ }, "required": ["value"] } - ] + ] }, "xpathSelectorTypeValidIfPresent": { - "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", - "oneOf": - [ - { "not": { "$ref": "#/definitions/xpathSelectorTypeDetected" } }, - { "$ref": "#/definitions/xpathSelectorDetected" } - ] + "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", + "oneOf": + [ + { "not": { "$ref": "#/definitions/xpathSelectorTypeDetected" } }, + { "$ref": "#/definitions/xpathSelectorDetected" } + ] }, "textQuoteSelectorTypeDetected": @@ -285,7 +285,7 @@ "title": "Detection: text quote selector", "description": "True when object is a text quote selelctor (Section 4.2.4)", "allOf": - [ + [ { "$ref": "#/definitions/textQuoteSelectorTypeDetected" }, { "type": "object", @@ -297,7 +297,7 @@ }, "required": ["exact"] } - ] + ] }, "prefixPropertyFound": @@ -306,10 +306,10 @@ "description": "True when object is a text quote selelctor with a prefix key (Section 4.2.4)", "type": "object", "allOf": - [ + [ { "$ref": "#/definitions/textQuoteSelectorDetected"}, { "required": ["prefix"] } - ] + ] }, "suffixPropertyFound": @@ -318,20 +318,20 @@ "description": "True when object is a text quote selelctor with a suffix key (Section 4.2.4)", "type": "object", "allOf": - [ + [ { "$ref": "#/definitions/textQuoteSelectorDetected"}, { "required": ["suffix"] } - ] + ] }, "textQuoteSelectorTypeValidIfPresent": { - "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", - "oneOf": - [ - { "not": { "$ref": "#/definitions/textQuoteSelectorTypeDetected" } }, - { "$ref": "#/definitions/textQuoteSelectorDetected" } - ] + "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", + "oneOf": + [ + { "not": { "$ref": "#/definitions/textQuoteSelectorTypeDetected" } }, + { "$ref": "#/definitions/textQuoteSelectorDetected" } + ] }, "textPositionSelectorTypeDetected": @@ -349,28 +349,28 @@ "title": "Definition: text position selector", "description": "True when object is a text position selelctor (Section 4.2.5)", "allOf": - [ - { "$ref": "#/definitions/textPositionSelectorTypeDetected" }, - { - "type": "object", - "properties": - { - "start": { "type": "integer", "minimum": 0 }, - "end": { "type": "integer","minimum": 0 } - }, - "required": ["start", "end"] - } - ] + [ + { "$ref": "#/definitions/textPositionSelectorTypeDetected" }, + { + "type": "object", + "properties": + { + "start": { "type": "integer", "minimum": 0 }, + "end": { "type": "integer","minimum": 0 } + }, + "required": ["start", "end"] + } + ] }, "textPositionSelectorTypeValidIfPresent": { - "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", - "oneOf": - [ - { "not": { "$ref": "#/definitions/textPositionSelectorTypeDetected" } }, - { "$ref": "#/definitions/textPositionSelectorDetected" } - ] + "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", + "oneOf": + [ + { "not": { "$ref": "#/definitions/textPositionSelectorTypeDetected" } }, + { "$ref": "#/definitions/textPositionSelectorDetected" } + ] }, "dataPositionSelectorTypeDetected": @@ -378,7 +378,7 @@ "type": "object", "properties": { - "type": { "type": "string", "enum": ["DataPositionSelector"] } + "type": { "type": "string", "enum": ["DataPositionSelector"] } }, "required": ["type"] }, @@ -388,28 +388,28 @@ "title": "Definition: data position selector", "description": "True when object is a data position selelctor (Section 4.2.5)", "allOf": - [ - { "$ref": "#/definitions/dataPositionSelectorTypeDetected" }, - { - "type": "object", - "properties": - { - "start": { "type": "integer", "minimum": 0 }, - "end": { "type": "integer","minimum": 0 } - }, - "required": ["start", "end"] - } - ] + [ + { "$ref": "#/definitions/dataPositionSelectorTypeDetected" }, + { + "type": "object", + "properties": + { + "start": { "type": "integer", "minimum": 0 }, + "end": { "type": "integer","minimum": 0 } + }, + "required": ["start", "end"] + } + ] }, "dataPositionSelectorTypeValidIfPresent": { - "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", - "oneOf": - [ - { "not": { "$ref": "#/definitions/dataPositionSelectorTypeDetected" } }, - { "$ref": "#/definitions/dataPositionSelectorDetected" } - ] + "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", + "oneOf": + [ + { "not": { "$ref": "#/definitions/dataPositionSelectorTypeDetected" } }, + { "$ref": "#/definitions/dataPositionSelectorDetected" } + ] }, "svgSelectorTypeDetected": @@ -417,7 +417,7 @@ "type": "object", "properties": { - "type": { "type": "string", "enum": ["SvgSelector"] } + "type": { "type": "string", "enum": ["SvgSelector"] } }, "required": ["type"] }, @@ -427,7 +427,7 @@ "title": "Detection: svg selector", "description": "True when object is a svg selelctor (Section 4.2.7)", "allOf": - [ + [ { "$ref": "#/definitions/svgSelectorTypeDetected" }, { "type": "object", @@ -437,21 +437,21 @@ "id": { "$ref": "id.json#/definitions/arraySingleStringUri" } }, "oneOf": [ - {"required": ["value"] }, - {"required": ["id"] } + {"required": ["value"] }, + {"required": ["id"] } ] } - ] + ] }, "svgSelectorTypeValidIfPresent": { - "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", - "oneOf": - [ - { "not": { "$ref": "#/definitions/svgSelectorTypeDetected" } }, - { "$ref": "#/definitions/svgSelectorDetected" } - ] + "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", + "oneOf": + [ + { "not": { "$ref": "#/definitions/svgSelectorTypeDetected" } }, + { "$ref": "#/definitions/svgSelectorDetected" } + ] }, "rangeSelectorTypeDetected": @@ -469,7 +469,7 @@ "title": "Detection: range selector", "description": "True when object is a range selelctor (Section 4.2.9)", "allOf": - [ + [ { "$ref": "#/definitions/rangeSelectorTypeDetected" }, { "type": "object", @@ -478,13 +478,13 @@ "^(startSelector|endSelector)$": { "type": "object", "oneOf": [ - {"$ref": "#/definitions/fragmentSelectorDetected"}, - {"$ref": "#/definitions/cssSelectorDetected"}, - {"$ref": "#/definitions/xpathSelectorDetected"}, + {"$ref": "#/definitions/fragmentSelectorDetected"}, + {"$ref": "#/definitions/cssSelectorDetected"}, + {"$ref": "#/definitions/xpathSelectorDetected"}, {"$ref": "#/definitions/textQuoteSelectorDetected"}, {"$ref": "#/definitions/textPositionSelectorDetected"}, - {"$ref": "#/definitions/dataPositionSelectorDetected"}, - {"$ref": "#/definitions/svgSelectorDetected"} + {"$ref": "#/definitions/dataPositionSelectorDetected"}, + {"$ref": "#/definitions/svgSelectorDetected"} ] } }, @@ -495,12 +495,12 @@ "rangeSelectorTypeValidIfPresent": { - "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", - "oneOf": - [ - { "not": { "$ref": "#/definitions/rangeSelectorTypeDetected" } }, - { "$ref": "#/definitions/rangeSelectorDetected" } - ] + "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", + "oneOf": + [ + { "not": { "$ref": "#/definitions/rangeSelectorTypeDetected" } }, + { "$ref": "#/definitions/rangeSelectorDetected" } + ] }, "stateDefined" : @@ -513,30 +513,30 @@ "state": { "oneOf": [ - { "$ref": "id.json#/definitions/stringUri" }, - { "type": "object", - "anyOf": [ - {"$ref": "id.json#/definitions/idValueFound"}, - {"$ref": "#/definitions/timeStateDetected"}, - {"$ref": "#/definitions/requestHeaderStateDetected"} - ] - }, - { - "type": "array", - "minItems": 1, - "items": - { "oneOf": [ - { "$ref": "id.json#/definitions/stringUri" }, - { "type": "object", - "anyOf": [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "object", + "anyOf": [ {"$ref": "id.json#/definitions/idValueFound"}, {"$ref": "#/definitions/timeStateDetected"}, {"$ref": "#/definitions/requestHeaderStateDetected"} + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { "oneOf": [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "object", + "anyOf": [ + {"$ref": "id.json#/definitions/idValueFound"}, + {"$ref": "#/definitions/timeStateDetected"}, + {"$ref": "#/definitions/requestHeaderStateDetected"} + ] + } ] } - ] } - } ] } } @@ -544,23 +544,23 @@ "itemStateValidIfPresent": { - "description": "True if ALL items in the items array of object tested have no state, or have a state that is uri, or have a state that has recognized value(s)", - "type": "object", - "properties": - { - "items": - { "type": "array", - "minItems": 1, - "items": - { - "oneOf": - [ - { "$ref": "id.json#/definitions/stringUri" }, - { "$ref": "#/definitions/stateDefined" } - ] - } + "description": "True if ALL items in the items array of object tested have no state, or have a state that is uri, or have a state that has recognized value(s)", + "type": "object", + "properties": + { + "items": + { "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { "$ref": "#/definitions/stateDefined" } + ] + } + } } - } }, "stateDetected": @@ -568,7 +568,7 @@ "title": "Detection: state type", "description": "True when object tested has state(s) that is(are) recognized as being one or more of the states described in the model (Section 4.3)", "type": "object", - "$ref": "#/definitions/stateDefined", + "$ref": "#/definitions/stateDefined", "required": ["state"] }, @@ -587,34 +587,34 @@ "title": "Detection: time state", "description": "True when object is a time state (Section 4.3.1)", "allOf": - [ + [ { "$ref": "#/definitions/timeStateTypeDetected" }, { "type": "object", "properties": { - "sourceDate": - { "oneOf": [ - { "type": "string", - "format": "date-time"}, - { "type": "array", - "minItems": 1, - "items": - {"type": "string", "format": "date-time"} - } - ] - }, - "sourceDateStart": { "type": "string", "format": "date-time"}, - "sourceDateEnd": { "type": "string", "format": "date-time"}, - "cached": { "type": "string", "format": "uri"} + "sourceDate": + { "oneOf": [ + { "type": "string", + "format": "date-time"}, + { "type": "array", + "minItems": 1, + "items": + {"type": "string", "format": "date-time"} + } + ] + }, + "sourceDateStart": { "type": "string", "format": "date-time"}, + "sourceDateEnd": { "type": "string", "format": "date-time"}, + "cached": { "type": "string", "format": "uri"} }, "oneOf": - [ - { "required": ["sourceDate"] }, - { "required": ["sourceDateStart", "sourceDateEnd"] } - ], + [ + { "required": ["sourceDate"] }, + { "required": ["sourceDateStart", "sourceDateEnd"] } + ], "not": - { "required": [ "sourceDate", "sourceDateStart", "sourceDateEnd" ] } + { "required": [ "sourceDate", "sourceDateStart", "sourceDateEnd" ] } } ] }, @@ -625,20 +625,20 @@ "description": "True when object is a time state with a cached key (Section 4.3.1)", "type": "object", "allOf": - [ + [ { "$ref": "#/definitions/timeStateDetected"}, { "required": ["cached"] } - ] + ] }, "timeStateTypeValidIfPresent": { - "description": "True if State Type not detected (i.e., not present), or if both Type and State detected (i.e., State constraints met); note, State cannot be detected if State Type not detected.", - "oneOf": - [ - { "not": { "$ref": "#/definitions/timeStateTypeDetected" } }, - { "$ref": "#/definitions/timeStateDetected" } - ] + "description": "True if State Type not detected (i.e., not present), or if both Type and State detected (i.e., State constraints met); note, State cannot be detected if State Type not detected.", + "oneOf": + [ + { "not": { "$ref": "#/definitions/timeStateTypeDetected" } }, + { "$ref": "#/definitions/timeStateDetected" } + ] }, "requestHeaderStateTypeDetected": @@ -656,27 +656,27 @@ "title": "Detection: request header state", "description": "True when object is a request header state (Section 4.3.2)", "allOf": - [ + [ { "$ref": "#/definitions/requestHeaderStateTypeDetected" }, { "type": "object", "properties": { - "value": { "type": "string"} + "value": { "type": "string"} }, "required": ["value"] } - ] + ] }, "requestHeaderStateTypeValidIfPresent": { - "description": "True if State Type not detected (i.e., not present), or if both Type and State detected (i.e., State constraints met); note, State cannot be detected if State Type not detected.", - "oneOf": - [ - { "not": { "$ref": "#/definitions/requestHeaderStateTypeDetected" } }, - { "$ref": "#/definitions/requestHeaderStateDetected" } - ] + "description": "True if State Type not detected (i.e., not present), or if both Type and State detected (i.e., State constraints met); note, State cannot be detected if State Type not detected.", + "oneOf": + [ + { "not": { "$ref": "#/definitions/requestHeaderStateTypeDetected" } }, + { "$ref": "#/definitions/requestHeaderStateDetected" } + ] }, "refinedByDefined": @@ -695,14 +695,14 @@ {"$ref": "id.json#/definitions/idValueFound"}, {"$ref": "#/definitions/fragmentSelectorDetected"}, {"$ref": "#/definitions/cssSelectorDetected"}, - {"$ref": "#/definitions/xpathSelectorDetected"}, + {"$ref": "#/definitions/xpathSelectorDetected"}, {"$ref": "#/definitions/textQuoteSelectorDetected"}, - {"$ref": "#/definitions/textPositionSelectorDetected"}, + {"$ref": "#/definitions/textPositionSelectorDetected"}, {"$ref": "#/definitions/dataPositionSelectorDetected"}, - {"$ref": "#/definitions/rangeSelectorDetected"}, + {"$ref": "#/definitions/rangeSelectorDetected"}, {"$ref": "#/definitions/svgSelectorDetected"}, - {"$ref": "#/definitions/timeStateDetected"}, - {"$ref": "#/definitions/requestHeaderStateDetected"} + {"$ref": "#/definitions/timeStateDetected"}, + {"$ref": "#/definitions/requestHeaderStateDetected"} ] }, { @@ -716,14 +716,14 @@ {"$ref": "id.json#/definitions/idValueFound"}, {"$ref": "#/definitions/fragmentSelectorDetected"}, {"$ref": "#/definitions/cssSelectorDetected"}, - {"$ref": "#/definitions/xpathSelectorDetected"}, + {"$ref": "#/definitions/xpathSelectorDetected"}, {"$ref": "#/definitions/textQuoteSelectorDetected"}, - {"$ref": "#/definitions/textPositionSelectorDetected"}, + {"$ref": "#/definitions/textPositionSelectorDetected"}, {"$ref": "#/definitions/dataPositionSelectorDetected"}, - {"$ref": "#/definitions/rangeSelectorDetected"}, + {"$ref": "#/definitions/rangeSelectorDetected"}, {"$ref": "#/definitions/svgSelectorDetected"}, - {"$ref": "#/definitions/timeStateDetected"}, - {"$ref": "#/definitions/requestHeaderStateDetected"} + {"$ref": "#/definitions/timeStateDetected"}, + {"$ref": "#/definitions/requestHeaderStateDetected"} ] } ] @@ -736,51 +736,51 @@ "checkForRefinedBy": { - "description": "True if no state or selector, if no refinedBy, or if correct refinedBy", - "type": "object", - "patternProperties": - { - "^(state|selector)$": + "description": "True if no state or selector, if no refinedBy, or if correct refinedBy", + "type": "object", + "patternProperties": + { + "^(state|selector)$": {"oneOf": - [ - { "$ref": "id.json#/definitions/stringUri" }, - { "type": "object", - "$ref": "#/definitions/refinedByDefined" }, - { "type": "array", - "minItems": 1, - "items": - {"oneOf": - [ - { "$ref": "id.json#/definitions/stringUri" }, - { "type": "object", - "$ref": "#/definitions/refinedByDefined" } - ] - } - } - ] - } + [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "object", + "$ref": "#/definitions/refinedByDefined" }, + { "type": "array", + "minItems": 1, + "items": + {"oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "object", + "$ref": "#/definitions/refinedByDefined" } + ] + } + } + ] + } } }, "itemRefinedByValidIfPresent": { - "description": "True if items in the items array of object tested have no refinedBy, or have a refinedBy that is uri, or have a refinedBy that has recognized value(s)", - "type": "object", - "properties": - { - "items": - { "type": "array", - "minItems": 1, - "items": - { - "oneOf": - [ - { "$ref": "id.json#/definitions/stringUri" }, - { "$ref": "#/definitions/checkForRefinedBy" } - ] - } + "description": "True if items in the items array of object tested have no refinedBy, or have a refinedBy that is uri, or have a refinedBy that has recognized value(s)", + "type": "object", + "properties": + { + "items": + { "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { "$ref": "#/definitions/checkForRefinedBy" } + ] + } + } } - } }, "refinedByDetected": @@ -789,22 +789,22 @@ "description": "True when object tested has selector or state that has refinedBy(s) that is(are) recognized as being one or more of the refinedBys described in the model (Section 4.2)", "type": "object", "anyOf": - [ - { "properties": - { "state" : { "$ref ": "#/definitions/refinedByWithinStateSelector" } }, - "required": ["state"] - }, - { "properties": - { "selector" : { "$ref ": "#/definitions/refinedByWithinStateSelector" } }, - "required": ["selector"] - } - ] + [ + { "properties": + { "state" : { "$ref ": "#/definitions/refinedByWithinStateSelector" } }, + "required": ["state"] + }, + { "properties": + { "selector" : { "$ref ": "#/definitions/refinedByWithinStateSelector" } }, + "required": ["selector"] + } + ] }, "refinedByWithinStateSelector": { - "oneOf": - [ + "oneOf": + [ { "type": "object", "$ref": "#/definitions/refinedByDefined", "required": ["refinedBy"] @@ -813,16 +813,16 @@ "minItems": 1, "not": { - "items": + "items": {"not": - { "type": "object", - "$ref": "#/definitions/refinedByDefined", - "required": ["refinedBy"] - } + { "type": "object", + "$ref": "#/definitions/refinedByDefined", + "required": ["refinedBy"] + } } } } - ] + ] }, "styleClassDefinition": @@ -830,22 +830,22 @@ "title": "Definition: styleClass property value", "description": "True when the object has no styleClass property or has a styleClass property that appears with source and that is a string value or array of string values (Section 4.4)", "properties": - { - "styleClass": - { - "oneOf": - [ - { "type": "string" }, - { "type": "array", - "minItems": 1, - "items": { "type": "string" } } - ] - } - }, - "dependencies": - { - "styleClass": ["source"] - } + { + "styleClass": + { + "oneOf": + [ + { "type": "string" }, + { "type": "array", + "minItems": 1, + "items": { "type": "string" } } + ] + } + }, + "dependencies": + { + "styleClass": ["source"] + } }, "styleClassDetected": @@ -854,8 +854,8 @@ "description": "Supports implementation check of styleClass (if/when) used on Specific Resources (Sections 4.4)", "type": "object", "allOf": [ - { "$ref": "#/definitions/styleClassDefinition" }, - { "required": ["styleClass"] } + { "$ref": "#/definitions/styleClassDefinition" }, + { "required": ["styleClass"] } ] }, @@ -867,16 +867,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/styleClassDetected" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/styleClassDetected" } } + } } - } }, "required": ["items"] }, @@ -914,9 +914,9 @@ "title": "Collate: renderedVia key with qualifying body/target classes", "description": "Supports implementation check of renderedVia (if/when) used on Specific Resources (Sections 4.4)", "allOf": [ - { "$ref": "#/definitions/sourceDetected" }, - { "required": ["renderedVia"] }, - { "$ref": "#/definitions/renderedViaDefinition" } + { "$ref": "#/definitions/sourceDetected" }, + { "required": ["renderedVia"] }, + { "$ref": "#/definitions/renderedViaDefinition" } ] }, @@ -928,16 +928,16 @@ "type": "object", "properties": { - "items": - { - "type": "array", - "minItems": 1, - "not": + "items": { - "items": - { "not": { "$ref": "#/definitions/renderedViaDetected" } } + "type": "array", + "minItems": 1, + "not": + { + "items": + { "not": { "$ref": "#/definitions/renderedViaDetected" } } + } } - } }, "required": ["items"] }, @@ -966,164 +966,163 @@ { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Collate: scope key with qualifying body/target classes", "description": "Supports implementation check of scope (if/when) used on Specific Resource Body (Sections 4.6)", - "$ref": "#/definitions/sourceDetected", "allOf": [ - {"required": ["scope"]}, - {"$ref": "#/definitions/scopeDefinition"} + {"required": ["scope"]}, + {"$ref": "#/definitions/scopeDefinition"} ] }, - "sourceWithCreated": - { - "description": "True if no source, or source is uri, or source is object that does not have created key, or if source is object that has only 1 created key of date-time format", - "type": "object", - "properties": - { - "source": + "sourceWithCreated": { - "oneOf": - [ - { "$ref": "id.json#/definitions/arraySingleStringUri" }, - { "$ref": "otherProperties.json#/definitions/createdValidIfPresent" } - ] - } - } - }, + "description": "True if no source, or source is uri, or source is object that does not have created key, or if source is object that has only 1 created key of date-time format", + "type": "object", + "properties": + { + "source": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "$ref": "otherProperties.json#/definitions/createdValidIfPresent" } + ] + } + } + }, - "sourceWithModified": - { - "description": "True if no source, or source is uri, or source is object that does not have modified key, or if source is object that has only 1 modified key of date-time format", - "type": "object", - "properties": - { - "source": + "sourceWithModified": { - "oneOf": - [ - { "$ref": "id.json#/definitions/arraySingleStringUri" }, - { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent" } - ] - } - } - }, + "description": "True if no source, or source is uri, or source is object that does not have modified key, or if source is object that has only 1 modified key of date-time format", + "type": "object", + "properties": + { + "source": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent" } + ] + } + } + }, - "sourceWithRights": - { - "description": "True if no source, or source is uri, or source is object that does not have rights key, or if source is object that has rights key with all values of uri format", - "type": "object", - "properties": - { - "source": + "sourceWithRights": { - "oneOf": - [ - { "$ref": "id.json#/definitions/arraySingleStringUri" }, - { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" } - ] - } - } - }, + "description": "True if no source, or source is uri, or source is object that does not have rights key, or if source is object that has rights key with all values of uri format", + "type": "object", + "properties": + { + "source": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" } + ] + } + } + }, - "sourceWithCanonical": - { - "description": "True if no source, or source is uri, or source is object that does not have canonical key, or if source is object that has only 1 canonical key of uri format", - "type": "object", - "properties": - { - "source": + "sourceWithCanonical": { - "oneOf": - [ - { "$ref": "id.json#/definitions/arraySingleStringUri" }, - { "$ref": "otherProperties.json#/definitions/canonicalValidIfPresent" } - ] - } - } - }, + "description": "True if no source, or source is uri, or source is object that does not have canonical key, or if source is object that has only 1 canonical key of uri format", + "type": "object", + "properties": + { + "source": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "$ref": "otherProperties.json#/definitions/canonicalValidIfPresent" } + ] + } + } + }, - "sourceWithVia": - { - "description": "True if no source, or source is uri, or source is object that does not have via key, or if source is object that has via key with all values of uri format", - "type": "object", - "properties": - { - "source": + "sourceWithVia": { - "oneOf": - [ - { "$ref": "id.json#/definitions/arraySingleStringUri" }, - { "$ref": "otherProperties.json#/definitions/viaValidIfPresent" } - ] - } - } - }, + "description": "True if no source, or source is uri, or source is object that does not have via key, or if source is object that has via key with all values of uri format", + "type": "object", + "properties": + { + "source": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "$ref": "otherProperties.json#/definitions/viaValidIfPresent" } + ] + } + } + }, - "sourceWithTextDirection": - { - "description": "True if no source, or source is uri, or source is object that does not have textDirection key, or if source is object that has only 1 textDirectoin key, one of ltr, rtl, auto", - "type": "object", - "properties": - { - "source": + "sourceWithTextDirection": { - "oneOf": - [ - { "$ref": "id.json#/definitions/arraySingleStringUri" }, - { "$ref": "bodyTarget.json#/definitions/textDirectionValidIfPresent" } - ] - } - } - }, + "description": "True if no source, or source is uri, or source is object that does not have textDirection key, or if source is object that has only 1 textDirectoin key, one of ltr, rtl, auto", + "type": "object", + "properties": + { + "source": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "$ref": "bodyTarget.json#/definitions/textDirectionValidIfPresent" } + ] + } + } + }, - "specificResourceWithItems" : - { - "description": "True if both source and items keys are present.", - "allOf": - [ - { "$ref": "#/definitions/sourceDetected"}, - { "required": [ "items" ] } - ] - }, + "specificResourceWithItems" : + { + "description": "True if both source and items keys are present.", + "allOf": + [ + { "$ref": "#/definitions/sourceDetected"}, + { "required": [ "items" ] } + ] + }, "itemSRWithItems": { "type": "object", "properties": - { - "items": { - "type": "array", - "minItems": 1, - "not": - { "items": {"not": { "$ref": "#/definitions/specificResourceWithItems" } } } - } - }, + { + "items": { + "type": "array", + "minItems": 1, + "not": + { "items": {"not": { "$ref": "#/definitions/specificResourceWithItems" } } } + } + }, "required": ["items"] }, - "specificResourceWithValue" : - { - "description": "True if both source and value keys are present.", - "allOf": - [ - { "$ref": "#/definitions/sourceDetected"}, - { "required": [ "value" ] } - ] - }, + "specificResourceWithValue" : + { + "description": "True if both source and value keys are present.", + "allOf": + [ + { "$ref": "#/definitions/sourceDetected"}, + { "required": [ "value" ] } + ] + }, "itemSRWithValue": { "type": "object", "properties": - { - "items": { - "type": "array", - "minItems": 1, - "not": - { "items": {"not": { "$ref": "#/definitions/specificResourceWithValue" } } } - } - }, + { + "items": { + "type": "array", + "minItems": 1, + "not": + { "items": {"not": { "$ref": "#/definitions/specificResourceWithValue" } } } + } + }, "required": ["items"] } } -} +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/scripts/JSONtest.js b/tests/wpt/web-platform-tests/annotation-model/scripts/JSONtest.js index 825522e9f42..3ee49b86a81 100644 --- a/tests/wpt/web-platform-tests/annotation-model/scripts/JSONtest.js +++ b/tests/wpt/web-platform-tests/annotation-model/scripts/JSONtest.js @@ -29,6 +29,7 @@ function JSONtest(params) { this.Params = null; // paramaters passed in this.Promise = null; // master Promise that resolves when intialization is complete this.Properties = null; // testharness_properties from the opening window + this.SkipFailures = []; // list of assertionType values that should be skipped if their test would fail this.Test = null; // test being run this.AssertionCounter = 0;// keeps track of which assertion is being processed @@ -122,6 +123,10 @@ function JSONtest(params) { this.DescriptionText = test.description; } + if (test.hasOwnProperty("skipFailures") && Array.isArray(test.skipFailures) ) { + this.SkipFailures = test.skipFailures; + } + if (test.content) { // we have content if (typeof test.content === "string") { @@ -407,7 +412,7 @@ JSONtest.prototype = { var message = assert.hasOwnProperty('errorMessage') ? assert.errorMessage : "Result was not " + expected; var type = assert.hasOwnProperty('assertionType') ? - assert.assertionType : "must" ; + assert.assertionType.toLowerCase() : "must" ; if (!typeMap.hasOwnProperty(type)) { type = "must"; } @@ -507,39 +512,42 @@ JSONtest.prototype = { return ; } - if (testAction !== 'continue') { + if (testAction === 'continue') { // a previous test told us to not run this test; skip it - test(function() { }, "SKIPPED: " + assert.title); - } else { + // test(function() { }, "SKIPPED: " + assert.title); // start an actual sub-test - test(function() { - var valid = validate(content) ; + var valid = validate(content) ; - var result = this.determineResult(assert, valid) ; + var theResult = this.determineResult(assert, valid) ; - // remember the result - theResults.push(result); + // remember the result + theResults.push(theResult); - var newAction = this.determineAction(assert, result) ; - // next time around we will use this action - testAction = newAction; + var newAction = this.determineAction(assert, theResult) ; + // next time around we will use this action + testAction = newAction; - var err = ";"; - if (validate.errors !== null) { - err = "; Errors: " + this.ajv.errorsText(validate.errors) + ";" ; - } - if (testAction === 'abort') { - err += "; Aborting execution of remaining assertions;"; - } else if (testAction === 'skip') { - err += "; Skipping execution of remaining assertions at level " + level + ";"; - } - if (result === false) { - // test result was unexpected; use message - assert_true(result, typeMap[type] + message + err); - } else { - assert_true(result, err) ; - } - }.bind(this), "" + level + ":" + (num+1) + " " + assert.title); + // only run the test if we are NOT skipping fails for some types + // or the result is expected + if ( theResult === true || !this.SkipFailures.includes(type) ) { + test(function() { + var err = ";"; + if (validate.errors !== null && !assert.hasOwnProperty("errorMessage")) { + err = "; Errors: " + this.ajv.errorsText(validate.errors) + ";" ; + } + if (testAction === 'abort') { + err += "; Aborting execution of remaining assertions;"; + } else if (testAction === 'skip') { + err += "; Skipping execution of remaining assertions at level " + level + ";"; + } + if (theResult === false) { + // test result was unexpected; use message + assert_true(theResult, typeMap[type] + message + err); + } else { + assert_true(theResult, err) ; + } + }.bind(this), "" + level + ":" + (num+1) + " " + assert.title); + } } }.bind(this)); } diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/annotation.options.headers b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/annotation.options.headers index e07c9bce15b..48973d74597 100755 --- a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/annotation.options.headers +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/annotation.options.headers @@ -1,3 +1,2 @@ -Content-Type: text/plain Allow: GET,HEAD,OPTIONS,DELETE,PUT Vary: Accept diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/collection.options.headers b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/collection.options.headers index 1280684795e..7bc301662c6 100755 --- a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/collection.options.headers +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/collection.options.headers @@ -1,3 +1,2 @@ -Content-Type: text/plain Allow: POST,GET,OPTIONS,HEAD,DELETE,PUT Vary: Accept, Prefer diff --git a/tests/wpt/web-platform-tests/annotation-protocol/server/server-manual.html b/tests/wpt/web-platform-tests/annotation-protocol/server/server-manual.html index 3d8d1ba160b..3a04a599175 100644 --- a/tests/wpt/web-platform-tests/annotation-protocol/server/server-manual.html +++ b/tests/wpt/web-platform-tests/annotation-protocol/server/server-manual.html @@ -63,16 +63,22 @@ function request(method, url, headers, content) { resp.text = d; // we have it; what is it? var type = xhr.getResponseHeader('Content-Type'); - resp.type = type.split(';')[0]; - if (resp.type === MEDIA_TYPE) { - try { - d = JSON.parse(d); - resp.body = d; - } - catch(err) { - resp.body = null; + if (type) { + resp.type = type.split(';')[0]; + if (resp.type === MEDIA_TYPE) { + try { + d = JSON.parse(d); + resp.body = d; + } + catch(err) { + resp.body = null; + } } + } else { + resp.type = null; + resp.body = null; } + } resolve(resp); }; @@ -167,6 +173,9 @@ function makePromiseTests( thennable, criteria ) { } function runTests( container_url, annotation_url ) { + // trim whitespace from incoming variables + container_url = container_url.trim(); + annotation_url = annotation_url.trim(); // Section 4 has a requirement that the URL end in a slash, so... // ensure the url has a length @@ -323,7 +332,7 @@ function runTests( container_url, annotation_url ) { // SHOULD tests test(function() { - assert_equals("https", container_url.toLowerCase().substr(0,5), "Server is not using HTTPS"); + assert_equals(container_url.toLowerCase().substr(0,5), "https", "Server is not using HTTPS"); }, "Annotation server SHOULD use HTTPS rather than HTTP"); var thePrefRequest = request("GET", container_url, diff --git a/tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py b/tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py index e74e323f794..cbfc4034ca2 100755 --- a/tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py +++ b/tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py @@ -204,9 +204,6 @@ def collection_options(request, response): for header, value in load_headers_from_file(headers_file): response.headers.append(header, value) - response.content = "Collection Options\n"; - - def page(request, response): page_json = { "@context": "http://www.w3.org/ns/anno.jsonld", @@ -312,7 +309,6 @@ def annotation_head(request, response): response.status = 404 add_cors_headers(response) - response.content = "Annotation Options\n" @wptserve.handlers.handler def annotation_options(request, response): @@ -331,8 +327,6 @@ def annotation_options(request, response): response.status = 404 add_cors_headers(response) - response.content = "Annotation Options\n" - def create_annotation(body): # TODO: verify media type is JSON of some kind (at least) @@ -409,6 +403,8 @@ def annotation_delete(request, response): if __name__ == '__main__': print 'http://' + myhost + ':{0}/'.format(port) + print 'container URI is http://' + myhost + ':{0}/'.format(port) + "/annotations/" + print 'example annotation URI is http://' + myhost + ':{0}/'.format(port) + "/annotations/anno1.json" routes = [ ("GET", "", wptserve.handlers.file_handler), diff --git a/tests/wpt/web-platform-tests/bluetooth/bluetooth-helpers.js b/tests/wpt/web-platform-tests/bluetooth/bluetooth-helpers.js new file mode 100644 index 00000000000..14ed7d66d85 --- /dev/null +++ b/tests/wpt/web-platform-tests/bluetooth/bluetooth-helpers.js @@ -0,0 +1,147 @@ +'use strict'; + +// Bluetooth UUID constants: +// Services: +var blacklist_test_service_uuid = "611c954a-263b-4f4a-aab6-01ddb953f985"; +var request_disconnection_service_uuid = "01d7d889-7451-419f-aeb8-d65e7b9277af"; +// Characteristics: +var blacklist_exclude_reads_characteristic_uuid = "bad1c9a2-9a5b-4015-8b60-1579bbbf2135"; +var request_disconnection_characteristic_uuid = "01d7d88a-7451-419f-aeb8-d65e7b9277af"; +// Descriptors: +var blacklist_exclude_reads_descriptor_uuid = "aaaaaaaa-aaaa-1181-0510-810819516110"; +var blacklist_descriptor_uuid = "07711111-6104-0970-7011-1107105110aaa"; +var characteristic_user_description_uuid = "00002901-0000-1000-8000-00805f9b34fb"; + +// Bluetooth Adapter types: +var adapter_type = { + not_present: 'NotPresentAdapter', + not_powered: 'NotPoweredAdapter', + empty: 'EmptyAdapter', + heart_rate: 'HeartRateAdapter', + two_heart_rate: 'TwoHeartRateServicesAdapter', + empty_name_heart_rate: 'EmptyNameHeartRateAdapter', + no_name_heart_rate: 'NoNameHeartRateAdapter', + glucose_heart_rate: 'GlucoseHeartRateAdapter', + unicode_device: 'UnicodeDeviceAdapter', + blacklist: 'BlacklistTestAdapter', + missing_characteristic_heart_rate: 'MissingCharacteristicHeartRateAdapter', + missing_service_heart_rate: 'MissingServiceHeartRateAdapter', + missing_descriptor_heart_rate: 'MissingDescriptorHeartRateAdapter' +}; + +var mock_device_name = { + heart_rate: 'Heart Rate Device', + glucose: 'Glucose Device' +}; + +var wrong = { + name: 'wrong_name', + service: 'wrong_service' +}; + +// Sometimes we need to test that using either the name, alias, or UUID +// produces the same result. The following objects help us do that. +var generic_access = { + alias: 0x1800, + name: 'generic_access', + uuid: '00001800-0000-1000-8000-00805f9b34fb' +}; + +var device_name = { + alias: 0x2a00, + name: 'gap.device_name', + uuid: '00002a00-0000-1000-8000-00805f9b34fb' +}; + +var reconnection_address = { + alias: 0x2a03, + name: 'gap.reconnection_address', + uuid: '00002a03-0000-1000-8000-00805f9b34fb' +}; + +var heart_rate = { + alias: 0x180d, + name: 'heart_rate', + uuid: '0000180d-0000-1000-8000-00805f9b34fb' +}; + +var heart_rate_measurement = { + alias: 0x2a37, + name: 'heart_rate_measurement', + uuid: '00002a37-0000-1000-8000-00805f9b34fb' +}; + +var body_sensor_location = { + alias: 0x2a38, + name: 'body_sensor_location', + uuid: '00002a38-0000-1000-8000-00805f9b34fb' +}; + +var glucose = { + alias: 0x1808, + name: 'glucose', + uuid: '00001808-0000-1000-8000-00805f9b34fb' +}; + +var battery_service = { + alias: 0x180f, + name: 'battery_service', + uuid: '0000180f-0000-1000-8000-00805f9b34fb' +}; + +var battery_level = { + alias: 0x2a19, + name: 'battery_level', + uuid: '00002a19-0000-1000-8000-00805f9b34fb' +}; + +var tx_power = { + alias: 0x1804, + name: 'tx_power', + uuid: '00001804-0000-1000-8000-00805f9b34fb' +}; + +var human_interface_device = { + alias: 0x1812, + name: 'human_interface_device', + uuid: '00001812-0000-1000-8000-00805f9b34fb' +}; + +var device_information = { + alias: 0x180a, + name: 'device_information', + uuid: '0000180a-0000-1000-8000-00805f9b34fb' +}; + +var peripherial_privacy_flag = { + alias: 0x2a02, + name: 'gap.peripheral_privacy_flag', + uuid: '00002a02-0000-1000-8000-00805f9b34fb' +}; + +var serial_number_string = { + alias: 0x2a25, + name: 'serial_number_string', + uuid: '00002a25-0000-1000-8000-00805f9b34fb' +}; + +var client_characteristic_configuration = { + alias: 0x2902, + name: 'gatt.client_characteristic_configuration', + uuid: '00002902-0000-1000-8000-00805f9b34fb' +}; + +var number_of_digitals = { + alias: 0x2909, + name: 'number_of_digitals', + uuid: '00002909-0000-1000-8000-00805f9b34fb' +}; + +// Helper function for converting strings to an array of bytes. +function asciiToDecimal(bytestr) { + var result = []; + for(var i = 0; i < bytestr.length; i++) { + result[i] = bytestr.charCodeAt(i) ; + } + return result; +} diff --git a/tests/wpt/web-platform-tests/check_stability.py b/tests/wpt/web-platform-tests/check_stability.py new file mode 100644 index 00000000000..7b707212158 --- /dev/null +++ b/tests/wpt/web-platform-tests/check_stability.py @@ -0,0 +1,599 @@ +from __future__ import print_function + +import argparse +import json +import logging +import os +import re +import stat +import subprocess +import sys +import tarfile +import traceback +import zipfile +from cStringIO import StringIO +from collections import defaultdict +from urlparse import urljoin + +import requests + +BaseHandler = None +LogActionFilter = None +LogHandler = None +LogLevelFilter = None +StreamHandler = None +TbplFormatter = None +reader = None +wptcommandline = None +wptrunner = None + + +logger = logging.getLogger(os.path.splitext(__file__)[0]) + + +def do_delayed_imports(): + global BaseHandler + global LogLevelFilter + global StreamHandler + global TbplFormatter + global reader + global wptcommandline + global wptrunner + from mozlog import reader + from mozlog.formatters import TbplFormatter + from mozlog.handlers import BaseHandler, LogLevelFilter, StreamHandler + from wptrunner import wptcommandline, wptrunner + setup_log_handler() + setup_action_filter() + + +def setup_logging(): + handler = logging.StreamHandler(sys.stdout) + formatter = logging.Formatter(logging.BASIC_FORMAT, None) + handler.setFormatter(formatter) + logger.addHandler(handler) + logger.setLevel(logging.DEBUG) + +setup_logging() + + +def setup_action_filter(): + global LogActionFilter + + class LogActionFilter(BaseHandler): + """Handler that filters out messages with action of log and a level + lower than some specified level. + + :param inner: Handler to use for messages that pass this filter + :param level: Minimum log level to process + """ + def __init__(self, inner, actions): + BaseHandler.__init__(self, inner) + self.inner = inner + self.actions = actions + + def __call__(self, item): + if item["action"] in self.actions: + return self.inner(item) + + +class TravisFold(object): + def __init__(self, name): + self.name = name + + def __enter__(self): + print("travis_fold:start:%s" % self.name, file=sys.stderr) + + def __exit__(self, type, value, traceback): + print("travis_fold:end:%s" % self.name, file=sys.stderr) + + +class GitHub(object): + def __init__(self, org, repo, token): + self.token = token + self.headers = {"Accept": "application/vnd.github.v3+json"} + self.auth = (self.token, "x-oauth-basic") + self.org = org + self.repo = repo + self.base_url = "https://api.github.com/repos/%s/%s/" % (org, repo) + + def _headers(self, headers): + if headers is None: + headers = {} + rv = self.headers.copy() + rv.update(headers) + return rv + + def post(self, url, data, headers=None): + logger.debug("POST %s" % url) + if data is not None: + data = json.dumps(data) + resp = requests.post( + url, + data=data, + headers=self._headers(headers), + auth=self.auth + ) + resp.raise_for_status() + return resp + + def get(self, url, headers=None): + logger.debug("GET %s" % url) + resp = requests.get( + url, + headers=self._headers(headers), + auth=self.auth + ) + resp.raise_for_status() + return resp + + def post_comment(self, issue_number, body): + url = urljoin(self.base_url, "issues/%s/comments" % issue_number) + return self.post(url, {"body": body}) + + def releases(self): + url = urljoin(self.base_url, "releases/latest") + return self.get(url) + + +class GitHubCommentHandler(logging.Handler): + def __init__(self, github, pull_number): + logging.Handler.__init__(self) + self.github = github + self.pull_number = pull_number + self.log_data = [] + + def emit(self, record): + try: + msg = self.format(record) + self.log_data.append(msg) + except Exception: + self.handleError(record) + + def send(self): + self.github.post_comment(self.pull_number, "\n".join(self.log_data)) + self.log_data = [] + + +class Browser(object): + product = None + + def __init__(self, github_token): + self.github_token = github_token + + +class Firefox(Browser): + product = "firefox" + + def install(self): + call("pip", "install", "-r", "w3c/wptrunner/requirements_firefox.txt") + resp = get("https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/firefox-52.0a1.en-US.linux-x86_64.tar.bz2") + untar(resp.raw) + + if not os.path.exists("profiles"): + os.mkdir("profiles") + with open(os.path.join("profiles", "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) + call("pip", "install", "-r", os.path.join("w3c", "wptrunner", "requirements_firefox.txt")) + + def _latest_geckodriver_version(self): + # 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): + version = self._latest_geckodriver_version() + logger.debug("Latest geckodriver release %s" % version) + url = "https://github.com/mozilla/geckodriver/releases/download/%s/geckodriver-%s-linux64.tar.gz" % (version, version) + untar(get(url).raw) + + def wptrunner_args(self, root): + return { + "product": "firefox", + "binary": "%s/firefox/firefox" % root, + "certutil_binary": "certutil", + "webdriver_binary": "%s/geckodriver" % root, + "prefs_root": "%s/profiles" % root, + } + + +class Chrome(Browser): + product = "chrome" + + def install(self): + latest = get("https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2FLAST_CHANGE?alt=media").text.strip() + url = "https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%%2F%s%%2Fchrome-linux.zip?alt=media" % latest + unzip(get(url).raw) + logger.debug(call("ls", "-lhrt", "chrome-linux")) + call("pip", "install", "-r", os.path.join("w3c", "wptrunner", "requirements_chrome.txt")) + + def install_webdriver(self): + latest = get("http://chromedriver.storage.googleapis.com/LATEST_RELEASE").text.strip() + url = "http://chromedriver.storage.googleapis.com/%s/chromedriver_linux64.zip" % latest + unzip(get(url).raw) + st = os.stat('chromedriver') + os.chmod('chromedriver', st.st_mode | stat.S_IEXEC) + + def wptrunner_args(self, root): + return { + "product": "chrome", + "binary": "%s/chrome-linux/chrome" % root, + "webdriver_binary": "%s/chromedriver" % root, + "test_types": ["testharness", "reftest"] + } + + +def get(url): + logger.debug("GET %s" % url) + resp = requests.get(url, stream=True) + resp.raise_for_status() + return resp + + +def call(*args): + logger.debug("%s" % " ".join(args)) + return subprocess.check_output(args) + + +def get_git_cmd(repo_path): + def git(cmd, *args): + full_cmd = ["git", cmd] + list(args) + try: + return subprocess.check_output(full_cmd, cwd=repo_path, stderr=subprocess.STDOUT) + 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): + try: + fileobj.seek(fileobj.tell()) + except Exception: + return StringIO(fileobj.read()) + else: + return fileobj + + +def untar(fileobj): + logger.debug("untar") + fileobj = seekable(fileobj) + with tarfile.open(fileobj=fileobj) as tar_data: + tar_data.extractall() + + +def unzip(fileobj): + logger.debug("unzip") + fileobj = seekable(fileobj) + with zipfile.ZipFile(fileobj) as zip_data: + for info in zip_data.infolist(): + zip_data.extract(info) + perm = info.external_attr >> 16 & 0x1FF + os.chmod(info.filename, perm) + + +def setup_github_logging(args): + gh_handler = None + if args.comment_pr: + github = GitHub("w3c", "web-platform-tests", args.gh_token) + try: + pr_number = int(args.comment_pr) + except ValueError: + pass + else: + gh_handler = GitHubCommentHandler(github, pr_number) + gh_handler.setLevel(logging.INFO) + logger.debug("Setting up GitHub logging") + logger.addHandler(gh_handler) + else: + logger.warning("No PR number found; not posting to GitHub") + return gh_handler + + +class pwd(object): + 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 fetch_wpt_master(): + git = get_git_cmd(os.path.join(os.path.abspath(os.curdir), "w3c", "web-platform-tests")) + git("fetch", "https://github.com/w3c/web-platform-tests.git", "master:master") + + +def get_sha1(): + git = get_git_cmd(os.path.join(os.path.abspath(os.curdir), "w3c", "web-platform-tests")) + return git("rev-parse", "HEAD").strip() + +def build_manifest(): + with pwd(os.path.join(os.path.abspath(os.curdir), "w3c", "web-platform-tests")): + # TODO: Call the manifest code directly + call("python", "manifest") + + +def install_wptrunner(): + call("git", "clone", "--depth=1", "https://github.com/w3c/wptrunner.git", "w3c/wptrunner") + git = get_git_cmd(os.path.join(os.path.abspath(os.curdir), "w3c", "wptrunner")) + git("submodule", "update", "--init", "--recursive") + call("pip", "install", os.path.join("w3c", "wptrunner")) + + +def get_files_changed(): + root = os.path.abspath(os.curdir) + git = get_git_cmd("%s/w3c/web-platform-tests" % root) + branch_point = git("merge-base", "HEAD", "master").strip() + logger.debug("Branch point from master: %s" % branch_point) + logger.debug(git("log", "--oneline", "%s.." % branch_point)) + files = git("diff", "--name-only", "-z", "%s.." % branch_point) + if not files: + return [] + assert files[-1] == "\0" + return ["%s/w3c/web-platform-tests/%s" % (root, item) + for item in files[:-1].split("\0")] + + +def wptrunner_args(root, files_changed, iterations, browser): + parser = wptcommandline.create_parser([browser.product]) + args = vars(parser.parse_args([])) + wpt_root = os.path.join(root, "w3c", "web-platform-tests") + args.update(browser.wptrunner_args(root)) + args.update({ + "tests_root": wpt_root, + "metadata_root": wpt_root, + "repeat": iterations, + "config": "%s/w3c/wptrunner/wptrunner.default.ini" % root, + "test_list": files_changed, + "restart_on_unexpected": False, + "pause_after_test": False + }) + wptcommandline.check_args(args) + return args + + +def setup_log_handler(): + global LogHandler + + class LogHandler(reader.LogHandler): + def __init__(self): + self.results = defaultdict(lambda: defaultdict(lambda: defaultdict(int))) + + def test_status(self, data): + self.results[data["test"]][data.get("subtest")][data["status"]] += 1 + + def test_end(self, data): + self.results[data["test"]][None][data["status"]] += 1 + + +def is_inconsistent(results_dict, iterations): + return len(results_dict) > 1 or sum(results_dict.values()) != iterations + + +def err_string(results_dict, iterations): + rv = [] + total_results = sum(results_dict.values()) + for key, value in sorted(results_dict.items()): + rv.append("%s%s" % + (key, ": %s/%s" % (value, iterations) if value != iterations else "")) + rv = ", ".join(rv) + if total_results < iterations: + rv.append("MISSING: %s/%s" % (iterations - total_results, iterations)) + if len(results_dict) > 1 or total_results != iterations: + rv = "**%s**" % rv + return rv + + +def process_results(log, iterations): + inconsistent = [] + handler = LogHandler() + reader.handle_log(reader.read(log), handler) + results = handler.results + for test, test_results in results.iteritems(): + for subtest, result in test_results.iteritems(): + if is_inconsistent(result, iterations): + inconsistent.append((test, subtest, result)) + return results, inconsistent + + +def markdown_adjust(s): + s = s.replace('\t', u'\\t') + s = s.replace('\n', u'\\n') + s = s.replace('\r', u'\\r') + s = s.replace('`', u'\\`') + return s + + +def table(headings, data, log): + cols = range(len(headings)) + assert all(len(item) == len(cols) for item in data) + max_widths = reduce(lambda prev, cur: [(len(cur[i]) + 2) + if (len(cur[i]) + 2) > prev[i] + else prev[i] + for i in cols], + data, + [len(item) + 2 for item in headings]) + log("|%s|" % "|".join(item.center(max_widths[i]) for i, item in enumerate(headings))) + log("|%s|" % "|".join("-" * max_widths[i] for i in cols)) + for row in data: + log("|%s|" % "|".join(" %s" % row[i].ljust(max_widths[i] - 1) for i in cols)) + log("") + + +def write_inconsistent(inconsistent, iterations): + logger.error("## Unstable results ##\n") + strings = [("`%s`" % markdown_adjust(test), ("`%s`" % markdown_adjust(subtest)) if subtest else "", err_string(results, iterations)) + for test, subtest, results in inconsistent] + table(["Test", "Subtest", "Results"], strings, logger.error) + + +def write_results(results, iterations, comment_pr): + logger.info("## All results ##\n") + for test, test_results in results.iteritems(): + baseurl = "http://w3c-test.org/submissions" + if "https" in os.path.splitext(test)[0].split(".")[1:]: + baseurl = "https://w3c-test.org/submissions" + pr_number = None + if comment_pr: + try: + pr_number = int(comment_pr) + except ValueError: + pass + if pr_number: + logger.info("### [%s](%s/%s%s) ###" % (test, baseurl, pr_number, test)) + else: + logger.info("### %s ###" % test) + parent = test_results.pop(None) + strings = [("", err_string(parent, iterations))] + strings.extend(((("`%s`" % markdown_adjust(subtest)) if subtest else "", err_string(results, iterations)) + for subtest, results in test_results.iteritems())) + table(["Subtest", "Results"], strings, logger.info) + + +def get_parser(): + parser = argparse.ArgumentParser() + parser.add_argument("--root", + action="store", + default=os.path.join(os.path.expanduser("~"), "build"), + help="Root path") + parser.add_argument("--iterations", + action="store", + default=10, + type=int, + help="Number of times to run tests") + parser.add_argument("--gh-token", + action="store", + default=os.environ.get("GH_TOKEN"), + help="OAuth token to use for accessing GitHub api") + parser.add_argument("--comment-pr", + action="store", + default=os.environ.get("TRAVIS_PULL_REQUEST"), + help="PR to comment on with stability results") + parser.add_argument("browser", + action="store", + help="Browser to run against") + return parser + + +def main(): + retcode = 0 + parser = get_parser() + args = parser.parse_args() + + if not os.path.exists(args.root): + logger.critical("Root directory %s does not exist" % args.root) + return 1 + + os.chdir(args.root) + + if args.gh_token: + gh_handler = setup_github_logging(args) + else: + logger.warning("Can't log to GitHub") + gh_handler = None + + with TravisFold("browser_setup"): + logger.info("# %s #" % args.browser.title()) + + browser_cls = {"firefox": Firefox, + "chrome": Chrome}.get(args.browser) + if browser_cls is None: + logger.critical("Unrecognised browser %s" % args.browser) + return 1 + + fetch_wpt_master() + + head_sha1 = get_sha1() + logger.info("Testing revision %s" % head_sha1) + + # For now just pass the whole list of changed files to wptrunner and + # assume that it will run everything that's actually a test + files_changed = get_files_changed() + + if not files_changed: + logger.info("No files changed") + return 0 + + build_manifest() + install_wptrunner() + do_delayed_imports() + + logger.debug("Files changed:\n%s" % "".join(" * %s\n" % item for item in files_changed)) + + browser = browser_cls(args.gh_token) + + browser.install() + browser.install_webdriver() + + kwargs = wptrunner_args(args.root, + files_changed, + args.iterations, + browser) + + with TravisFold("running_tests"): + logger.info("Starting %i test iterations" % args.iterations) + with open("raw.log", "wb") as log: + wptrunner.setup_logging(kwargs, + {"raw": log}) + # Setup logging for wptrunner that keeps process output and + # warning+ level logs only + wptrunner.logger.add_handler( + LogActionFilter( + LogLevelFilter( + StreamHandler( + sys.stdout, + TbplFormatter() + ), + "WARNING"), + ["log", "process_output"])) + + wptrunner.run_tests(**kwargs) + + with open("raw.log", "rb") as log: + results, inconsistent = process_results(log, args.iterations) + + if results: + if inconsistent: + write_inconsistent(inconsistent, args.iterations) + retcode = 2 + else: + logger.info("All results were stable\n") + with TravisFold("full_results"): + write_results(results, args.iterations, args.comment_pr) + else: + logger.info("No tests run.") + + try: + if gh_handler: + gh_handler.send() + except Exception: + logger.error(traceback.format_exc()) + return retcode + + +if __name__ == "__main__": + try: + retcode = main() + except: + raise + else: + sys.exit(retcode) diff --git a/tests/wpt/web-platform-tests/ci_lint.sh b/tests/wpt/web-platform-tests/ci_lint.sh new file mode 100644 index 00000000000..ebcd5c0901e --- /dev/null +++ b/tests/wpt/web-platform-tests/ci_lint.sh @@ -0,0 +1,5 @@ +set -ex + +./manifest +./lint +./diff-manifest.py diff --git a/tests/wpt/web-platform-tests/ci_stability.sh b/tests/wpt/web-platform-tests/ci_stability.sh new file mode 100644 index 00000000000..8e03c182084 --- /dev/null +++ b/tests/wpt/web-platform-tests/ci_stability.sh @@ -0,0 +1,33 @@ +set -e + +hosts_fixup() { + echo "travis_fold:start:hosts_fixup" + echo "Rewriting hosts file" + echo "## /etc/hosts ##" + cat /etc/hosts + sudo sed -i 's/^::1\s*localhost/::1/' /etc/hosts + sudo sh -c 'echo " +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 +" >> /etc/hosts' + echo "== /etc/hosts ==" + cat /etc/hosts + echo "----------------" + echo "travis_fold:end:hosts_fixup" +} + + +test_stability() { + python check_stability.py $PRODUCT +} + +main() { + hosts_fixup + test_stability +} + +main diff --git a/tests/wpt/web-platform-tests/common/dummy.xhtml b/tests/wpt/web-platform-tests/common/dummy.xhtml new file mode 100644 index 00000000000..5b208d74450 --- /dev/null +++ b/tests/wpt/web-platform-tests/common/dummy.xhtml @@ -0,0 +1,2 @@ + +Dummy XHTML document diff --git a/tests/wpt/web-platform-tests/common/dummy.xml b/tests/wpt/web-platform-tests/common/dummy.xml new file mode 100644 index 00000000000..4a60c3035fc --- /dev/null +++ b/tests/wpt/web-platform-tests/common/dummy.xml @@ -0,0 +1 @@ +Dummy XML document diff --git a/tests/wpt/web-platform-tests/common/get-host-info.sub.js b/tests/wpt/web-platform-tests/common/get-host-info.sub.js index 8d3d61de12a..5e60c49767b 100644 --- a/tests/wpt/web-platform-tests/common/get-host-info.sub.js +++ b/tests/wpt/web-platform-tests/common/get-host-info.sub.js @@ -23,3 +23,13 @@ function get_host_info() { HTTPS_REMOTE_ORIGIN_WITH_CREDS: 'https://foo:bar@' + REMOTE_HOST + ':' + HTTPS_PORT, }; } + +function get_port(loc) { + // When a default port is used, location.port returns the empty string. + // To compare with wptserve `ports` substitution we need a port... + // loc can be Location/
                                                                                        //URL, but assumes http/https only. + if (loc.port) { + return loc.port; + } + return loc.protocol === 'https:' ? '443' : '80'; +} diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-currentColor.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-currentColor.html new file mode 100644 index 00000000000..f4912c93450 --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-currentColor.html @@ -0,0 +1,19 @@ + +Test that currentColor is not affected by -webkit-text-fill-color + + +

                                                                                        + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/config.default.json b/tests/wpt/web-platform-tests/config.default.json index dd4530b2140..47ad74b7eb5 100644 --- a/tests/wpt/web-platform-tests/config.default.json +++ b/tests/wpt/web-platform-tests/config.default.json @@ -22,5 +22,6 @@ "host_cert_path": null }, "none": {} - } + }, + "aliases": [] } diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-dom-01-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-dom-01-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-dom-01-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-dom-01-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-dom-02-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-dom-02-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-dom-02-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-dom-02-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-elem-40-t-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-elem-40-t-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-elem-40-t-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-elem-40-t-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-script-elem-01-b-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-script-elem-01-b-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-script-elem-01-b-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-script-elem-01-b-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-struct-dom-01-b-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-struct-dom-01-b-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-struct-dom-01-b-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/animate-struct-dom-01-b-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/conform-viewers-02-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/conform-viewers-02-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/conform-viewers-02-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/conform-viewers-02-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/coords-dom-03-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/coords-dom-03-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/coords-dom-03-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/coords-dom-03-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-events-02-b-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-events-02-b-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-events-02-b-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-events-02-b-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-01-b-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-01-b-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-01-b-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-01-b-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-03-b-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-03-b-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-03-b-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-03-b-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-05-b-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-05-b-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-05-b-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-05-b-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-07-t-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-07-t-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-07-t-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-07-t-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-08-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-08-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-08-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-08-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-09-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-09-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-09-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pevents-09-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pointer-01-t-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pointer-01-t-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pointer-01-t-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pointer-01-t-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pointer-03-t-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pointer-03-t-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pointer-03-t-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/interact-pointer-03-t-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/masking-path-09-b-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/masking-path-09-b-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/masking-path-09-b-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/masking-path-09-b-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/paths-dom-01-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/paths-dom-01-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/paths-dom-01-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/paths-dom-01-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/paths-dom-02-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/paths-dom-02-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/paths-dom-02-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/paths-dom-02-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-cond-02-t-isvalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-cond-02-t-haswarn.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-cond-02-t-isvalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-cond-02-t-haswarn.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-07-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-07-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-07-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-07-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-08-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-08-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-08-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-08-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-11-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-11-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-11-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-11-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-13-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-13-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-13-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-13-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-14-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-14-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-14-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-14-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-15-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-15-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-15-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-15-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-20-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-20-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-20-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-dom-20-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-use-13-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-use-13-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-use-13-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/struct-use-13-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-dom-02-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-dom-02-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-dom-02-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-dom-02-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-dom-05-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-dom-05-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-dom-05-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-dom-05-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-tselect-02-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-tselect-02-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-tselect-02-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-tselect-02-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-tselect-03-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-tselect-03-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-tselect-03-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/text-tselect-03-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-02-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-02-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-02-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-02-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-03-b-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-03-b-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-03-b-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-03-b-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-05-b-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-05-b-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-05-b-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-05-b-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-07-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-07-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-07-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-07-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-08-f-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-08-f-isvalid.html similarity index 100% rename from tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-08-f-novalid.html rename to tests/wpt/web-platform-tests/conformance-checkers/html-svg/types-dom-08-f-isvalid.html diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dd/dd-hgroup-isvalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dd/dd-hgroup-isvalid.html new file mode 100644 index 00000000000..9db467c3e82 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dd/dd-hgroup-isvalid.html @@ -0,0 +1,5 @@ + + +valid hgroup in dd + +
                                                                                        text

                                                                                        text

                                                                                        diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/article-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/article-in-dt-novalid.html new file mode 100644 index 00000000000..1c2fde9cd6a --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/article-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid article-in-dt +

                                                                                        text

                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/aside-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/aside-in-dt-novalid.html new file mode 100644 index 00000000000..b08c05b7f39 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/aside-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid aside-in-dt +
                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dd-in-template-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dd-in-template-novalid.html new file mode 100644 index 00000000000..3c4ddbdae19 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dd-in-template-novalid.html @@ -0,0 +1,4 @@ + + +invalid dd-in-template +
                                                                                        1
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-contains-dl-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-contains-dl-novalid.html new file mode 100644 index 00000000000..d94258abc01 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-contains-dl-novalid.html @@ -0,0 +1,4 @@ + + +invalid div-contains-dl +
                                                                                        2
                                                                                        b
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-contains-text-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-contains-text-novalid.html new file mode 100644 index 00000000000..acb91569e1c --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-contains-text-novalid.html @@ -0,0 +1,4 @@ + + +invalid div-contains-text +
                                                                                        x
                                                                                        2
                                                                                        b
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-multiple-groups-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-multiple-groups-novalid.html new file mode 100644 index 00000000000..ff0d5bc3017 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-multiple-groups-novalid.html @@ -0,0 +1,4 @@ + + +invalid div-multiple-groups +
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        a
                                                                                        b
                                                                                        3
                                                                                        4
                                                                                        5
                                                                                        a
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-2-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-2-novalid.html new file mode 100644 index 00000000000..f490502118b --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-2-novalid.html @@ -0,0 +1,4 @@ + + +invalid div-splitting-groups-2 +
                                                                                        1
                                                                                        a
                                                                                        b
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-3-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-3-novalid.html new file mode 100644 index 00000000000..aa2e4e16058 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-3-novalid.html @@ -0,0 +1,4 @@ + + +invalid div-splitting-groups-3 +
                                                                                        1
                                                                                        2
                                                                                        b
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-novalid.html new file mode 100644 index 00000000000..5164e2f268a --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/div-splitting-groups-novalid.html @@ -0,0 +1,4 @@ + + +invalid div-splitting-groups +
                                                                                        1
                                                                                        a
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-dl-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-dl-novalid.html new file mode 100644 index 00000000000..d893e9beac2 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-dl-novalid.html @@ -0,0 +1,4 @@ + + +invalid dl-contains-dl +
                                                                                        1
                                                                                        a
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-text-2-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-text-2-novalid.html new file mode 100644 index 00000000000..84847551aa1 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-text-2-novalid.html @@ -0,0 +1,4 @@ + + +invalid dl-contains-text-2 +
                                                                                        1
                                                                                        a
                                                                                        x
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-text-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-text-novalid.html new file mode 100644 index 00000000000..2113207edfb --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-contains-text-novalid.html @@ -0,0 +1,4 @@ + + +invalid dl-contains-text +
                                                                                        1
                                                                                        x
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-in-p-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-in-p-novalid.html new file mode 100644 index 00000000000..b1053418404 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-in-p-novalid.html @@ -0,0 +1,4 @@ + + +invalid dl-in-p +

                                                                                        text
                                                                                        text

                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-isvalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-isvalid.html new file mode 100644 index 00000000000..9bd331c9139 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dl-isvalid.html @@ -0,0 +1,34 @@ + + +valid dl + + +
                                                                                        text

                                                                                        text

                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        +
                                                                                        text

                                                                                        text

                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        +
                                                                                        1
                                                                                        2
                                                                                        a
                                                                                        +
                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        +
                                                                                        text
                                                                                        text
                                                                                        +
                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        a
                                                                                        b
                                                                                        3
                                                                                        4
                                                                                        5
                                                                                        a
                                                                                        +
                                                                                        text
                                                                                        text
                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        b
                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        +
                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        a
                                                                                        b
                                                                                        3
                                                                                        4
                                                                                        5
                                                                                        a
                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        +
                                                                                        text
                                                                                        text
                                                                                        +
                                                                                        text

                                                                                        text

                                                                                        +
                                                                                        text
                                                                                        +

                                                                                        1

                                                                                        1

                                                                                        a
                                                                                        +
                                                                                        text

                                                                                        text

                                                                                        +
                                                                                        text
                                                                                        text
                                                                                        +
                                                                                        text

                                                                                        text

                                                                                        +
                                                                                        text
                                                                                        text
                                                                                        +
                                                                                        text
                                                                                        +
                                                                                        text

                                                                                        text

                                                                                        +
                                                                                        1
                                                                                        a
                                                                                        diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dt-in-template-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dt-in-template-novalid.html new file mode 100644 index 00000000000..da0526906db --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/dt-in-template-novalid.html @@ -0,0 +1,4 @@ + + +invalid dt-in-template +
                                                                                        a
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/empty-div-2-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/empty-div-2-novalid.html new file mode 100644 index 00000000000..54d9e68fa19 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/empty-div-2-novalid.html @@ -0,0 +1,4 @@ + + +invalid empty-div-2 +
                                                                                        2
                                                                                        b
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/empty-div-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/empty-div-novalid.html new file mode 100644 index 00000000000..14211f3b015 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/empty-div-novalid.html @@ -0,0 +1,4 @@ + + +invalid empty-div +
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/first-dd-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/first-dd-novalid.html new file mode 100644 index 00000000000..98604399ac6 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/first-dd-novalid.html @@ -0,0 +1,4 @@ + + +invalid first-dd +
                                                                                        a
                                                                                        2
                                                                                        b
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/footer-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/footer-in-dt-novalid.html new file mode 100644 index 00000000000..a24cc0b18de --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/footer-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid footer-in-dt +
                                                                                        text
                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h1-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h1-in-dt-novalid.html new file mode 100644 index 00000000000..3e8729cf6e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h1-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid h1-in-dt +

                                                                                        text

                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h2-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h2-in-dt-novalid.html new file mode 100644 index 00000000000..32d5088005d --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h2-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid h2-in-dt +

                                                                                        text

                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h3-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h3-in-dt-novalid.html new file mode 100644 index 00000000000..ec22819c119 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h3-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid h3-in-dt +

                                                                                        text

                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h4-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h4-in-dt-novalid.html new file mode 100644 index 00000000000..5b621b1debd --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h4-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid h4-in-dt +

                                                                                        text

                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h5-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h5-in-dt-novalid.html new file mode 100644 index 00000000000..21c603a9e3f --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h5-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid h5-in-dt +
                                                                                        text
                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h6-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h6-in-dt-novalid.html new file mode 100644 index 00000000000..1c97cced77a --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/h6-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid h6-in-dt +
                                                                                        text
                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/header-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/header-in-dt-novalid.html new file mode 100644 index 00000000000..2bc589b800a --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/header-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid header-in-dt +
                                                                                        text
                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/hgroup-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/hgroup-in-dt-novalid.html new file mode 100644 index 00000000000..07165851adc --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/hgroup-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid hgroup-in-dt +

                                                                                        text

                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/last-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/last-dt-novalid.html new file mode 100644 index 00000000000..83e2fec8a24 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/last-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid last-dt +
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/mixed-div-dt-dd-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/mixed-div-dt-dd-novalid.html new file mode 100644 index 00000000000..c02808addb4 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/mixed-div-dt-dd-novalid.html @@ -0,0 +1,4 @@ + + +invalid mixed-div-dt-dd +
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        b
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/mixed-dt-dd-div-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/mixed-dt-dd-div-novalid.html new file mode 100644 index 00000000000..5ed4aedd151 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/mixed-dt-dd-div-novalid.html @@ -0,0 +1,4 @@ + + +invalid mixed-dt-dd-div +
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        b
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/model-isvalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/model-isvalid.html deleted file mode 100644 index c7a5de96c03..00000000000 --- a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/model-isvalid.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - Definition List: <dl> <dt> <dd> - - - -
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        - - -
                                                                                        -
                                                                                        -
                                                                                        -
                                                                                        -
                                                                                        - - -
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        - - -
                                                                                        -
                                                                                        some text
                                                                                        -
                                                                                        more
                                                                                        text
                                                                                        -
                                                                                        - - -
                                                                                        -
                                                                                        some text
                                                                                        -
                                                                                        -

                                                                                        more

                                                                                        -

                                                                                        text

                                                                                        -
                                                                                        -
                                                                                        - - -
                                                                                        -
                                                                                        some text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        - - diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/model-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/model-novalid.html deleted file mode 100644 index 0eacdf8dbff..00000000000 --- a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/model-novalid.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - Definition List: <dl> <dt> <dd> - - - -
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        - - -

                                                                                        paragraph -

                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        -

                                                                                        - - -
                                                                                        -
                                                                                        -
                                                                                        -
                                                                                        -
                                                                                        - - -
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        - - -
                                                                                        -
                                                                                        some text
                                                                                        -
                                                                                        more
                                                                                        text
                                                                                        -
                                                                                        -

                                                                                        paragraph -

                                                                                        -
                                                                                        some text
                                                                                        -
                                                                                        more
                                                                                        text
                                                                                        -
                                                                                        -

                                                                                        - - -
                                                                                        -
                                                                                        some text
                                                                                        -
                                                                                        -

                                                                                        more

                                                                                        -

                                                                                        text

                                                                                        -
                                                                                        -
                                                                                        - - -
                                                                                        -
                                                                                        some text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        -

                                                                                        paragraph -

                                                                                        -
                                                                                        some text
                                                                                        -
                                                                                        more text
                                                                                        -
                                                                                        -

                                                                                        - - diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/nav-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/nav-in-dt-novalid.html new file mode 100644 index 00000000000..64e137d5156 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/nav-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid nav-in-dt +
                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/nested-divs-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/nested-divs-novalid.html new file mode 100644 index 00000000000..ef3446d3a16 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/nested-divs-novalid.html @@ -0,0 +1,4 @@ + + +invalid nested-divs +
                                                                                        1
                                                                                        a
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/only-dd-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/only-dd-novalid.html new file mode 100644 index 00000000000..017795cc093 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/only-dd-novalid.html @@ -0,0 +1,4 @@ + + +invalid only-dd +
                                                                                        a
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/only-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/only-dt-novalid.html new file mode 100644 index 00000000000..7445214efe1 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/only-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid only-dt +
                                                                                        1
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/section-in-dt-novalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/section-in-dt-novalid.html new file mode 100644 index 00000000000..846ebbe35a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/dl/section-in-dt-novalid.html @@ -0,0 +1,4 @@ + + +invalid section-in-dt +

                                                                                        text

                                                                                        text
                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/conformance-checkers/messages.json b/tests/wpt/web-platform-tests/conformance-checkers/messages.json index 70841a3f4f8..0ec6b541ff8 100644 --- a/tests/wpt/web-platform-tests/conformance-checkers/messages.json +++ b/tests/wpt/web-platform-tests/conformance-checkers/messages.json @@ -41,6 +41,46 @@ "html-rdfalite/0074-novalid.html": "Bad value \u201cdc:creator\u201d for attribute \u201crel\u201d on element \u201ca\u201d: Bad list of link-type keywords: The string \u201cdc:creator\u201d is not a registered keyword.", "html-rdfalite/0147.novalid.html": "Attribute \u201cxmlns:xmlzzz\u201d not allowed here.", "html-rdfalite/0319-novalid.html": "Attribute \u201cxmlns:xpr\u201d not allowed here.", + "html-svg/animate-elem-24-t-novalid.html": "Duplicate ID \u201cMyFont\u201d.", + "html-svg/animate-elem-77-t-novalid.html": "Element \u201ca\u201d is missing required attribute \u201chref\u201d.", + "html-svg/animate-pservers-grad-01-b-novalid.html": "Duplicate ID \u201ca7\u201d.", + "html-svg/conform-viewers-03-f-novalid.html": "Bad value \u201chttp://example.net/bar\u201d for the attribute \u201cxmlns:link\u201d (only \u201chttp://www.w3.org/1999/xlink\u201d permitted here).", + "html-svg/coords-dom-01-f-novalid.html": "Attribute \u201cxml:id\u201d not allowed on element \u201crect\u201d in this context.", + "html-svg/coords-dom-02-f-novalid.html": "Attribute \u201cxml:id\u201d not allowed on element \u201crect\u201d in this context.", + "html-svg/coords-transformattr-01-f-novalid.html": "A numeric character reference expanded to carriage return.", + "html-svg/extend-namespace-01-f-novalid.html": "Attribute \u201cxmlns:bd\u201d not allowed here.", + "html-svg/filters-color-02-b-novalid.html": "Element \u201cfeFuncR\u201d not allowed in this context. (The parent was element \u201cfeComponentTransfer\u201d.) Suppressing further errors from this subtree.", + "html-svg/filters-conv-02-f-novalid.html": "Element \u201cfeConvolveMatrix\u201d is missing required attribute \u201corder\u201d.", + "html-svg/filters-conv-04-f-novalid.html": "Element \u201cfeConvolveMatrix\u201d is missing required attribute \u201corder\u201d.", + "html-svg/filters-conv-05-f-novalid.html": "Element \u201cfeConvolveMatrix\u201d is missing required attribute \u201corder\u201d.", + "html-svg/filters-light-05-f-novalid.html": "Duplicate ID \u201cc1\u201d.", + "html-svg/fonts-glyph-04-t-novalid.html": "Element \u201cfont\u201d is missing required child element \u201cmissing-glyph\u201d.", + "html-svg/fonts-overview-201-t-novalid.html": "Attribute \u201cxmlns:xe\u201d not allowed here.", + "html-svg/interact-pointer-02-t-novalid.html": "Attribute \u201cx\u201d not allowed on element \u201cclipPath\u201d in this context.", + "html-svg/linking-a-09-b-novalid.html": "Element \u201ctspan\u201d not allowed in this context. (The parent was element \u201ca\u201d.) Suppressing further errors from this subtree.", + "html-svg/linking-a-10-f-novalid.html": "Element \u201ca\u201d is missing required attribute \u201chref\u201d.", + "html-svg/masking-filter-01-f-novalid.html": "Attribute \u201cfilterprimitiveunits\u201d not allowed on element \u201cfilter\u201d in this context.", + "html-svg/masking-intro-01-f-novalid.html": "Duplicate ID \u201ctest-title\u201d.", + "html-svg/metadata-example-01-t-novalid.html": "Attribute \u201cxmlns:prism\u201d not allowed here.", + "html-svg/painting-marker-04-f-novalid.html": "Attribute \u201cmarker\u201d not allowed on element \u201cg\u201d in this context.", + "html-svg/paths-data-18-f-novalid.html": "Bad value \u201cM 20 100 H 40#90\u201d for attribute \u201cd\u201d on element \u201cpath\u201d: Bad SVG path data: Expected command but found \u201c#\u201d (context: \u201cM 20 100 H 40#\u201d).", + "html-svg/paths-data-20-f-novalid.html": "Bad value \u201cM280,120 h25 a25,25 0 6 0 -25,25 z\u201d for attribute \u201cd\u201d on element \u201cpath\u201d: Bad SVG path data: Expected \u201c0\u201d or \u201c1\u201d for large-arc-flag for \u201ca\u201d command but found \u201c6\u201d instead (context: \u201c0,120 h25 a25,25 0 6\u201d).", + "html-svg/pservers-grad-23-f-novalid.html": "Attribute \u201cstop-color\u201d not allowed on element \u201crect\u201d in this context.", + "html-svg/script-specify-01-f-novalid.html": "Attribute \u201ccontentscripttype\u201d not allowed on element \u201csvg\u201d in this context.", + "html-svg/shapes-rect-03-t-novalid.html": "Attribute \u201cxml:id\u201d not allowed on element \u201crect\u201d in this context.", + "html-svg/struct-cond-02-t-haswarn.html": "Text run is not in Unicode Normalization Form C.", + "html-svg/struct-dom-17-f-novalid.html": "Element \u201crect\u201d is missing required attribute \u201cheight\u201d.", + "html-svg/struct-dom-19-f-novalid.html": "Element \u201crect\u201d is missing required attribute \u201cheight\u201d.", + "html-svg/struct-frag-05-t-novalid.html": "Bad value \u201chttp://www.example.org/notsvg\u201d for the attribute \u201cxmlns\u201d (only \u201chttp://www.w3.org/2000/svg\u201d permitted here).", + "html-svg/struct-image-12-b-novalid.html": "Duplicate ID \u201cimageSVG\u201d.", + "html-svg/struct-use-11-f-novalid.html": "Attribute \u201cfoo\u201d not allowed on element \u201ccircle\u201d in this context.", + "html-svg/struct-use-12-f-novalid.html": "Element \u201cuse\u201d not allowed in this context. (The parent was element \u201cuse\u201d.) Suppressing further errors from this subtree.", + "html-svg/styling-pres-02-f-novalid.html": "Attribute \u201cfill\u201d not allowed on element \u201cimage\u201d in this context.", + "html-svg/svgdom-over-01-f-novalid.html": "Element \u201cstop\u201d not allowed in this context. (The parent was element \u201cdefs\u201d.) Suppressing further errors from this subtree.", + "html-svg/text-dom-03-f-novalid.html": "Element \u201cfont\u201d is missing required child element \u201cmissing-glyph\u201d.", + "html-svg/text-fonts-03-t-novalid.html": "Element \u201cfont\u201d is missing required attribute \u201choriz-adv-x\u201d.", + "html-svg/text-fonts-05-f-novalid.html": "Attribute \u201cline-height\u201d not allowed on element \u201ctspan\u201d in this context.", + "html-svg/types-dom-04-b-novalid.html": "Attribute \u201cexternalresourcesrequired\u201d not allowed on element \u201csvg\u201d in this context.", "html/attributes/accesskey/duplicate-key-labels-novalid.html": "Bad value \u201ca b \u306c c \u306c\u201d for attribute \u201caccesskey\u201d on element \u201ca\u201d: Bad key label list: Duplicate key label. Each key label must be unique.", "html/attributes/accesskey/multi-character-key-label-novalid.html": "Bad value \u201ca b \u307b\u3052\u201d for attribute \u201caccesskey\u201d on element \u201ca\u201d: Bad key label list: Key label has multiple characters. Each key label must be a single character.", "html/attributes/data/no-characters-after-hyphen-novalid.html": "Attribute \u201cdata-\u201d not allowed on element \u201cp\u201d in this context.", @@ -618,7 +658,40 @@ "html/elements/dfn/model-novalid.html": "End tag \u201cp\u201d implied, but there were open elements.", "html/elements/dialog/model-novalid.html": "Element \u201cdt\u201d not allowed in this context. (The parent was element \u201cdialog\u201d.) Suppressing further errors from this subtree.", "html/elements/div/model-novalid.html": "End tag \u201cp\u201d implied, but there were open elements.", - "html/elements/dl/model-novalid.html": "Duplicate ID \u201cid\u201d.", + "html/elements/dl/article-in-dt-novalid.html": "The element \u201carticle\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/aside-in-dt-novalid.html": "The element \u201caside\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/dd-in-template-novalid.html": "Element \u201ctemplate\u201d is missing a required child element.", + "html/elements/dl/div-contains-dl-novalid.html": "Element \u201cdl\u201d not allowed in this context. (The parent was element \u201cdiv\u201d.) Suppressing further errors from this subtree.", + "html/elements/dl/div-contains-text-novalid.html": "Text not allowed in element \u201cdiv\u201d in this context.", + "html/elements/dl/div-multiple-groups-novalid.html": "Element \u201cdt\u201d not allowed in this context. (The parent was element \u201cdiv\u201d.) Suppressing further errors from this subtree.", + "html/elements/dl/div-splitting-groups-2-novalid.html": "Element \u201cdiv\u201d is missing required child element \u201cdt\u201d.", + "html/elements/dl/div-splitting-groups-3-novalid.html": "Element \u201cdiv\u201d is missing required child element \u201cdd\u201d.", + "html/elements/dl/div-splitting-groups-novalid.html": "Element \u201cdiv\u201d is missing required child element \u201cdd\u201d.", + "html/elements/dl/dl-contains-dl-novalid.html": "Element \u201cdl\u201d not allowed in this context. (The parent was element \u201cdl\u201d.) Suppressing further errors from this subtree.", + "html/elements/dl/dl-contains-text-2-novalid.html": "Text not allowed in element \u201cdl\u201d in this context.", + "html/elements/dl/dl-contains-text-novalid.html": "Text not allowed in element \u201cdl\u201d in this context.", + "html/elements/dl/dl-in-p-novalid.html": "No \u201cp\u201d element in scope but a \u201cp\u201d end tag seen.", + "html/elements/dl/dt-in-template-novalid.html": "Element \u201ctemplate\u201d is missing required child element \u201cdd\u201d.", + "html/elements/dl/empty-div-2-novalid.html": "Element \u201cdiv\u201d is missing required child element \u201cdd\u201d.", + "html/elements/dl/empty-div-novalid.html": "Element \u201cdiv\u201d is missing required child element \u201cdd\u201d.", + "html/elements/dl/first-dd-novalid.html": "Element \u201cdl\u201d is missing a required child element.", + "html/elements/dl/footer-in-dt-novalid.html": "The element \u201cfooter\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/h1-in-dt-novalid.html": "The element \u201ch1\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/h2-in-dt-novalid.html": "The element \u201ch2\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/h3-in-dt-novalid.html": "The element \u201ch3\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/h4-in-dt-novalid.html": "The element \u201ch4\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/h5-in-dt-novalid.html": "The element \u201ch5\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/h6-in-dt-novalid.html": "The element \u201ch6\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/header-in-dt-novalid.html": "The element \u201cheader\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/hgroup-in-dt-novalid.html": "The element \u201chgroup\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/last-dt-novalid.html": "Element \u201cdl\u201d is missing required child element \u201cdd\u201d.", + "html/elements/dl/mixed-div-dt-dd-novalid.html": "Element \u201cdt\u201d not allowed in this context. (The parent was element \u201cdl\u201d.) Suppressing further errors from this subtree.", + "html/elements/dl/mixed-dt-dd-div-novalid.html": "Element \u201cdiv\u201d not allowed in this context. (The parent was element \u201cdl\u201d.) Suppressing further errors from this subtree.", + "html/elements/dl/nav-in-dt-novalid.html": "The element \u201cnav\u201d must not appear as a descendant of the \u201cdt\u201d element.", + "html/elements/dl/nested-divs-novalid.html": "Element \u201cdiv\u201d not allowed in this context. (The parent was element \u201cdiv\u201d.) Suppressing further errors from this subtree.", + "html/elements/dl/only-dd-novalid.html": "Element \u201cdl\u201d is missing a required child element.", + "html/elements/dl/only-dt-novalid.html": "Element \u201cdl\u201d is missing required child element \u201cdd\u201d.", + "html/elements/dl/section-in-dt-novalid.html": "The element \u201csection\u201d must not appear as a descendant of the \u201cdt\u201d element.", "html/elements/em/model-novalid.html": "End tag \u201cp\u201d implied, but there were open elements.", "html/elements/embed/height-novalid.html": "Bad value \u201c20%\u201d for attribute \u201cheight\u201d on element \u201cembed\u201d: Bad non-negative integer: Expected a digit but saw \u201c%\u201d instead.", "html/elements/embed/src-empty-novalid.html": "Bad value \u201c\u201d for attribute \u201csrc\u201d on element \u201cembed\u201d: Bad URL: Must be non-empty.", diff --git a/tests/wpt/web-platform-tests/conformance-checkers/tools/build-svg-tests.py b/tests/wpt/web-platform-tests/conformance-checkers/tools/build-svg-tests.py index c212e78896b..3986a8dca41 100644 --- a/tests/wpt/web-platform-tests/conformance-checkers/tools/build-svg-tests.py +++ b/tests/wpt/web-platform-tests/conformance-checkers/tools/build-svg-tests.py @@ -21,9 +21,9 @@ # DEALINGS IN THE SOFTWARE. """build_svg_tests.py. - + This script builds a set of SVG-in-HTML test files for the Nu Html Checker -based on the SVG 1.1 Second Edition Test Suite +based on the SVG 1.1 Second Edition Test Suite http://www.w3.org/Graphics/SVG/Test/20110816/archives/W3C_SVG_11_TestSuite.tar.gz """ @@ -38,7 +38,7 @@ import urllib2 valid_svg_files = dict([ # these entries manually added after cross checking behaviour with spec - + # VNU warns about text not in Unicode Normalization Form C, but it's not an error ('struct-cond-02-t-manual.svg', 'Source text is not in Unicode Normalization Form C'), # FiLl, fill and FILL are all valid in case-insensitive HTML (but SVG DTD is case-sensitive) @@ -46,22 +46,17 @@ valid_svg_files = dict([ ]) # some files in the SVG 1.1 test suite don't validate against the SVG 1.1 DTD -# and some files are marked as version='SVG 1.2'. +# and some files are marked as version='SVG 1.2'. # this is used to toggle between -isvalid.html and -novalid.html output - + invalid_svg_files = dict([ # 'DTD Invalid' entries are produced by calling validate_svg_dtd (see below) - ('animate-dom-01-f-manual.svg', 'DTD Invalid'), - ('animate-dom-02-f-manual.svg', 'DTD Invalid'), ('animate-elem-24-t-manual.svg', 'DTD Invalid'), ('animate-elem-77-t-manual.svg', 'DTD Invalid'), ('animate-pservers-grad-01-b-manual.svg', 'DTD Invalid'), - ('animate-script-elem-01-b-manual.svg', 'DTD Invalid'), - ('animate-struct-dom-01-b-manual.svg', 'DTD Invalid'), ('conform-viewers-03-f-manual.svg', 'DTD Invalid'), ('coords-dom-01-f-manual.svg', 'DTD Invalid'), ('coords-dom-02-f-manual.svg', 'DTD Invalid'), - ('coords-dom-03-f-manual.svg', 'DTD Invalid'), ('extend-namespace-01-f-manual.svg', 'DTD Invalid'), ('filters-color-02-b-manual.svg', 'DTD Invalid'), ('filters-conv-02-f-manual.svg', 'DTD Invalid'), @@ -69,66 +64,36 @@ invalid_svg_files = dict([ ('filters-conv-05-f-manual.svg', 'DTD Invalid'), ('filters-light-05-f-manual.svg', 'DTD Invalid'), ('fonts-glyph-04-t-manual.svg', 'DTD Invalid'), - ('interact-events-02-b-manual.svg', 'DTD Invalid'), - ('interact-pevents-01-b-manual.svg', 'DTD Invalid'), - ('interact-pevents-03-b-manual.svg', 'DTD Invalid'), - ('interact-pevents-05-b-manual.svg', 'DTD Invalid'), - ('interact-pevents-07-t-manual.svg', 'DTD Invalid'), - ('interact-pevents-08-f-manual.svg', 'DTD Invalid'), - ('interact-pevents-09-f-manual.svg', 'DTD Invalid'), - ('interact-pointer-01-t-manual.svg', 'DTD Invalid'), ('interact-pointer-02-t-manual.svg', 'DTD Invalid'), - ('interact-pointer-03-t-manual.svg', 'DTD Invalid'), ('linking-a-09-b-manual.svg', 'DTD Invalid'), ('linking-a-10-f-manual.svg', 'DTD Invalid'), ('masking-filter-01-f-manual.svg', 'DTD Invalid'), ('masking-intro-01-f-manual.svg', 'DTD Invalid'), - ('masking-path-09-b-manual.svg', 'DTD Invalid'), ('painting-marker-04-f-manual.svg', 'DTD Invalid'), ('paths-data-18-f-manual.svg', 'DTD Invalid'), ('paths-data-20-f-manual.svg', 'DTD Invalid'), - ('paths-dom-01-f-manual.svg', 'DTD Invalid'), - ('paths-dom-02-f-manual.svg', 'DTD Invalid'), ('pservers-grad-23-f-manual.svg', 'DTD Invalid'), ('render-elems-03-t-manual.svg', 'DTD Invalid'), ('shapes-rect-03-t-manual.svg', 'DTD Invalid'), ('struct-cond-02-t-manual.svg', 'DTD Invalid'), - ('struct-dom-07-f-manual.svg', 'DTD Invalid'), - ('struct-dom-08-f-manual.svg', 'DTD Invalid'), - ('struct-dom-11-f-manual.svg', 'DTD Invalid'), - ('struct-dom-13-f-manual.svg', 'DTD Invalid'), - ('struct-dom-14-f-manual.svg', 'DTD Invalid'), - ('struct-dom-15-f-manual.svg', 'DTD Invalid'), ('struct-dom-17-f-manual.svg', 'DTD Invalid'), ('struct-dom-19-f-manual.svg', 'DTD Invalid'), - ('struct-dom-20-f-manual.svg', 'DTD Invalid'), ('struct-frag-05-t-manual.svg', 'DTD Invalid'), ('struct-image-12-b-manual.svg', 'DTD Invalid'), ('struct-use-11-f-manual.svg', 'DTD Invalid'), ('struct-use-12-f-manual.svg', 'DTD Invalid'), - ('struct-use-13-f-manual.svg', 'DTD Invalid'), ('styling-css-10-f-manual.svg', 'DTD Invalid'), ('styling-pres-02-f-manual.svg', 'DTD Invalid'), ('svgdom-over-01-f-manual.svg', 'DTD Invalid'), - ('text-dom-02-f-manual.svg', 'DTD Invalid'), ('text-dom-03-f-manual.svg', 'DTD Invalid'), - ('text-dom-05-f-manual.svg', 'DTD Invalid'), ('text-fonts-03-t-manual.svg', 'DTD Invalid'), ('text-fonts-05-f-manual.svg', 'DTD Invalid'), ('text-tref-02-b-manual.svg', 'DTD Invalid'), - ('text-tselect-02-f-manual.svg', 'DTD Invalid'), - ('text-tselect-03-f-manual.svg', 'DTD Invalid'), - ('types-dom-02-f-manual.svg', 'DTD Invalid'), - ('types-dom-03-b-manual.svg', 'DTD Invalid'), ('types-dom-04-b-manual.svg', 'DTD Invalid'), - ('types-dom-05-b-manual.svg', 'DTD Invalid'), - ('types-dom-07-f-manual.svg', 'DTD Invalid'), - ('types-dom-08-f-manual.svg', 'DTD Invalid'), - + # these entries manually added after cross checking behaviour with spec # note there are some confusing differences between w:iri-ref (used in HTML for img/@src) # and xsd:anyURI (used in SVG for image/@xlink:href) - ('animate-elem-40-t-manual.svg', 'Spaces in data: URI - not allowed by URL Standard or RFC 2397.'), ('conform-viewers-02-f-manual.svg', 'Newlines in data: URI - not allowed by URL Standard or RFC 2397.'), ('coords-transformattr-01-f-manual.svg', 'Numeric character reference expanded to carriage return - not allowed in HTML5 - see 8.1.4'), ('fonts-overview-201-t-manual.svg', 'Unsupported SVG version specified - specifies SVG 1.2'), @@ -140,59 +105,30 @@ invalid_svg_files = dict([ # TODO Github Issue #216 MathML and SVG uses xsd:anyURI, HTML URLs use URL Standard # TODO Github Issue #217 NU has script/@type optional for HTML, but not SVG-in-HTML -def build_html_testfiles(svgdirectory,htmldirectory): +def build_html_testfiles(svgdirectory,htmldirectory): """Builds HTML test files from SVG test suite folder.""" logging.debug('build_html_testfiles: IN') - + testfiles = [] - + for filename in os.listdir(svgdirectory): #logging.debug(filename) - if filename.endswith(".svg"): + if filename.endswith(".svg"): htmlpathname = build_html_test_file(filename, svgdirectory, htmldirectory) if htmlpathname: testfiles.append(htmlpathname) pass pass - indexpathname = "index-isvalid.html" - build_html_index_file(indexpathname, testfiles) - -def build_html_index_file(indexpathname, testfiles): - """Builds HTML test index.""" - - htmlfile = open(indexpathname, "w") - - htmlfile.write("\n") - htmlfile.write("\n") - - htmlfile.write("\n") - htmlfile.write(" SVG in HTML Test Index\n") - htmlfile.write(" \n") - htmlfile.write("\n") - - htmlfile.write("\n") - htmlfile.write("

                                                                                        SVG in HTML Test Index

                                                                                        \n") - - for filename in testfiles: - if filename.find("-isvalid") > 0: - htmlfile.write("

                                                                                        %s

                                                                                        \n" % (filename, filename)) - - htmlfile.write("\n") - - htmlfile.write("\n") - htmlfile.close() - - -def build_html_test_file(filename, svgdirectory, htmldirectory): +def build_html_test_file(filename, svgdirectory, htmldirectory): """Builds HTML test file by wrapping input SVG in boilerplate HTML.""" svgpathname = svgdirectory + "/" + filename # valid_svg_file overrides invalid_svg_files (may invalid in case-sensitive XML but valid in case-insensitive HTML) - if invalid_svg_files.has_key(filename) and not valid_svg_files.has_key(filename): + if invalid_svg_files.has_key(filename) and not valid_svg_files.has_key(filename): htmlpathname = htmldirectory + "/" + filename.replace( "-manual.svg", "-novalid.html") else: htmlpathname = htmldirectory + "/" + filename.replace( "-manual.svg", "-isvalid.html") @@ -201,7 +137,7 @@ def build_html_test_file(filename, svgdirectory, htmldirectory): logging.debug(htmlpathname) # read SVG data - svgfile = open(svgpathname, "r") + svgfile = open(svgpathname, "rU") svg = svgfile.read() svgfile.close() @@ -210,11 +146,11 @@ def build_html_test_file(filename, svgdirectory, htmldirectory): svgbefore = svg.split("")[1]; svg = svgbefore + svgafter - + # ignore files with SVG DOCTYPE and !ENTITY declarations (unsupported in HTML) if svg.find( "\n") htmlfile.write("

                                                                                        Source SVG: %s

                                                                                        \n" % os.path.basename(svgpathname) ) - + # insert SVG without any XML processing to avoid unexpected transformations on # encoding and entity refs, but remove from file (not valid in HTML) htmlfile.write(svgbefore) htmlfile.write(svgafter) - + htmlfile.write("\n") htmlfile.write("\n") htmlfile.close() - + return htmlpathname def create_dir_if_missing(directory): """Create the given directory if it doesn't exist""" - + d = os.path.dirname(directory) if not os.path.exists(directory): os.makedirs(directory) - - + + def validate_svg_dtd(filename,svg): """Prints legacy DTD markup validation status to stdout in a format suitable for pasting into invalid_svg_files dict above.""" - + # setup multipart/form-data POST body body = '' body = body + '--AaB03x\r\n' @@ -271,17 +207,17 @@ def validate_svg_dtd(filename,svg): body = body + '\r\n' body = body + '--AaB03x--\r\n' - # send request to W3 DTD validator for SVG 1.1 validation - headers = { "Content-type" : "multipart/form-data; boundary=AaB03x", "Content-length" : len(body) } + # send request to W3 DTD validator for SVG 1.1 validation + headers = { "Content-type" : "multipart/form-data; boundary=AaB03x", "Content-length" : len(body) } request = urllib2.Request("http://validator.w3.org/check?charset=utf-8&doctype=SVG+1.1&output=json", data=body, headers=headers) response = urllib2.urlopen(request, timeout=60) - + status = response.info().getheader('X-W3C-Validator-Status') logging.debug(status) - + if status == "Valid": return True - + print " ('%s', 'DTD %s')," % (filename, status) return False @@ -290,15 +226,16 @@ def main(): #logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') logging.debug('main: IN') - - svgdirectory = "../../svg/import" - htmldirectory = "../html-svg" + + ccdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + svgdirectory = os.path.join(os.path.dirname(ccdir), "svg", "import") + htmldirectory = os.path.join(ccdir, "html-svg") try: opts, args = getopt.getopt(sys.argv[1:],"",["svgdir=","outdir="]) except getopt.GetoptError: print 'build-svg-tests.py --svgdir --outdir ' - sys.exit(2) + sys.exit(2) for opt, arg in opts: print opt, arg @@ -306,10 +243,10 @@ def main(): svgdirectory = arg elif opt in ("-o", "--outdir"): htmldirectory = arg - - + + create_dir_if_missing(htmldirectory) build_html_testfiles(svgdirectory, htmldirectory) - - -main() \ No newline at end of file + + +main() diff --git a/tests/wpt/web-platform-tests/conformance-checkers/tools/dl.py b/tests/wpt/web-platform-tests/conformance-checkers/tools/dl.py new file mode 100644 index 00000000000..7b6beeb97e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/conformance-checkers/tools/dl.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +import os +ccdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +template = """ + +""" + +errors = { + "dl-in-p": "

                                                                                        text
                                                                                        text

                                                                                        ", + "header-in-dt": "
                                                                                        text
                                                                                        text
                                                                                        ", + "footer-in-dt": "
                                                                                        text
                                                                                        text
                                                                                        ", + "article-in-dt": "

                                                                                        text

                                                                                        text
                                                                                        ", + "aside-in-dt": "
                                                                                        text
                                                                                        ", + "nav-in-dt": "
                                                                                        text
                                                                                        ", + "section-in-dt": "

                                                                                        text

                                                                                        text
                                                                                        ", + "h1-in-dt": "

                                                                                        text

                                                                                        text
                                                                                        ", + "h2-in-dt": "

                                                                                        text

                                                                                        text
                                                                                        ", + "h3-in-dt": "

                                                                                        text

                                                                                        text
                                                                                        ", + "h4-in-dt": "

                                                                                        text

                                                                                        text
                                                                                        ", + "h5-in-dt": "
                                                                                        text
                                                                                        text
                                                                                        ", + "h6-in-dt": "
                                                                                        text
                                                                                        text
                                                                                        ", + "hgroup-in-dt": "

                                                                                        text

                                                                                        text
                                                                                        ", + "only-dt": "
                                                                                        1
                                                                                        ", + "only-dd": "
                                                                                        a
                                                                                        ", + "first-dd": "
                                                                                        a
                                                                                        2
                                                                                        b
                                                                                        ", + "last-dt": "
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        ", + "dd-in-template": "
                                                                                        1
                                                                                        ", + "dt-in-template": "
                                                                                        a
                                                                                        ", + "dl-contains-text": "
                                                                                        1
                                                                                        x
                                                                                        ", + "dl-contains-text-2": "
                                                                                        1
                                                                                        a
                                                                                        x
                                                                                        ", + "dl-contains-dl": "
                                                                                        1
                                                                                        a
                                                                                        ", + # div + "empty-div": "
                                                                                        ", + "empty-div-2": "
                                                                                        2
                                                                                        b
                                                                                        ", + "mixed-dt-dd-div": "
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        b
                                                                                        ", + "mixed-div-dt-dd": "
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        b
                                                                                        ", + "nested-divs": "
                                                                                        1
                                                                                        a
                                                                                        ", + "div-splitting-groups": "
                                                                                        1
                                                                                        a
                                                                                        ", + "div-splitting-groups-2": "
                                                                                        1
                                                                                        a
                                                                                        b
                                                                                        ", + "div-splitting-groups-3": "
                                                                                        1
                                                                                        2
                                                                                        b
                                                                                        ", + "div-contains-text": "
                                                                                        x
                                                                                        2
                                                                                        b
                                                                                        ", + "div-contains-dl": "
                                                                                        2
                                                                                        b
                                                                                        ", + "div-multiple-groups": "
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        a
                                                                                        b
                                                                                        3
                                                                                        4
                                                                                        5
                                                                                        a
                                                                                        ", +} + +non_errors_in_head = { + "parent-template-in-head": "", +} + +non_errors = { + "basic": "
                                                                                        text
                                                                                        text
                                                                                        ", + "empty": "
                                                                                        ", + "empty-dt-dd": "
                                                                                        ", + "multiple-groups": "
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        a
                                                                                        b
                                                                                        3
                                                                                        4
                                                                                        5
                                                                                        a
                                                                                        ", + "header-in-dd": "
                                                                                        text
                                                                                        text
                                                                                        ", + "footer-in-dd": "
                                                                                        text
                                                                                        text
                                                                                        ", + "article-in-dd": "
                                                                                        text

                                                                                        text

                                                                                        ", + "aside-in-dd": "
                                                                                        text
                                                                                        ", + "nav-in-dd": "
                                                                                        text
                                                                                        ", + "section-in-dd": "
                                                                                        text

                                                                                        text

                                                                                        ", + "h1-in-dd": "
                                                                                        text

                                                                                        text

                                                                                        ", + "h2-in-dd": "
                                                                                        text

                                                                                        text

                                                                                        ", + "h3-in-dd": "
                                                                                        text

                                                                                        text

                                                                                        ", + "h4-in-dd": "
                                                                                        text

                                                                                        text

                                                                                        ", + "h5-in-dd": "
                                                                                        text
                                                                                        text
                                                                                        ", + "h6-in-dd": "
                                                                                        text
                                                                                        text
                                                                                        ", + "p-in-dt": "

                                                                                        1

                                                                                        1

                                                                                        a
                                                                                        ", + "dl-in-dt": "
                                                                                        1
                                                                                        a
                                                                                        b
                                                                                        ", + "dl-in-dd": "
                                                                                        1
                                                                                        2
                                                                                        a
                                                                                        ", + "interactive": "
                                                                                        1
                                                                                        a
                                                                                        ", + "script": "
                                                                                        ", + "dt-script-dd": "
                                                                                        1
                                                                                        a
                                                                                        ", + "dt-template-dd": "
                                                                                        1
                                                                                        a
                                                                                        ", + # div + "div-basic": "
                                                                                        1
                                                                                        a
                                                                                        ", + "div-script": "
                                                                                        1
                                                                                        a
                                                                                        ", + "div-script-2": "
                                                                                        1
                                                                                        a
                                                                                        ", + "div-template": "
                                                                                        1
                                                                                        a
                                                                                        ", + "div-template-2": "
                                                                                        1
                                                                                        a
                                                                                        ", + "div-multiple-groups": "
                                                                                        1
                                                                                        a
                                                                                        2
                                                                                        a
                                                                                        b
                                                                                        3
                                                                                        4
                                                                                        5
                                                                                        a
                                                                                        ", +} + +for key in errors.keys(): + template_error = template + template_error += 'invalid %s\n' % key + template_error += errors[key] + file = open(os.path.join(ccdir, "html/elements/dl/%s-novalid.html" % key), 'wb') + file.write(template_error) + file.close() + +file = open(os.path.join(ccdir, "html/elements/dl/dl-isvalid.html"), 'wb') +file.write(template + 'valid dl\n') +for key in non_errors_in_head.keys(): + file.write('%s \n' % (non_errors_in_head[key], key)) +file.write('\n') +for key in non_errors.keys(): + file.write('%s \n' % (non_errors[key], key)) +file.close() +# vim: ts=4:sw=4 diff --git a/tests/wpt/web-platform-tests/conformance-checkers/tools/index-isvalid.html b/tests/wpt/web-platform-tests/conformance-checkers/tools/index-isvalid.html deleted file mode 100644 index 5f3e02fc0ba..00000000000 --- a/tests/wpt/web-platform-tests/conformance-checkers/tools/index-isvalid.html +++ /dev/null @@ -1,451 +0,0 @@ - - - - SVG in HTML Test Index - - - -

                                                                                        SVG in HTML Test Index

                                                                                        -

                                                                                        ../html-svg/animate-elem-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-05-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-06-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-07-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-08-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-09-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-10-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-11-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-12-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-13-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-14-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-15-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-17-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-19-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-20-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-21-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-22-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-23-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-25-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-26-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-27-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-28-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-29-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-30-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-31-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-32-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-33-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-34-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-35-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-36-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-37-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-38-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-39-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-41-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-44-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-46-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-52-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-53-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-60-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-61-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-62-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-63-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-64-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-65-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-66-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-67-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-68-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-69-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-70-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-78-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-80-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-81-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-82-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-83-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-84-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-85-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-86-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-87-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-88-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-89-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-90-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-91-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-elem-92-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-interact-events-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-interact-pevents-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-interact-pevents-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-interact-pevents-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/animate-interact-pevents-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/color-prof-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/color-prop-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/color-prop-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/color-prop-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/color-prop-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/color-prop-05-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-coord-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-coord-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-dom-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-05-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-06-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-07-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-08-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-09-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-10-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-11-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-12-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-13-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-trans-14-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-transformattr-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-transformattr-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-transformattr-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-transformattr-05-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-units-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-units-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-units-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/coords-viewattr-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-background-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-blend-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-color-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-composite-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-composite-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-composite-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-composite-05-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-comptran-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-conv-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-conv-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-diffuse-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-displace-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-displace-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-example-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-felem-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-felem-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-gauss-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-gauss-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-gauss-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-image-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-image-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-image-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-image-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-image-05-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-light-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-light-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-light-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-light-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-morph-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-offset-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-offset-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-overview-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-overview-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-overview-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-specular-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-tile-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-turb-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/filters-turb-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-desc-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-desc-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-desc-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-desc-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-desc-05-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-elem-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-elem-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-elem-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-elem-04-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-elem-05-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-elem-06-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-elem-07-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-glyph-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-glyph-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/fonts-kern-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/imp-path-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-cursor-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-dom-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-events-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-events-202-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-events-203-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-order-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-order-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-order-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-pevents-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-pevents-10-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-pointer-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-zoom-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-zoom-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/interact-zoom-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/linking-a-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/linking-a-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/linking-a-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/linking-a-05-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/linking-a-07-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/linking-a-08-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/linking-frag-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/linking-uri-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/linking-uri-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/linking-uri-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-mask-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-mask-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-opacity-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-04-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-05-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-06-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-07-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-08-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-10-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-11-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-12-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-13-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/masking-path-14-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-control-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-control-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-control-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-control-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-control-05-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-control-06-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-fill-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-fill-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-fill-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-fill-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-fill-05-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-marker-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-marker-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-marker-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-marker-05-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-marker-06-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-marker-07-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-marker-properties-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-render-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-render-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-stroke-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-stroke-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-stroke-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-stroke-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-stroke-05-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-stroke-06-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-stroke-07-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-stroke-08-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-stroke-09-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/painting-stroke-10-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-05-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-06-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-07-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-08-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-09-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-10-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-12-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-13-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-14-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-15-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-16-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-17-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/paths-data-19-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-04-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-05-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-06-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-07-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-08-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-09-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-10-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-11-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-12-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-13-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-14-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-15-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-16-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-17-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-18-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-20-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-21-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-22-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-24-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-grad-stops-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-pattern-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-pattern-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-pattern-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-pattern-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-pattern-05-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-pattern-06-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-pattern-07-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-pattern-08-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/pservers-pattern-09-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/render-elems-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/render-elems-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/render-elems-06-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/render-elems-07-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/render-elems-08-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/render-groups-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/render-groups-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/script-handle-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/script-handle-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/script-handle-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/script-handle-04-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/script-specify-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-circle-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-circle-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-ellipse-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-ellipse-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-ellipse-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-grammar-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-intro-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-intro-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-line-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-line-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-polygon-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-polygon-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-polygon-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-polyline-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-polyline-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-rect-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-rect-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-rect-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-rect-05-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-rect-06-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/shapes-rect-07-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-cond-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-cond-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-cond-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-cond-overview-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-cond-overview-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-cond-overview-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-cond-overview-05-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-defs-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-dom-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-dom-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-dom-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-dom-04-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-dom-05-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-dom-06-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-dom-12-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-dom-16-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-dom-18-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-frag-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-frag-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-frag-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-frag-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-frag-06-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-group-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-group-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-group-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-05-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-06-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-07-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-08-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-09-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-10-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-11-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-13-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-14-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-15-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-16-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-17-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-18-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-image-19-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-svg-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-svg-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-svg-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-symbol-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-03-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-04-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-05-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-06-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-07-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-08-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-09-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-10-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-14-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/struct-use-15-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-class-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-css-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-css-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-css-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-css-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-css-05-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-css-06-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-css-07-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-css-08-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-css-09-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-css-10-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-elem-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-inherit-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-pres-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-pres-03-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-pres-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/styling-pres-05-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-align-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-align-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-align-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-align-04-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-align-05-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-align-06-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-align-07-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-align-08-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-altglyph-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-altglyph-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-altglyph-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-bidi-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-deco-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-dom-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-dom-04-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-fonts-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-fonts-02-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-fonts-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-fonts-202-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-fonts-203-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-fonts-204-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-01-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-05-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-06-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-07-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-09-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-10-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-11-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-intro-12-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-path-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-path-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-spacing-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-03-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-04-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-05-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-06-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-07-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-08-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-09-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-10-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-11-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-text-12-t-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-tref-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-tselect-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-tspan-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/text-tspan-02-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/types-basic-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/types-basic-02-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/types-dom-01-b-isvalid.html

                                                                                        -

                                                                                        ../html-svg/types-dom-06-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/types-dom-svgfittoviewbox-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/types-dom-svglengthlist-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/types-dom-svgnumberlist-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/types-dom-svgstringlist-01-f-isvalid.html

                                                                                        -

                                                                                        ../html-svg/types-dom-svgtransformable-01-f-isvalid.html

                                                                                        - - diff --git a/tests/wpt/web-platform-tests/conformance-checkers/tools/ins-del-datetime.py b/tests/wpt/web-platform-tests/conformance-checkers/tools/ins-del-datetime.py index 3767a7d709f..88ccc443d80 100644 --- a/tests/wpt/web-platform-tests/conformance-checkers/tools/ins-del-datetime.py +++ b/tests/wpt/web-platform-tests/conformance-checkers/tools/ins-del-datetime.py @@ -106,7 +106,6 @@ non_errors = { "date-1968-02-29": "1968-02-29", "date-1900-02-28": "1900-02-28", "date-2100-02-28": "2100-02-28", - "date-2100-02-28": "2100-02-28", "date-2200-02-28": "2200-02-28", "date-2014-02-28": "2014-02-28", "date-day-01-31": "2002-01-31", diff --git a/tests/wpt/web-platform-tests/conformance-checkers/tools/url.py b/tests/wpt/web-platform-tests/conformance-checkers/tools/url.py index f97d428abe9..21fd27e3e41 100644 --- a/tests/wpt/web-platform-tests/conformance-checkers/tools/url.py +++ b/tests/wpt/web-platform-tests/conformance-checkers/tools/url.py @@ -3,9 +3,6 @@ import os ccdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # based on https://github.com/w3c/web-platform-tests/blob/275544eab54a0d0c7f74ccc2baae9711293d8908/url/urltestdata.txt invalid = { - "scheme-trailing-tab": "a:\tfoo.com", - "scheme-trailing-newline": "a:\nfoo.com", - "scheme-trailing-cr": "a:\rfoo.com", "scheme-trailing-space": "a: foo.com", "scheme-trailing-tab": "a:\tfoo.com", "scheme-trailing-newline": "a:\nfoo.com", @@ -105,7 +102,6 @@ valid_absolute = { "port-0": "http://f:0/c", "port-00000000000000": "http://f:00000000000000/c", "port-00000000000000000000080": "http://f:00000000000000000000080/c", - "port-00000000000000000000080": "http://f:00000000000000000000080/c", "userinfo-host-port-path": "http://a:b@c:29/d", "userinfo-username-non-alpha": "http://foo.com:b@d/", "query-contains-question-mark": "http://foo/abcd?efgh?ijkl", diff --git a/tests/wpt/web-platform-tests/console/OWNERS b/tests/wpt/web-platform-tests/console/OWNERS new file mode 100644 index 00000000000..6ff90b755fc --- /dev/null +++ b/tests/wpt/web-platform-tests/console/OWNERS @@ -0,0 +1,2 @@ +@domenic +@pwnall diff --git a/tests/wpt/web-platform-tests/console/console-is-a-namespace.any.js b/tests/wpt/web-platform-tests/console/console-is-a-namespace.any.js new file mode 100644 index 00000000000..a4aae7ffce8 --- /dev/null +++ b/tests/wpt/web-platform-tests/console/console-is-a-namespace.any.js @@ -0,0 +1,27 @@ +"use strict"; +// https://heycam.github.io/webidl/#es-namespaces +// https://console.spec.whatwg.org/#console-namespace + +test(() => { + assert_true(self.hasOwnProperty("console")); +}, "console exists on the global object"); + +test(() => { + const propDesc = Object.getOwnPropertyDescriptor(self, "console"); + assert_equals(propDesc.writable, true, "must be writable"); + assert_equals(propDesc.enumerable, false, "must not be enumerable"); + assert_equals(propDesc.configurable, true, "must be configurable"); + assert_equals(propDesc.value, console, "must have the right value"); +}, "console has the right property descriptors"); + +test(() => { + assert_false("Console" in self); +}, "Console (uppercase, as if it were an interface) must not exist"); + +test(() => { + const prototype1 = Object.getPrototypeOf(console); + const prototype2 = Object.getPrototypeOf(prototype1); + + assert_equals(Object.getOwnPropertyNames(prototype1).length, 0, "The [[Prototype]] must have no properties"); + assert_equals(prototype2, Object.prototype, "The [[Prototype]]'s [[Prototype]] must be %ObjectPrototype%"); +}, "The prototype chain must be correct"); diff --git a/tests/wpt/web-platform-tests/content-security-policy/OWNERS b/tests/wpt/web-platform-tests/content-security-policy/OWNERS index 27348607493..1df5d1ae68f 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/OWNERS +++ b/tests/wpt/web-platform-tests/content-security-policy/OWNERS @@ -1,2 +1 @@ -@sideshowbarker @hillbrad diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-blacklisted-ref.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-blacklisted-ref.html new file mode 100644 index 00000000000..fdfbdd93de3 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-blacklisted-ref.html @@ -0,0 +1,6 @@ + + +csp font-src: blacklisted + +          +

                                                                                        The test passes if the line above are boxes in the test and glyphs in the reference.

                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-blacklisted.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-blacklisted.html new file mode 100644 index 00000000000..a430a417d8d --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-blacklisted.html @@ -0,0 +1,9 @@ + + + +csp font-src: blacklisted + + + +          +

                                                                                        The test passes if the line above are boxes in the test and glyphs in the reference.

                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-whitelisted-ref.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-whitelisted-ref.html new file mode 100644 index 00000000000..25ad3bd75cf --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-whitelisted-ref.html @@ -0,0 +1,6 @@ + + +csp font-src: whitelisted + +          +

                                                                                        The test passes if the line above shows the same glyphs in the reference.

                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-whitelisted.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-whitelisted.html new file mode 100644 index 00000000000..f3558f76639 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-whitelisted.html @@ -0,0 +1,9 @@ + + + +csp font-src: whitelisted + + + +          +

                                                                                        The test passes if the line above shows the same glyphs in the reference.

                                                                                        \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/fonts.css b/tests/wpt/web-platform-tests/content-security-policy/font-src/fonts.css new file mode 100644 index 00000000000..30dd02cdb73 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/fonts.css @@ -0,0 +1,8 @@ +@font-face { + font-family: 'Halflings'; + src: url('/tools/runner/fonts/glyphicons-halflings-regular.woff') format('woff'); +} + +body { + font-family: 'Halflings', Fallback, sans-serif; +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/navigation/to-javascript-url.html b/tests/wpt/web-platform-tests/content-security-policy/navigation/to-javascript-url.html new file mode 100644 index 00000000000..d882330cece --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/navigation/to-javascript-url.html @@ -0,0 +1,57 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_eval.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_eval.html new file mode 100755 index 00000000000..96ef2496b5b --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_eval.html @@ -0,0 +1,31 @@ + + + + + Scripts injected via `eval` are allowed with `strict-dynamic` with `unsafe-eval`. + + + + + + + +

                                                                                        Scripts injected via `eval` are allowed with `strict-dynamic` with `unsafe-eval`.

                                                                                        +
                                                                                        + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_eval.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_eval.html.headers new file mode 100755 index 00000000000..dc5f30a03a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_eval.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' 'unsafe-eval' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_new_function.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_new_function.html new file mode 100755 index 00000000000..3041db056f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_new_function.html @@ -0,0 +1,31 @@ + + + + + Scripts injected via `new Function()` are allowed with `strict-dynamic` with `unsafe-eval`. + + + + + + + +

                                                                                        Scripts injected via `new Function()` are allowed with `strict-dynamic` with `unsafe-eval`.

                                                                                        +
                                                                                        + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_new_function.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_new_function.html.headers new file mode 100755 index 00000000000..dc5f30a03a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_and_unsafe_eval_new_function.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' 'unsafe-eval' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_discard_whitelist.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_discard_whitelist.html new file mode 100755 index 00000000000..4e194468304 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_discard_whitelist.html @@ -0,0 +1,32 @@ + + + + + Whitelists are discarded with `strict-dynamic` in the script-src directive. + + + + + + + +

                                                                                        Whitelists are discarded with `strict-dynamic` in the script-src directive.

                                                                                        +
                                                                                        + + + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_discard_whitelist.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_discard_whitelist.html.headers new file mode 100755 index 00000000000..8499eb0559d --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_discard_whitelist.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'self' 'strict-dynamic' 'nonce-dummy' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_different_nonce.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_different_nonce.html new file mode 100755 index 00000000000..cd2ae8c16c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_different_nonce.html @@ -0,0 +1,68 @@ + + + + + A separate policy with more nonces works correctly with `strict-dynamic` in the script-src directive. + + + + + + + +

                                                                                        A separate policy with more nonces works correctly with `strict-dynamic` in the script-src directive.

                                                                                        +
                                                                                        + + + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_different_nonce.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_different_nonce.html.headers new file mode 100755 index 00000000000..63d96aaf1ee --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_different_nonce.html.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' +Content-Security-Policy: script-src 'nonce-dummy' 'nonce-dummy2' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_whitelist.sub.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_whitelist.sub.html new file mode 100755 index 00000000000..94490de1b46 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_whitelist.sub.html @@ -0,0 +1,61 @@ + + + + + Whitelists in a separate policy are honored with `strict-dynamic` in the script-src directive. + + + + + + + +

                                                                                        Whitelists in a separate policy are honored with `strict-dynamic` in the script-src directive.

                                                                                        +
                                                                                        + + + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_whitelist.sub.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_whitelist.sub.html.headers new file mode 100755 index 00000000000..5b4078efd37 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_whitelist.sub.html.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' +Content-Security-Policy: script-src 'self' 'nonce-dummy' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_report_only.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_report_only.html new file mode 100755 index 00000000000..1e057ba947e --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_report_only.html @@ -0,0 +1,44 @@ + + + + + A separate Report-Only policy does not influence `strict-dynamic` in the script-src directive. + + + + + + + +

                                                                                        A separate Report-Only policy does not influence `strict-dynamic` in the script-src directive.

                                                                                        +
                                                                                        + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_report_only.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_report_only.html.headers new file mode 100755 index 00000000000..7883f80ef61 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_double_policy_report_only.html.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' +Content-Security-Policy-Report-Only: script-src 'none' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_eval.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_eval.html new file mode 100755 index 00000000000..62fda4f3d23 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_eval.html @@ -0,0 +1,37 @@ + + + + + Scripts injected via `eval` are not allowed with `strict-dynamic` without `unsafe-eval`. + + + + + + + +

                                                                                        Scripts injected via `eval` are not allowed with `strict-dynamic` without `unsafe-eval`.

                                                                                        +
                                                                                        + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_eval.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_eval.html.headers new file mode 100755 index 00000000000..b7918c93323 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_eval.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_hashes.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_hashes.html new file mode 100755 index 00000000000..acb9f00d808 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_hashes.html @@ -0,0 +1,52 @@ + + + + + `strict-dynamic` allows scripts matching hashes present in the policy. + + + + + + + +

                                                                                        `strict-dynamic` allows scripts matching hashes present in the policy.

                                                                                        +
                                                                                        + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_hashes.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_hashes.html.headers new file mode 100755 index 00000000000..f48fca3ec49 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_hashes.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' 'sha256-yU6Q7nD1TCBB9JvY06iIJ8ONLOPU4g8ml5JCDgXkv+M=' 'sha256-IFt1v6itHgqlrtInbPm/y7qyWcAlDbPgZM+92C5EZ5o=' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html new file mode 100644 index 00000000000..d640421cb74 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html @@ -0,0 +1,32 @@ + + + + + `strict-dynamic` does not drop whitelists in `img-src`. + + + + + + + +

                                                                                        `strict-dynamic` does not drop whitelists in `img-src`.

                                                                                        +
                                                                                        + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html.headers new file mode 100644 index 00000000000..75a41c9e251 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: img-src 'strict-dynamic' 'self' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_meta_tag.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_meta_tag.html new file mode 100755 index 00000000000..fa38b65a238 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_meta_tag.html @@ -0,0 +1,76 @@ + + + + + A `strict-dynamic` policy can be served in a META tag. + + + + + + + + +

                                                                                        A `strict-dynamic` policy can be served in a META tag.

                                                                                        +
                                                                                        + + + + + + + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_meta_tag.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_meta_tag.html.headers new file mode 100755 index 00000000000..519dcaacb1f --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_meta_tag.html.headers @@ -0,0 +1,4 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_new_function.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_new_function.html new file mode 100755 index 00000000000..2b75276588f --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_new_function.html @@ -0,0 +1,37 @@ + + + + + Scripts injected via `new Function()` are not allowed with `strict-dynamic` without `unsafe-eval`. + + + + + + + +

                                                                                        Scripts injected via `new Function()` are not allowed with `strict-dynamic` without `unsafe-eval`.

                                                                                        +
                                                                                        + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_new_function.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_new_function.html.headers new file mode 100755 index 00000000000..b7918c93323 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_new_function.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted.html new file mode 100755 index 00000000000..63b7a612470 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted.html @@ -0,0 +1,76 @@ + + + + + Nonced and non parser-inserted scripts should run with `strict-dynamic` in the script-src directive. + + + + + + + +

                                                                                        Nonced and non parser-inserted scripts should run with `strict-dynamic` in the script-src directive.

                                                                                        +
                                                                                        + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted.html.headers new file mode 100755 index 00000000000..b7918c93323 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted_incorrect_nonce.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted_incorrect_nonce.html new file mode 100755 index 00000000000..19d2ae1acc7 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted_incorrect_nonce.html @@ -0,0 +1,29 @@ + + + + + Scripts without a correct nonce should not run with `strict-dynamic` in the script-src directive. + + + + + + + +

                                                                                        Scripts without a correct nonce should not run with `strict-dynamic` in the script-src directive.

                                                                                        +
                                                                                        + + + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted_incorrect_nonce.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted_incorrect_nonce.html.headers new file mode 100755 index 00000000000..b7918c93323 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_non_parser_inserted_incorrect_nonce.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html new file mode 100755 index 00000000000..c167e5ef625 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html @@ -0,0 +1,205 @@ + + + + + Parser-inserted scripts without a correct nonce are not allowed with `strict-dynamic` in the script-src directive. + + + + + + + +

                                                                                        Parser-inserted scripts without a correct nonce are not allowed with `strict-dynamic` in the script-src directive.

                                                                                        +
                                                                                        + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html.headers new file mode 100755 index 00000000000..b7918c93323 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_correct_nonce.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_correct_nonce.html new file mode 100755 index 00000000000..9368089781d --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_correct_nonce.html @@ -0,0 +1,110 @@ + + + + + Parser-inserted scripts with a correct nonce are allowed with `strict-dynamic` in the script-src directive. + + + + + + + +

                                                                                        Parser-inserted scripts with a correct nonce are allowed with `strict-dynamic` in the script-src directive.

                                                                                        +
                                                                                        + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_correct_nonce.html.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_correct_nonce.html.headers new file mode 100755 index 00000000000..b7918c93323 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted_correct_nonce.html.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy' diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/simpleSourcedScript.js b/tests/wpt/web-platform-tests/content-security-policy/script-src/simpleSourcedScript.js new file mode 100755 index 00000000000..deca86508ff --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/simpleSourcedScript.js @@ -0,0 +1 @@ +window.postMessage(document.currentScript.id, "*"); diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/blockeduri-eval.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/blockeduri-eval.html new file mode 100644 index 00000000000..c9d74e623f5 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/blockeduri-eval.html @@ -0,0 +1,19 @@ + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/blockeduri-inline.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/blockeduri-inline.html new file mode 100644 index 00000000000..c4862337407 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/blockeduri-inline.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/idl.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/idl.html new file mode 100644 index 00000000000..17f492e7344 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/idl.html @@ -0,0 +1,49 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/targeting.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/targeting.html new file mode 100644 index 00000000000..36069a5959d --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/targeting.html @@ -0,0 +1,159 @@ + + + + + + + + + +Click me! + + + + + + +
                                                                                        + + + +
                                                                                        + + + + + + + + + + +Click me also! + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/support/echo-policy.py b/tests/wpt/web-platform-tests/content-security-policy/support/echo-policy.py new file mode 100644 index 00000000000..ebde3dc5a4b --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/support/echo-policy.py @@ -0,0 +1,3 @@ +def main(request, response): + policy = request.GET.first("policy"); + return [("Content-Type", "text/html"), ("Content-Security-Policy", policy)], "Echo." diff --git a/tests/wpt/web-platform-tests/content-security-policy/support/ping.js b/tests/wpt/web-platform-tests/content-security-policy/support/ping.js new file mode 100644 index 00000000000..750ae45f969 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/support/ping.js @@ -0,0 +1,12 @@ +if (typeof ServiceWorkerGlobalScope === "function") { + self.onmessage = function (e) { e.source.postMessage("ping"); }; +} else if (typeof SharedWorkerGlobalScope === "function") { + onconnect = function (e) { + var port = e.ports[0]; + + port.onmessage = function () { port.postMessage("ping"); } + port.postMessage("ping"); + }; +} else if (typeof DedicatedWorkerGlobalScope === "function") { + self.postMessage("ping"); +} diff --git a/tests/wpt/web-platform-tests/content-security-policy/support/testharness-helper.js b/tests/wpt/web-platform-tests/content-security-policy/support/testharness-helper.js new file mode 100644 index 00000000000..a1eaa891e03 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/support/testharness-helper.js @@ -0,0 +1,131 @@ +function assert_no_csp_event_for_url(test, url) { + document.addEventListener("securitypolicyviolation", test.step_func(e => { + if (e.blockedURI !== url) + return; + assert_unreached("SecurityPolicyViolation event fired for " + url); + })); +} + +function assert_no_event(test, obj, name) { + obj.addEventListener(name, test.unreached_func("The '" + name + "' event should not have fired.")); +} + +function waitUntilCSPEventForURL(test, url) { + return new Promise((resolve, reject) => { + document.addEventListener("securitypolicyviolation", test.step_func(e => { + if (e.blockedURI == url) + resolve(e); + })); + }); +} + +function waitUntilEvent(obj, name) { + return new Promise((resolve, reject) => { + obj.addEventListener(name, resolve); + }); +} + +// Given the URL of a worker that pings its opener upon load, this +// function builds a test that asserts that the ping is received, +// and that no CSP event fires. +function assert_worker_is_loaded(url, description) { + async_test(t => { + assert_no_csp_event_for_url(t, url); + var w = new Worker(url); + assert_no_event(t, w, "error"); + waitUntilEvent(w, "message") + .then(t.step_func_done(e => { + assert_equals(e.data, "ping"); + })); + }, description); +} + +function assert_shared_worker_is_loaded(url, description) { + async_test(t => { + assert_no_csp_event_for_url(t, url); + var w = new SharedWorker(url); + assert_no_event(t, w, "error"); + waitUntilEvent(w.port, "message") + .then(t.step_func_done(e => { + assert_equals(e.data, "ping"); + })); + w.port.start(); + }, description); +} + +function assert_service_worker_is_loaded(url, description) { + promise_test(t => { + assert_no_csp_event_for_url(t, url); + return Promise.all([ + waitUntilEvent(navigator.serviceWorker, "message") + .then(e => { + assert_equals(e.data, "ping"); + }), + navigator.serviceWorker.register(url, { scope: url }) + .then(r => { + var sw = r.active || r.installing || r.waiting; + t.add_cleanup(_ => r.unregister()); + sw.postMessage("pong?"); + }) + ]); + }, description); +} + +// Given the URL of a worker that pings its opener upon load, this +// function builds a test that asserts that the constructor throws +// a SecurityError, and that a CSP event fires. +function assert_worker_is_blocked(url, description) { + async_test(t => { + // If |url| is a blob, it will be stripped down to "blob" for reporting. + var reportedURL = new URL(url).protocol == "blob:" ? "blob" : url; + waitUntilCSPEventForURL(t, reportedURL) + .then(t.step_func_done(e => { + assert_equals(e.blockedURI, reportedURL); + assert_equals(e.violatedDirective, "worker-src"); + assert_equals(e.effectiveDirective, "worker-src"); + })); + + // TODO(mkwst): We shouldn't be throwing here. We should be firing an + // `error` event on the Worker. https://crbug.com/663298 + assert_throws("SecurityError", function () { + var w = new Worker(url); + }); + }, description); +} + +function assert_shared_worker_is_blocked(url, description) { + async_test(t => { + // If |url| is a blob, it will be stripped down to "blob" for reporting. + var reportedURL = new URL(url).protocol == "blob:" ? "blob" : url; + waitUntilCSPEventForURL(t, reportedURL) + .then(t.step_func_done(e => { + assert_equals(e.blockedURI, reportedURL); + assert_equals(e.violatedDirective, "worker-src"); + assert_equals(e.effectiveDirective, "worker-src"); + })); + + // TODO(mkwst): We shouldn't be throwing here. We should be firing an + // `error` event on the SharedWorker. https://crbug.com/663298 + assert_throws("SecurityError", function () { + var w = new SharedWorker(url); + }); + }, description); +} + +function assert_service_worker_is_blocked(url, description) { + promise_test(t => { + assert_no_event(t, navigator.serviceWorker, "message"); + // If |url| is a blob, it will be stripped down to "blob" for reporting. + var reportedURL = new URL(url).protocol == "blob:" ? "blob" : url; + return Promise.all([ + waitUntilCSPEventForURL(t, reportedURL) + .then(t.step_func_done(e => { + assert_equals(e.blockedURI, reportedURL); + assert_equals(e.violatedDirective, "worker-src"); + assert_equals(e.effectiveDirective, "worker-src"); + })), + promise_rejects(t, "SecurityError", navigator.serviceWorker.register(url, { scope: url })) + ]); + }, description); +} + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-child.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-child.sub.html new file mode 100644 index 00000000000..cff8f953af1 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-child.sub.html @@ -0,0 +1,13 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-fallback.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-fallback.sub.html new file mode 100644 index 00000000000..25602573fbd --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-fallback.sub.html @@ -0,0 +1,13 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-list.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-list.sub.html new file mode 100644 index 00000000000..fc4f9123247 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-list.sub.html @@ -0,0 +1,13 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-none.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-none.sub.html new file mode 100644 index 00000000000..62c550788a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-none.sub.html @@ -0,0 +1,13 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-self.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-self.sub.html new file mode 100644 index 00000000000..ba0cd1bb43b --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/dedicated-self.sub.html @@ -0,0 +1,9 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-child.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-child.https.sub.html new file mode 100644 index 00000000000..5036cae5832 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-child.https.sub.html @@ -0,0 +1,10 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-fallback.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-fallback.https.sub.html new file mode 100644 index 00000000000..682a805e7c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-fallback.https.sub.html @@ -0,0 +1,9 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-list.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-list.https.sub.html new file mode 100644 index 00000000000..251c856d3c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-list.https.sub.html @@ -0,0 +1,9 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-none.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-none.https.sub.html new file mode 100644 index 00000000000..467a8ce2cf4 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-none.https.sub.html @@ -0,0 +1,9 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-self.https.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-self.https.sub.html new file mode 100644 index 00000000000..d725e730129 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/service-self.https.sub.html @@ -0,0 +1,9 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-child.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-child.sub.html new file mode 100644 index 00000000000..93dd38b6f8e --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-child.sub.html @@ -0,0 +1,13 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-fallback.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-fallback.sub.html new file mode 100644 index 00000000000..cfe9190a43e --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-fallback.sub.html @@ -0,0 +1,13 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-list.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-list.sub.html new file mode 100644 index 00000000000..6c985c76eb6 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-list.sub.html @@ -0,0 +1,13 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-none.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-none.sub.html new file mode 100644 index 00000000000..b443f321d3c --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-none.sub.html @@ -0,0 +1,13 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-self.sub.html b/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-self.sub.html new file mode 100644 index 00000000000..e6b368aab18 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/worker-src/shared-self.sub.html @@ -0,0 +1,10 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/cors/OWNERS b/tests/wpt/web-platform-tests/cors/OWNERS index c8979792445..5080e023134 100644 --- a/tests/wpt/web-platform-tests/cors/OWNERS +++ b/tests/wpt/web-platform-tests/cors/OWNERS @@ -1,4 +1,3 @@ -@sideshowbarker @zqzhang @Velmont @hillbrad diff --git a/tests/wpt/web-platform-tests/cssom/serialize-values.html b/tests/wpt/web-platform-tests/cssom/serialize-values.html new file mode 100644 index 00000000000..8f6f3d28d03 --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom/serialize-values.html @@ -0,0 +1,596 @@ + + +CSSOM serialize values + + + + +
                                                                                        +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html b/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html new file mode 100644 index 00000000000..ecc7810e8df --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/CustomElementRegistry.html @@ -0,0 +1,580 @@ + + + +Custom Elements: CustomElementRegistry interface + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/Document-createElement.html b/tests/wpt/web-platform-tests/custom-elements/Document-createElement.html new file mode 100644 index 00000000000..f8b3a94c00d --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/Document-createElement.html @@ -0,0 +1,332 @@ + + + +Custom Elements: document.createElement should create an element with synchronous custom elements flag set + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/adopted-callback.html b/tests/wpt/web-platform-tests/custom-elements/adopted-callback.html new file mode 100644 index 00000000000..5c08a04a421 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/adopted-callback.html @@ -0,0 +1,135 @@ + + + +Custom Elements: adoptedCallback + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/attribute-changed-callback.html b/tests/wpt/web-platform-tests/custom-elements/attribute-changed-callback.html new file mode 100644 index 00000000000..bd467912b99 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/attribute-changed-callback.html @@ -0,0 +1,223 @@ + + + +Custom Elements: attributeChangedCallback + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/connected-callbacks.html b/tests/wpt/web-platform-tests/custom-elements/connected-callbacks.html new file mode 100644 index 00000000000..d6e68262a85 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/connected-callbacks.html @@ -0,0 +1,88 @@ + + + +Custom Elements: connectedCallback + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/custom-element-reaction-queue.html b/tests/wpt/web-platform-tests/custom-elements/custom-element-reaction-queue.html new file mode 100644 index 00000000000..737dab117d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/custom-element-reaction-queue.html @@ -0,0 +1,157 @@ + + + +Custom Elements: Each element must have its own custom element reaction queue + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/disconnected-callbacks.html b/tests/wpt/web-platform-tests/custom-elements/disconnected-callbacks.html new file mode 100644 index 00000000000..7f5a4d0f8e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/disconnected-callbacks.html @@ -0,0 +1,93 @@ + + + +Custom Elements: disconnectedCallback + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html b/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html index 04b4c498649..ab43803c244 100644 --- a/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html +++ b/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html @@ -5,120 +5,124 @@ - + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-element-in-document-write.html b/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-element-in-document-write.html new file mode 100644 index 00000000000..3b5256677d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-element-in-document-write.html @@ -0,0 +1,32 @@ + + + +Custom Elements: Changes to the HTML parser + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-element-synchronously.html b/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-element-synchronously.html new file mode 100644 index 00000000000..206aa17f20b --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-element-synchronously.html @@ -0,0 +1,51 @@ + + + +Custom Elements: Changes to the HTML parser + + + + + + + + +
                                                                                        + +
                                                                                        + + +
                                                                                        +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements.html b/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements.html new file mode 100644 index 00000000000..3f13c50a0e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements.html @@ -0,0 +1,48 @@ + + + +Custom Elements: Changes to the HTML parser + + + + + + + + +
                                                                                        + + + + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/parser/parser-fallsback-to-unknown-element.html b/tests/wpt/web-platform-tests/custom-elements/parser/parser-fallsback-to-unknown-element.html new file mode 100644 index 00000000000..82e970f1ae8 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/parser/parser-fallsback-to-unknown-element.html @@ -0,0 +1,91 @@ + + + +Custom Elements: Changes to the HTML parser + + + + + + + + +
                                                                                        + + + + + + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/parser/parser-sets-attributes-and-children.html b/tests/wpt/web-platform-tests/custom-elements/parser/parser-sets-attributes-and-children.html new file mode 100644 index 00000000000..ba331370a78 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/parser/parser-sets-attributes-and-children.html @@ -0,0 +1,59 @@ + + + +Custom Elements: Changes to the HTML parser + + + + + + + + +
                                                                                        + +hello world + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/parser/parser-uses-constructed-element.html b/tests/wpt/web-platform-tests/custom-elements/parser/parser-uses-constructed-element.html new file mode 100644 index 00000000000..393bbec698b --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/parser/parser-uses-constructed-element.html @@ -0,0 +1,75 @@ + + + +Custom Elements: HTML parser must construct a custom element instead of upgrading + + + + + + + + +
                                                                                        + + + + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/parser/parser-uses-registry-of-owner-document.html b/tests/wpt/web-platform-tests/custom-elements/parser/parser-uses-registry-of-owner-document.html new file mode 100644 index 00000000000..efdc3a2a47c --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/parser/parser-uses-registry-of-owner-document.html @@ -0,0 +1,126 @@ + + + +Custom Elements: HTML parser must use the owner document's custom element registry + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reaction-timing.html b/tests/wpt/web-platform-tests/custom-elements/reaction-timing.html new file mode 100644 index 00000000000..9e5bafbedfe --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reaction-timing.html @@ -0,0 +1,88 @@ + + + +Custom Elements: Custom element reactions must be invoked before returning to author scripts + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/Attr.html b/tests/wpt/web-platform-tests/custom-elements/reactions/Attr.html new file mode 100644 index 00000000000..c9fa37f9611 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/Attr.html @@ -0,0 +1,23 @@ + + + +Custom Elements: CEReactions on Attr interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/CSSStyleDeclaration.html b/tests/wpt/web-platform-tests/custom-elements/reactions/CSSStyleDeclaration.html new file mode 100644 index 00000000000..bf9e00ab528 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/CSSStyleDeclaration.html @@ -0,0 +1,85 @@ + + + +Custom Elements: CEReactions on CSSStyleDeclaration interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/ChildNode.html b/tests/wpt/web-platform-tests/custom-elements/reactions/ChildNode.html new file mode 100644 index 00000000000..756f1722988 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/ChildNode.html @@ -0,0 +1,35 @@ + + + +Custom Elements: CEReactions on ChildNode interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/DOMStringMap.html b/tests/wpt/web-platform-tests/custom-elements/reactions/DOMStringMap.html new file mode 100644 index 00000000000..5e34dfe2ba1 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/DOMStringMap.html @@ -0,0 +1,96 @@ + + + +Custom Elements: CEReactions on DOMStringMap interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/DOMTokenList.html b/tests/wpt/web-platform-tests/custom-elements/reactions/DOMTokenList.html new file mode 100644 index 00000000000..e8c26df498f --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/DOMTokenList.html @@ -0,0 +1,219 @@ + + + +Custom Elements: CEReactions on DOMTokenList interface + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/Document.html b/tests/wpt/web-platform-tests/custom-elements/reactions/Document.html new file mode 100644 index 00000000000..98c642bcf26 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/Document.html @@ -0,0 +1,154 @@ + + + +Custom Elements: CEReactions on Document interface + + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/Element.html b/tests/wpt/web-platform-tests/custom-elements/reactions/Element.html new file mode 100644 index 00000000000..8370724061a --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/Element.html @@ -0,0 +1,82 @@ + + + +Custom Elements: CEReactions on Element interface + + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/ElementContentEditable.html b/tests/wpt/web-platform-tests/custom-elements/reactions/ElementContentEditable.html new file mode 100644 index 00000000000..bdb10761cb8 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/ElementContentEditable.html @@ -0,0 +1,21 @@ + + + +Custom Elements: CEReactions on ElementContentEditable interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLAnchorElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLAnchorElement.html new file mode 100644 index 00000000000..c6eeb1dce90 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLAnchorElement.html @@ -0,0 +1,32 @@ + + + +Custom Elements: CEReactions on HTMLAnchorElement interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html new file mode 100644 index 00000000000..bce4ef1627c --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html @@ -0,0 +1,42 @@ + + + +Custom Elements: CEReactions on HTMLElement interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOptionElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOptionElement.html new file mode 100644 index 00000000000..418ef282b32 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOptionElement.html @@ -0,0 +1,35 @@ + + + +Custom Elements: CEReactions on HTMLOptionElement interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOptionsCollection.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOptionsCollection.html new file mode 100644 index 00000000000..0d64259d063 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOptionsCollection.html @@ -0,0 +1,122 @@ + + + +Custom Elements: CEReactions on HTMLOptionsCollection interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOutputElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOutputElement.html new file mode 100644 index 00000000000..02e669bc7a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLOutputElement.html @@ -0,0 +1,45 @@ + + + +Custom Elements: CEReactions on HTMLOutputElement interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLSelectElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLSelectElement.html new file mode 100644 index 00000000000..7c79634f668 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLSelectElement.html @@ -0,0 +1,122 @@ + + + +Custom Elements: CEReactions on HTMLSelectElement interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableElement.html new file mode 100644 index 00000000000..6adf2623d6b --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableElement.html @@ -0,0 +1,173 @@ + + + +Custom Elements: CEReactions on HTMLTableElement interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableRowElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableRowElement.html new file mode 100644 index 00000000000..a9a00a5da33 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableRowElement.html @@ -0,0 +1,34 @@ + + + +Custom Elements: CEReactions on HTMLTableRowElement interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableSectionElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableSectionElement.html new file mode 100644 index 00000000000..cbb0a146e80 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTableSectionElement.html @@ -0,0 +1,45 @@ + + + +Custom Elements: CEReactions on HTMLTableSectionElement interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTitleElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTitleElement.html new file mode 100644 index 00000000000..6678944c919 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLTitleElement.html @@ -0,0 +1,35 @@ + + + +Custom Elements: CEReactions on HTMLTitleElement interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/NamedNodeMap.html b/tests/wpt/web-platform-tests/custom-elements/reactions/NamedNodeMap.html new file mode 100644 index 00000000000..fa21b3ada9a --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/NamedNodeMap.html @@ -0,0 +1,39 @@ + + + +Custom Elements: CEReactions on NamedNodeMap interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/Node.html b/tests/wpt/web-platform-tests/custom-elements/reactions/Node.html new file mode 100644 index 00000000000..94da3d020e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/Node.html @@ -0,0 +1,49 @@ + + + +Custom Elements: CEReactions on Node interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/ParentNode.html b/tests/wpt/web-platform-tests/custom-elements/reactions/ParentNode.html new file mode 100644 index 00000000000..b143b5a982b --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/ParentNode.html @@ -0,0 +1,27 @@ + + + +Custom Elements: CEReactions on ParentNode interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/Range.html b/tests/wpt/web-platform-tests/custom-elements/reactions/Range.html new file mode 100644 index 00000000000..c4a8252ff62 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/Range.html @@ -0,0 +1,54 @@ + + + +Custom Elements: CEReactions on Range interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/Selection.html b/tests/wpt/web-platform-tests/custom-elements/reactions/Selection.html new file mode 100644 index 00000000000..84214201aaa --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/Selection.html @@ -0,0 +1,32 @@ + + + +Custom Elements: CEReactions on Selection interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/ShadowRoot.html b/tests/wpt/web-platform-tests/custom-elements/reactions/ShadowRoot.html new file mode 100644 index 00000000000..9997d9c8362 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/ShadowRoot.html @@ -0,0 +1,52 @@ + + + +Custom Elements: CEReactions on ShadowRoot interface + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js b/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js new file mode 100644 index 00000000000..43ce4fd7ad8 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js @@ -0,0 +1,361 @@ + +let testNumber = 1; + +function testNodeConnector(testFunction, name) { + let container = document.createElement('div'); + container.appendChild(document.createElement('div')); + document.body.appendChild(container); + + test(function () { + var element = define_new_custom_element(); + var instance = document.createElement(element.name); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(container, instance); + assert_array_equals(element.takeLog().types(), ['connected']); + }, name + ' must enqueue a connected reaction'); + + test(function () { + var element = define_new_custom_element(); + var instance = document.createElement(element.name); + assert_array_equals(element.takeLog().types(), ['constructed']); + var newDoc = document.implementation.createHTMLDocument(); + testFunction(container, instance); + assert_array_equals(element.takeLog().types(), ['connected']); + testFunction(newDoc.documentElement, instance); + assert_array_equals(element.takeLog().types(), ['disconnected', 'adopted', 'connected']); + }, name + ' must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document'); + + container.parentNode.removeChild(container); +} + +function testNodeDisconnector(testFunction, name) { + let container = document.createElement('div'); + container.appendChild(document.createElement('div')); + document.body.appendChild(container); + + test(function () { + var element = define_new_custom_element(); + var instance = document.createElement(element.name); + assert_array_equals(element.takeLog().types(), ['constructed']); + container.appendChild(instance); + assert_array_equals(element.takeLog().types(), ['connected']); + testFunction(instance, window); + assert_array_equals(element.takeLog().types(), ['disconnected']); + }, name + ' must enqueue a disconnected reaction'); + + container.parentNode.removeChild(container); +} + +function testInsertingMarkup(testFunction, name) { + let container = document.createElement('div'); + container.appendChild(document.createElement('div')); + document.body.appendChild(container); + + test(function () { + var element = define_new_custom_element(); + testFunction(container, `<${element.name}>`); + assert_array_equals(element.takeLog().types(), ['constructed', 'connected']); + }, name + ' must enqueue a connected reaction for a newly constructed custom element'); + + test(function () { + var element = define_new_custom_element(['title']); + testFunction(container, `<${element.name} id="hello" title="hi">`); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['constructed', 'attributeChanged', 'connected']); + assert_attribute_log_entry(logEntries[1], {name: 'title', oldValue: null, newValue: 'hi', namespace: null}); + }, name + ' must enqueue a attributeChanged reaction for a newly constructed custom element'); + + container.parentNode.removeChild(container); +} + +function testParsingMarkup(testFunction, name) { + test(function () { + var element = define_new_custom_element(['id']); + assert_array_equals(element.takeLog().types(), []); + var instance = testFunction(document, `<${element.name} id="hello" class="foo">`); + assert_equals(Object.getPrototypeOf(instance.querySelector(element.name)), element.class.prototype); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['constructed', 'attributeChanged']); + assert_attribute_log_entry(logEntries[1], {name: 'id', oldValue: null, newValue: 'hello', namespace: null}); + }, name + ' must construct a custom element'); +} + +function testCloner(testFunction, name) { + let container = document.createElement('div'); + container.appendChild(document.createElement('div')); + document.body.appendChild(container); + + test(function () { + var element = define_new_custom_element(['id']); + var instance = document.createElement(element.name); + container.appendChild(instance); + + instance.setAttribute('id', 'foo'); + assert_array_equals(element.takeLog().types(), ['constructed', 'connected', 'attributeChanged']); + var newInstance = testFunction(instance); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['constructed', 'attributeChanged']); + assert_attribute_log_entry(logEntries.last(), {name: 'id', oldValue: null, newValue: 'foo', namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when cloning an element with an observed attribute'); + + test(function () { + var element = define_new_custom_element(['id']); + var instance = document.createElement(element.name); + container.appendChild(instance); + + instance.setAttribute('lang', 'en'); + assert_array_equals(element.takeLog().types(), ['constructed', 'connected']); + var newInstance = testFunction(instance); + assert_array_equals(element.takeLog().types(), ['constructed']); + }, name + ' must not enqueue an attributeChanged reaction when cloning an element with an unobserved attribute'); + + test(function () { + var element = define_new_custom_element(['title', 'class']); + var instance = document.createElement(element.name); + container.appendChild(instance); + + instance.setAttribute('lang', 'en'); + instance.className = 'foo'; + instance.setAttribute('title', 'hello world'); + assert_array_equals(element.takeLog().types(), ['constructed', 'connected', 'attributeChanged', 'attributeChanged']); + var newInstance = testFunction(instance); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['constructed', 'attributeChanged', 'attributeChanged']); + assert_attribute_log_entry(logEntries[1], {name: 'class', oldValue: null, newValue: 'foo', namespace: null}); + assert_attribute_log_entry(logEntries[2], {name: 'title', oldValue: null, newValue: 'hello world', namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when cloning an element only for observed attributes'); +} + +function testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, contentValue1, validValue2, contentValue2, name) { + test(function () { + var element = define_new_custom_element([contentAttributeName]); + var instance = document.createElement(element.name); + assert_array_equals(element.takeLog().types(), ['constructed']); + instance[jsAttributeName] = validValue1; + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['attributeChanged']); + + assert_attribute_log_entry(logEntries.last(), {name: contentAttributeName, oldValue: null, newValue: contentValue1, namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when adding ' + contentAttributeName + ' content attribute'); + + test(function () { + var element = define_new_custom_element([contentAttributeName]); + var instance = document.createElement(element.name); + instance[jsAttributeName] = validValue1; + assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']); + instance[jsAttributeName] = validValue2; + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['attributeChanged']); + assert_attribute_log_entry(logEntries.last(), {name: contentAttributeName, oldValue: contentValue1, newValue: contentValue2, namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when replacing an existing attribute'); +} + +function testReflectAttribute(jsAttributeName, contentAttributeName, validValue1, validValue2, name) { + testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, validValue1, validValue2, validValue2, name); +} + +function testReflectBooleanAttribute(jsAttributeName, contentAttributeName, name) { + testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, true, '', false, null, name); +} + +function testAttributeAdder(testFunction, name) { + test(function () { + var element = define_new_custom_element(['id']); + var instance = document.createElement(element.name); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, 'id', 'foo'); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['attributeChanged']); + assert_attribute_log_entry(logEntries.last(), {name: 'id', oldValue: null, newValue: 'foo', namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when adding an attribute'); + + test(function () { + var element = define_new_custom_element(['class']); + var instance = document.createElement(element.name); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, 'data-lang', 'en'); + assert_array_equals(element.takeLog().types(), []); + }, name + ' must not enqueue an attributeChanged reaction when adding an unobserved attribute'); + + test(function () { + var element = define_new_custom_element(['title']); + var instance = document.createElement(element.name); + instance.setAttribute('title', 'hello'); + assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']); + testFunction(instance, 'title', 'world'); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['attributeChanged']); + assert_attribute_log_entry(logEntries.last(), {name: 'title', oldValue: 'hello', newValue: 'world', namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when replacing an existing attribute'); + + test(function () { + var element = define_new_custom_element([]); + var instance = document.createElement(element.name); + instance.setAttribute('data-lang', 'zh'); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, 'data-lang', 'en'); + assert_array_equals(element.takeLog().types(), []); + }, name + ' must enqueue an attributeChanged reaction when replacing an existing unobserved attribute'); +} + +function testAttributeMutator(testFunction, name) { + test(function () { + var element = define_new_custom_element(['title']); + var instance = document.createElement(element.name); + instance.setAttribute('title', 'hello'); + assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']); + testFunction(instance, 'title', 'world'); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['attributeChanged']); + assert_attribute_log_entry(logEntries.last(), {name: 'title', oldValue: 'hello', newValue: 'world', namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when replacing an existing attribute'); + + test(function () { + var element = define_new_custom_element(['class']); + var instance = document.createElement(element.name); + instance.setAttribute('data-lang', 'zh'); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, 'data-lang', 'en'); + assert_array_equals(element.takeLog().types(), []); + }, name + ' must not enqueue an attributeChanged reaction when replacing an existing unobserved attribute'); +} + +function testAttributeRemover(testFunction, name, options) { + if (options && !options.onlyExistingAttribute) { + test(function () { + var element = define_new_custom_element(['title']); + var instance = document.createElement(element.name); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, 'title'); + assert_array_equals(element.takeLog().types(), []); + }, name + ' must not enqueue an attributeChanged reaction when removing an attribute that does not exist'); + } + + test(function () { + var element = define_new_custom_element([]); + var instance = document.createElement(element.name); + instance.setAttribute('data-lang', 'hello'); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, 'data-lang'); + assert_array_equals(element.takeLog().types(), []); + }, name + ' must not enqueue an attributeChanged reaction when removing an unobserved attribute'); + + test(function () { + var element = define_new_custom_element(['title']); + var instance = document.createElement(element.name); + instance.setAttribute('title', 'hello'); + assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']); + testFunction(instance, 'title'); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['attributeChanged']); + assert_attribute_log_entry(logEntries.last(), {name: 'title', oldValue: 'hello', newValue: null, namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when removing an existing attribute'); + + test(function () { + var element = define_new_custom_element([]); + var instance = document.createElement(element.name); + instance.setAttribute('data-lang', 'ja'); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, 'data-lang'); + assert_array_equals(element.takeLog().types(), []); + }, name + ' must not enqueue an attributeChanged reaction when removing an existing unobserved attribute'); +} + +function test_mutating_style_property_value(testFunction, name, options) { + const propertyName = (options || {}).propertyName || 'color'; + const idlName = (options || {}).idlName || 'color'; + const value1 = (options || {}).value1 || 'blue'; + const rule1 = `${propertyName}: ${value1};`; + const value2 = (options || {}).value2 || 'red'; + const rule2 = `${propertyName}: ${value2};`; + + test(function () { + var element = define_new_custom_element(['style']); + var instance = document.createElement(element.name); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, propertyName, idlName, value1); + assert_equals(instance.getAttribute('style'), rule1); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['attributeChanged']); + assert_attribute_log_entry(logEntries.last(), {name: 'style', oldValue: null, newValue: rule1, namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when it adds the observed style attribute'); + + test(function () { + var element = define_new_custom_element(['title']); + var instance = document.createElement(element.name); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, propertyName, idlName, value1); + assert_equals(instance.getAttribute('style'), rule1); + assert_array_equals(element.takeLog().types(), []); + }, name + ' must not enqueue an attributeChanged reaction when it adds the style attribute but the style attribute is not observed'); + + test(function () { + var element = define_new_custom_element(['style']); + var instance = document.createElement(element.name); + testFunction(instance, propertyName, idlName, value1); + assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']); + testFunction(instance, propertyName, idlName, value2); + assert_equals(instance.getAttribute('style'), rule2); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['attributeChanged']); + assert_attribute_log_entry(logEntries.last(), {name: 'style', oldValue: rule1, newValue: rule2, namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when it mutates the observed style attribute'); + + test(function () { + var element = define_new_custom_element([]); + var instance = document.createElement(element.name); + testFunction(instance, propertyName, idlName, value1); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, propertyName, idlName, value2); + assert_equals(instance.getAttribute('style'), rule2); + assert_array_equals(element.takeLog().types(), []); + }, name + ' must not enqueue an attributeChanged reaction when it mutates the style attribute but the style attribute is not observed'); +} + +function test_removing_style_property_value(testFunction, name) { + test(function () { + var element = define_new_custom_element(['style']); + var instance = document.createElement(element.name); + instance.setAttribute('style', 'color: red; display: none;'); + assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']); + testFunction(instance, 'color', 'color'); + assert_equals(instance.getAttribute('style'), 'display: none;'); // Don't make this empty since browser behaviors are inconsistent now. + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['attributeChanged']); + assert_attribute_log_entry(logEntries.last(), {name: 'style', oldValue: 'color: red; display: none;', newValue: 'display: none;', namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when it removes a property from the observed style attribute'); + + test(function () { + var element = define_new_custom_element(['class']); + var instance = document.createElement(element.name); + instance.setAttribute('style', 'color: red; display: none;'); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, 'color', 'color'); + assert_equals(instance.getAttribute('style'), 'display: none;'); // Don't make this empty since browser behaviors are inconsistent now. + assert_array_equals(element.takeLog().types(), []); + }, name + ' must not enqueue an attributeChanged reaction when it removes a property from the style attribute but the style attribute is not observed'); +} + +function test_mutating_style_property_priority(testFunction, name) { + test(function () { + var element = define_new_custom_element(['style']); + var instance = document.createElement(element.name); + instance.setAttribute('style', 'color: red'); + assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']); + testFunction(instance, 'color', 'color', true); + assert_equals(instance.getAttribute('style'), 'color: red !important;'); + var logEntries = element.takeLog(); + assert_array_equals(logEntries.types(), ['attributeChanged']); + assert_attribute_log_entry(logEntries.last(), {name: 'style', oldValue: 'color: red', newValue: 'color: red !important;', namespace: null}); + }, name + ' must enqueue an attributeChanged reaction when it makes a property important and the style attribute is observed'); + + test(function () { + var element = define_new_custom_element(['id']); + var instance = document.createElement(element.name); + instance.setAttribute('style', 'color: red'); + assert_array_equals(element.takeLog().types(), ['constructed']); + testFunction(instance, 'color', 'color', true); + assert_equals(instance.getAttribute('style'), 'color: red !important;'); + assert_array_equals(element.takeLog().types(), []); + }, name + ' must enqueue an attributeChanged reaction when it makes a property important but the style attribute is not observed'); +} diff --git a/tests/wpt/web-platform-tests/custom-elements/resources/custom-elements-helpers.js b/tests/wpt/web-platform-tests/custom-elements/resources/custom-elements-helpers.js index 0dfbd6363b2..956c562a76a 100644 --- a/tests/wpt/web-platform-tests/custom-elements/resources/custom-elements-helpers.js +++ b/tests/wpt/web-platform-tests/custom-elements/resources/custom-elements-helpers.js @@ -16,7 +16,215 @@ function test_with_window(f, name, srcdoc) { promise_test((t) => { return create_window_in_test(t, srcdoc) .then((w) => { - f(w); + f(w, w.document); }); }, name); } + +function define_custom_element_in_window(window, name, observedAttributes) { + let log = []; + + class CustomElement extends window.HTMLElement { + constructor() { + super(); + log.push(create_constructor_log(this)); + } + attributeChangedCallback(...args) { + log.push(create_attribute_changed_callback_log(this, ...args)); + } + connectedCallback() { log.push(create_connected_callback_log(this)); } + disconnectedCallback() { log.push(create_disconnected_callback_log(this)); } + adoptedCallback(oldDocument, newDocument) { log.push({type: 'adopted', element: this, oldDocument: oldDocument, newDocument: newDocument}); } + } + CustomElement.observedAttributes = observedAttributes; + + window.customElements.define(name, CustomElement); + + return { + name: name, + class: CustomElement, + takeLog: function () { + let currentLog = log; log = []; + currentLog.types = () => currentLog.map((entry) => entry.type); + currentLog.last = () => currentLog[currentLog.length - 1]; + return currentLog; + } + }; +} + +function create_constructor_log(element) { + return {type: 'constructed', element: element}; +} + +function assert_constructor_log_entry(log, element) { + assert_equals(log.type, 'constructed'); + assert_equals(log.element, element); +} + +function create_connected_callback_log(element) { + return {type: 'connected', element: element}; +} + +function assert_connected_log_entry(log, element) { + assert_equals(log.type, 'connected'); + assert_equals(log.element, element); +} + +function create_disconnected_callback_log(element) { + return {type: 'disconnected', element: element}; +} + +function assert_disconnected_log_entry(log, element) { + assert_equals(log.type, 'disconnected'); + assert_equals(log.element, element); +} + +function assert_adopted_log_entry(log, element) { + assert_equals(log.type, 'adopted'); + assert_equals(log.element, element); +} + +function create_adopted_callback_log(element) { + return {type: 'adopted', element: element}; +} + +function create_attribute_changed_callback_log(element, name, oldValue, newValue, namespace) { + return { + type: 'attributeChanged', + element: element, + name: name, + namespace: namespace, + oldValue: oldValue, + newValue: newValue, + actualValue: element.getAttributeNS(namespace, name) + }; +} + +function assert_attribute_log_entry(log, expected) { + assert_equals(log.type, 'attributeChanged'); + assert_equals(log.name, expected.name); + assert_equals(log.oldValue, expected.oldValue); + assert_equals(log.newValue, expected.newValue); + assert_equals(log.actualValue, expected.newValue); + assert_equals(log.namespace, expected.namespace); +} + + +function define_new_custom_element(observedAttributes) { + let log = []; + let name = 'custom-element-' + define_new_custom_element._element_number++; + + class CustomElement extends HTMLElement { + constructor() { + super(); + log.push({type: 'constructed', element: this}); + } + attributeChangedCallback(...args) { + log.push(create_attribute_changed_callback_log(this, ...args)); + } + connectedCallback() { log.push({type: 'connected', element: this}); } + disconnectedCallback() { log.push({type: 'disconnected', element: this}); } + adoptedCallback(oldDocument, newDocument) { log.push({type: 'adopted', element: this, oldDocument: oldDocument, newDocument: newDocument}); } + } + CustomElement.observedAttributes = observedAttributes; + + customElements.define(name, CustomElement); + + return { + name: name, + class: CustomElement, + takeLog: function () { + let currentLog = log; log = []; + currentLog.types = () => currentLog.map((entry) => entry.type); + currentLog.last = () => currentLog[currentLog.length - 1]; + return currentLog; + } + }; +} +define_new_custom_element._element_number = 1; + +function document_types() { + return [ + { + name: 'the document', + create: function () { return Promise.resolve(document); }, + isOwner: true, + hasBrowsingContext: true, + }, + { + name: 'the document of the template elements', + create: function () { + return new Promise(function (resolve) { + var template = document.createElementNS('http://www.w3.org/1999/xhtml', 'template'); + var doc = template.content.ownerDocument; + if (!doc.documentElement) + doc.appendChild(doc.createElement('html')); + resolve(doc); + }); + }, + hasBrowsingContext: false, + }, + { + name: 'a new document', + create: function () { + return new Promise(function (resolve) { + var doc = new Document(); + doc.appendChild(doc.createElement('html')); + resolve(doc); + }); + }, + hasBrowsingContext: false, + }, + { + name: 'a cloned document', + create: function () { + return new Promise(function (resolve) { + var doc = document.cloneNode(false); + doc.appendChild(doc.createElement('html')); + resolve(doc); + }); + }, + hasBrowsingContext: false, + }, + { + name: 'a document created by createHTMLDocument', + create: function () { + return Promise.resolve(document.implementation.createHTMLDocument()); + }, + hasBrowsingContext: false, + }, + { + name: 'an HTML document created by createDocument', + create: function () { + return Promise.resolve(document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null)); + }, + hasBrowsingContext: false, + }, + { + name: 'the document of an iframe', + create: function () { + return new Promise(function (resolve, reject) { + var iframe = document.createElement('iframe'); + iframe.onload = function () { resolve(iframe.contentDocument); } + iframe.onerror = function () { reject('Failed to load an empty iframe'); } + document.body.appendChild(iframe); + }); + }, + hasBrowsingContext: true, + }, + { + name: 'an HTML document fetched by XHR', + create: function () { + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'resources/empty-html-document.html'); + xhr.overrideMimeType('text/xml'); + xhr.onload = function () { resolve(xhr.responseXML); } + xhr.onerror = function () { reject('Failed to fetch the document'); } + xhr.send(); + }); + }, + hasBrowsingContext: false, + } + ]; +} diff --git a/tests/wpt/web-platform-tests/custom-elements/resources/empty-html-document.html b/tests/wpt/web-platform-tests/custom-elements/resources/empty-html-document.html new file mode 100644 index 00000000000..eaca3f49fd1 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/resources/empty-html-document.html @@ -0,0 +1,5 @@ + + + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/upgrading.html b/tests/wpt/web-platform-tests/custom-elements/upgrading.html new file mode 100644 index 00000000000..aaea0cb4a02 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/upgrading.html @@ -0,0 +1,190 @@ + + + +Custom Elements: Enqueue a custom element upgrade reaction + + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/upgrading/Node-cloneNode.html b/tests/wpt/web-platform-tests/custom-elements/upgrading/Node-cloneNode.html new file mode 100644 index 00000000000..61580f4184b --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/upgrading/Node-cloneNode.html @@ -0,0 +1,185 @@ + + + +Custom Elements: Upgrading + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/upgrading/upgrading-enqueue-reactions.html b/tests/wpt/web-platform-tests/custom-elements/upgrading/upgrading-enqueue-reactions.html new file mode 100644 index 00000000000..8238eee624a --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/upgrading/upgrading-enqueue-reactions.html @@ -0,0 +1,158 @@ + + + +Custom Elements: Upgrading custom elements should enqueue attributeChanged and connected callbacks + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/upgrading/upgrading-parser-created-element.html b/tests/wpt/web-platform-tests/custom-elements/upgrading/upgrading-parser-created-element.html new file mode 100644 index 00000000000..7cc3b18aeef --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/upgrading/upgrading-parser-created-element.html @@ -0,0 +1,97 @@ + + + +Custom Elements: Upgrading unresolved elements + + + + + + + +
                                                                                        + + + + + + + + diff --git a/tests/wpt/web-platform-tests/dom/collections/HTMLCollection-supported-property-indices.html b/tests/wpt/web-platform-tests/dom/collections/HTMLCollection-supported-property-indices.html index 742899c5002..62ee6bb6abf 100644 --- a/tests/wpt/web-platform-tests/dom/collections/HTMLCollection-supported-property-indices.html +++ b/tests/wpt/web-platform-tests/dom/collections/HTMLCollection-supported-property-indices.html @@ -97,4 +97,83 @@ test(function() { assert_equals(collection[4294967296], document.getElementById("4294967296")); assert_equals(collection[4294967297], document.getElementById("4294967297")); }, "Handling of property names that look like integers around 2^32"); + +test(function() { + var elements = document.getElementsByTagName("foo"); + var old_item = elements[0]; + var old_desc = Object.getOwnPropertyDescriptor(elements, 0); + assert_equals(old_desc.value, old_item); + assert_true(old_desc.enumerable); + assert_true(old_desc.configurable); + assert_false(old_desc.writable); + + elements[0] = 5; + assert_equals(elements[0], old_item); + assert_throws(new TypeError(), function() { + "use strict"; + elements[0] = 5; + }); + assert_throws(new TypeError(), function() { + Object.defineProperty(elements, 0, { value: 5 }); + }); + + delete elements[0]; + assert_equals(elements[0], old_item); + + assert_throws(new TypeError(), function() { + "use strict"; + delete elements[0]; + }); + assert_equals(elements[0], old_item); +}, 'Trying to set an expando that would shadow an already-existing indexed property'); + +test(function() { + var elements = document.getElementsByTagName("foo"); + var idx = elements.length; + var old_item = elements[idx]; + var old_desc = Object.getOwnPropertyDescriptor(elements, idx); + assert_equals(old_item, undefined); + assert_equals(old_desc, undefined); + + // [[DefineOwnProperty]] will disallow defining an indexed expando. + elements[idx] = 5; + assert_equals(elements[idx], undefined); + assert_throws(new TypeError(), function() { + "use strict"; + elements[idx] = 5; + }); + assert_throws(new TypeError(), function() { + Object.defineProperty(elements, idx, { value: 5 }); + }); + + // Check that deletions out of range do not throw + delete elements[idx]; + (function() { + "use strict"; + delete elements[idx]; + })(); +}, 'Trying to set an expando with an indexed property name past the end of the list'); + +test(function(){ + var elements = document.getElementsByTagName("foo"); + var old_item = elements[0]; + var old_desc = Object.getOwnPropertyDescriptor(elements, 0); + assert_equals(old_desc.value, old_item); + assert_true(old_desc.enumerable); + assert_true(old_desc.configurable); + assert_false(old_desc.writable); + + Object.prototype[0] = 5; + this.add_cleanup(function () { delete Object.prototype[0]; }); + assert_equals(elements[0], old_item); + + delete elements[0]; + assert_equals(elements[0], old_item); + + assert_throws(new TypeError(), function() { + "use strict"; + delete elements[0]; + }); + assert_equals(elements[0], old_item); +}, 'Trying to delete an indexed property name should never work'); diff --git a/tests/wpt/web-platform-tests/dom/collections/HTMLCollection-supported-property-names.html b/tests/wpt/web-platform-tests/dom/collections/HTMLCollection-supported-property-names.html index a37163b7d18..0a9df1ad660 100644 --- a/tests/wpt/web-platform-tests/dom/collections/HTMLCollection-supported-property-names.html +++ b/tests/wpt/web-platform-tests/dom/collections/HTMLCollection-supported-property-names.html @@ -51,4 +51,85 @@ test(function () { assert_array_equals(Object.getOwnPropertyNames(elements), ['0', 'someProperty']); }, 'Object.getOwnPropertyNames on HTMLCollection with expando object'); + +test(function() { + var elements = document.getElementsByTagName("span"); + var old_item = elements["some-id"]; + var old_desc = Object.getOwnPropertyDescriptor(elements, "some-id"); + assert_equals(old_desc.value, old_item); + assert_false(old_desc.enumerable); + assert_true(old_desc.configurable); + assert_false(old_desc.writable); + + elements["some-id"] = 5; + assert_equals(elements["some-id"], old_item); + assert_throws(new TypeError(), function() { + "use strict"; + elements["some-id"] = 5; + }); + assert_throws(new TypeError(), function() { + Object.defineProperty(elements, "some-id", { value: 5 }); + }); + + delete elements["some-id"]; + assert_equals(elements["some-id"], old_item); + + assert_throws(new TypeError(), function() { + "use strict"; + delete elements["some-id"]; + }); + assert_equals(elements["some-id"], old_item); + +}, 'Trying to set an expando that would shadow an already-existing named property'); + +test(function() { + var elements = document.getElementsByTagName("span"); + var old_item = elements["new-id"]; + var old_desc = Object.getOwnPropertyDescriptor(elements, "new-id"); + assert_equals(old_item, undefined); + assert_equals(old_desc, undefined); + + elements["new-id"] = 5; + assert_equals(elements["new-id"], 5); + + var span = document.createElement("span"); + this.add_cleanup(function () {span.remove();}); + span.id = "new-id"; + document.body.appendChild(span); + + assert_equals(elements.namedItem("new-id"), span); + assert_equals(elements["new-id"], 5); + + delete elements["new-id"]; + assert_equals(elements["new-id"], span); +}, 'Trying to set an expando that shadows a named property that gets added later'); + +test(function() { + var elements = document.getElementsByTagName("span"); + var old_item = elements["new-id2"]; + var old_desc = Object.getOwnPropertyDescriptor(elements, "new-id2"); + assert_equals(old_item, undefined); + assert_equals(old_desc, undefined); + + Object.defineProperty(elements, "new-id2", { configurable: false, writable: + false, value: 5 }); + assert_equals(elements["new-id2"], 5); + + var span = document.createElement("span"); + this.add_cleanup(function () {span.remove();}); + span.id = "new-id2"; + document.body.appendChild(span); + + assert_equals(elements.namedItem("new-id2"), span); + assert_equals(elements["new-id2"], 5); + + delete elements["new-id2"]; + assert_equals(elements["new-id2"], 5); + + assert_throws(new TypeError(), function() { + "use strict"; + delete elements["new-id2"]; + }); + assert_equals(elements["new-id2"], 5); +}, 'Trying to set a non-configurable expando that shadows a named property that gets added later'); 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 new file mode 100644 index 00000000000..760116beae9 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-click.html @@ -0,0 +1,204 @@ + +Synthetic click event "magic" + + +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/dom/events/Event-dispatch-other-document.html b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-other-document.html new file mode 100644 index 00000000000..0252a4f7b61 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-other-document.html @@ -0,0 +1,22 @@ + +Custom event on an element in another document + + +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/dom/events/ProgressEvent.html b/tests/wpt/web-platform-tests/dom/events/ProgressEvent.html index aa947e3f2ce..dee090016c4 100644 --- a/tests/wpt/web-platform-tests/dom/events/ProgressEvent.html +++ b/tests/wpt/web-platform-tests/dom/events/ProgressEvent.html @@ -17,9 +17,4 @@ test(function() { assert_true(ev.timeStamp > 0) assert_true("initEvent" in ev) }, "Default event values.") -test(function() { - var e = document.createEvent("ProgressEvent"); - var eProto = Object.getPrototypeOf(e); - assert_equals(eProto, ProgressEvent.prototype); -}, "document.createEvent() should work with ProgressEvent."); diff --git a/tests/wpt/web-platform-tests/dom/lists/DOMTokenList-iteration.html b/tests/wpt/web-platform-tests/dom/lists/DOMTokenList-iteration.html index 1911f7bb32a..321bbe00da4 100644 --- a/tests/wpt/web-platform-tests/dom/lists/DOMTokenList-iteration.html +++ b/tests/wpt/web-platform-tests/dom/lists/DOMTokenList-iteration.html @@ -41,7 +41,9 @@ assert_equals(list[Symbol.iterator], Array.prototype[Symbol.iterator]); assert_equals(list.keys, Array.prototype.keys); - assert_equals(list.values, Array.prototype.values); + if (Array.prototype.values) { + assert_equals(list.values, Array.prototype.values); + } assert_equals(list.entries, Array.prototype.entries); assert_equals(list.forEach, Array.prototype.forEach); }); diff --git a/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocument.html b/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocument.html index f4b63587126..94f8ba5bcc0 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocument.html +++ b/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocument.html @@ -140,7 +140,7 @@ test(function() { assert_equals(doc.URL, "about:blank") assert_equals(doc.documentURI, "about:blank") assert_equals(doc.createElement("DIV").localName, "DIV"); - }, "createDocument test " + i + ": metadata for " + + }, "createDocument test: metadata for " + [namespace, qualifiedName, doctype].map(my_format_value)) test(function() { @@ -148,7 +148,7 @@ test(function() { assert_equals(doc.characterSet, "UTF-8", "characterSet"); assert_equals(doc.charset, "UTF-8", "charset"); assert_equals(doc.inputEncoding, "UTF-8", "inputEncoding"); - }, "createDocument test " + i + ": characterSet aliases for " + + }, "createDocument test: characterSet aliases for " + [namespace, qualifiedName, doctype].map(my_format_value)) } }) diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html index 59fa02d83f5..bacaff0f6a0 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html @@ -9,6 +9,8 @@
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createElementNS.html b/tests/wpt/web-platform-tests/dom/nodes/Document-createElementNS.html index 75005a09e2e..68341bcd44f 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createElementNS.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createElementNS.html @@ -6,59 +6,87 @@
                                                                                        + + + + + + diff --git a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-appendData.html b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-appendData.html new file mode 100644 index 00000000000..1d4879d57c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-appendData.html @@ -0,0 +1,14 @@ + +Range mutation tests - appendData + + + +
                                                                                        + + + + + diff --git a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-dataChange.html b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-dataChange.html new file mode 100644 index 00000000000..3683e8bb9bb --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-dataChange.html @@ -0,0 +1,14 @@ + +Range mutation tests - update data by IDL attributes + + + +
                                                                                        + + + + + diff --git a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-deleteData.html b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-deleteData.html new file mode 100644 index 00000000000..5f2b852f5b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-deleteData.html @@ -0,0 +1,14 @@ + +Range mutation tests - deleteData + + + +
                                                                                        + + + + + diff --git a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-insertBefore.html b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-insertBefore.html new file mode 100644 index 00000000000..c71b239547c --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-insertBefore.html @@ -0,0 +1,14 @@ + +Range mutation tests - insertBefore + + + +
                                                                                        + + + + + diff --git a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-insertData.html b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-insertData.html new file mode 100644 index 00000000000..fca533d5031 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-insertData.html @@ -0,0 +1,14 @@ + +Range mutation tests - insertData + + + +
                                                                                        + + + + + diff --git a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-removeChild.html b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-removeChild.html new file mode 100644 index 00000000000..a8d23812530 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-removeChild.html @@ -0,0 +1,14 @@ + +Range mutation tests - removeChild + + + +
                                                                                        + + + + + diff --git a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-replaceChild.html b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-replaceChild.html new file mode 100644 index 00000000000..a4ef0c365e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-replaceChild.html @@ -0,0 +1,14 @@ + +Range mutation tests - replaceChild + + + +
                                                                                        + + + + + diff --git a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-replaceData.html b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-replaceData.html new file mode 100644 index 00000000000..55ddb146ea2 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-replaceData.html @@ -0,0 +1,14 @@ + +Range mutation tests - replaceData + + + +
                                                                                        + + + + + diff --git a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-splitText.html b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-splitText.html new file mode 100644 index 00000000000..fbb4c8d9b6d --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations-splitText.html @@ -0,0 +1,14 @@ + +Range mutation tests - splitText + + + +
                                                                                        + + + + + diff --git a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations.html b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations.js similarity index 95% rename from tests/wpt/web-platform-tests/dom/ranges/Range-mutations.html rename to tests/wpt/web-platform-tests/dom/ranges/Range-mutations.js index ef99ca2ef04..3837de92828 100644 --- a/tests/wpt/web-platform-tests/dom/ranges/Range-mutations.html +++ b/tests/wpt/web-platform-tests/dom/ranges/Range-mutations.js @@ -1,13 +1,3 @@ - -Range mutation tests - - - -
                                                                                        - - - - diff --git a/tests/wpt/web-platform-tests/domparsing/OWNERS b/tests/wpt/web-platform-tests/domparsing/OWNERS index 8aeebafa5f5..892cbb237fc 100644 --- a/tests/wpt/web-platform-tests/domparsing/OWNERS +++ b/tests/wpt/web-platform-tests/domparsing/OWNERS @@ -1,4 +1,2 @@ -@sideshowbarker @ChrisParis -@deniak @jdm diff --git a/tests/wpt/web-platform-tests/domparsing/createContextualFragment.html b/tests/wpt/web-platform-tests/domparsing/createContextualFragment.html index ce7d813583c..d81186a9dd6 100644 --- a/tests/wpt/web-platform-tests/domparsing/createContextualFragment.html +++ b/tests/wpt/web-platform-tests/domparsing/createContextualFragment.html @@ -119,12 +119,14 @@ var tests = [ [" in a different namespace shouldn't be special", document.createElementNS("http://fake-namespace", "html"), "

                                                                                        ", document.createElement("div"), "

                                                                                        "], + ["SVG namespace shouldn't be special", + document.createElementNS("http://www.w3.org/2000/svg", "div"), "

                                                                                        ", + document.createElement("div"), "

                                                                                        "], ["null should be stringified", document.createElement("span"), null, document.createElement("span"), "null"], - ["undefined should be stringified", document.createElement("span"), undefined, document.createElement("span"), "undefined"]/*, - // FIXME: Spec doesn't say what to do about non-Elements! - ["Text nodes?", - document.createTextNode("?"), "", - document.createTextNode("?"), ""]*/ + ["undefined should be stringified", document.createElement("span"), undefined, document.createElement("span"), "undefined"], + ["Text nodes shouldn't be special", + document.createTextNode("?"), "

                                                                                        ", + document.createElement("div"), "

                                                                                        "] ]; generate_tests(testEquivalence, tests); diff --git a/tests/wpt/web-platform-tests/domparsing/innerhtml-02.html b/tests/wpt/web-platform-tests/domparsing/innerhtml-02.html deleted file mode 100644 index e80c886b6c6..00000000000 --- a/tests/wpt/web-platform-tests/domparsing/innerhtml-02.html +++ /dev/null @@ -1,126 +0,0 @@ - -innerHTML in HTML - - - - -

                                                                                        - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/dpub-aam/OWNERS b/tests/wpt/web-platform-tests/dpub-aam/OWNERS new file mode 100644 index 00000000000..35ae0f6c00b --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/OWNERS @@ -0,0 +1 @@ +@halindrome diff --git a/tests/wpt/web-platform-tests/dpub-aam/README.md b/tests/wpt/web-platform-tests/dpub-aam/README.md new file mode 100644 index 00000000000..ce480494440 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aam/README.md @@ -0,0 +1,64 @@ +dpub-aam: Tests for the DPUB-ARIA Accessibility Mapping Recommendation +====================================================================== + +The [DPUB ARIA Recommendation](https://www.w3.org/TR/dpub-aam-1.0) +define extensions to HTML4/5 for support of extended semantics. These +semantics make it easier for Assistive Technologies to intepret and +present content to users with varying physical and cognitive abilities. + +The purpose of these tests is to help ensure that user agents support the +requirements of the Recommendation. + +The general approach for this testing is to enable both manual and automated +testing, with a preference for automation. + + +Running Tests +------------- + +In order to run these tests in an automated fashion, you will need to have a +special Assistive Technology Test Adapter (ATTA) for the platform under test. We will +provide a list of these for popular platforms here as they are made available. + +The ATTA will monitor the window under test via the platforms Accessibility +Layer, forwarding information about the Accessibility Tree to the running test +so that it can evaluate support for the various features under test. + +The workflow for running these tests is something like: + +1. Start up the ATTA for the platform under test. +2. Start up the test driver window and select the dpub-aam tests to be run + (e.g., the DPUB AAM 1.0 tests) - click "Start" +3. A window pops up that shows a test - the description of which tells the + tester what is being tested. In an automated test, the test with proceed + without user intervention. In a manual test, some user input may be required + in order to stimulate the test. +4. The test runs. Success or failure is determined and reported to the test + driver window, which then cycles to the next test in the sequence. +5. Repeat steps 2-4 until done. +6. Download the JSON format report of test results, which can then be visually + inspected, reported on using various tools, or passed on to W3C for + evaluation and collection in the Implementation Report via github. + +**Remember that while these tests are written to help exercise implementations, +their other (important) purpose is to increase confidence that there are +interoperable implementations.** So, implementers are the audience, but these +tests are not meant to be a comprehensive collection of tests for a client that +might implement the Recommendation. + + +Capturing and Reporting Results +------------------------------- + +As tests are run against implementations, if the results of testing are +submitted to [test-results](https://github.com/w3c/test-results/) then they will +be automatically included in documents generated by +[wptreport](https://www.github.com/w3c/wptreport). The same tool can be used +locally to view reports about recorded results. + + +Writing Tests +------------- + +If you are interested in writing tests for this environment, see the +associated [CONTRIBUTING](CONTRIBUTING.md) document. diff --git a/tests/wpt/web-platform-tests/dpub-aria/OWNERS b/tests/wpt/web-platform-tests/dpub-aria/OWNERS new file mode 100644 index 00000000000..35ae0f6c00b --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aria/OWNERS @@ -0,0 +1 @@ +@halindrome diff --git a/tests/wpt/web-platform-tests/dpub-aria/README.md b/tests/wpt/web-platform-tests/dpub-aria/README.md new file mode 100644 index 00000000000..b2ffb99fd51 --- /dev/null +++ b/tests/wpt/web-platform-tests/dpub-aria/README.md @@ -0,0 +1,64 @@ +dpub-aria: Tests for the DPUB-ARIA Recommendations +================================================== + +The [DPUB ARIA Recommendation](https://www.w3.org/TR/dpub-aria-1.0) +define extensions to HTML4/5 for support of extended semantics. These +semantics make it easier for Assistive Technologies to intepret and +present content to users with varying physical and cognitive abilities. + +The purpose of these tests is to help ensure that user agents support the +requirements of the Recommendation. + +The general approach for this testing is to enable both manual and automated +testing, with a preference for automation. + + +Running Tests +------------- + +In order to run these tests in an automated fashion, you will need to have a +special Assistive Technology Test Adapter (ATTA) for the platform under test. We will +provide a list of these for popular platforms here as they are made available. + +The ATTA will monitor the window under test via the platforms Accessibility +Layer, forwarding information about the Accessibility Tree to the running test +so that it can evaluate support for the various features under test. + +The workflow for running these tests is something like: + +1. Start up the ATTA for the platform under test. +2. Start up the test driver window and select the dpub -aria tests to be run + (e.g., the DPUB ARIA 1.0 tests) - click "Start" +3. A window pops up that shows a test - the description of which tells the + tester what is being tested. In an automated test, the test with proceed + without user intervention. In a manual test, some user input may be required + in order to stimulate the test. +4. The test runs. Success or failure is determined and reported to the test + driver window, which then cycles to the next test in the sequence. +5. Repeat steps 2-4 until done. +6. Download the JSON format report of test results, which can then be visually + inspected, reported on using various tools, or passed on to W3C for + evaluation and collection in the Implementation Report via github. + +**Remember that while these tests are written to help exercise implementations, +their other (important) purpose is to increase confidence that there are +interoperable implementations.** So, implementers are the audience, but these +tests are not meant to be a comprehensive collection of tests for a client that +might implement the Recommendation. + + +Capturing and Reporting Results +------------------------------- + +As tests are run against implementations, if the results of testing are +submitted to [test-results](https://github.com/w3c/test-results/) then they will +be automatically included in documents generated by +[wptreport](https://www.github.com/w3c/wptreport). The same tool can be used +locally to view reports about recorded results. + + +Writing Tests +------------- + +If you are interested in writing tests for this environment, see the +associated [CONTRIBUTING](CONTRIBUTING.md) document. diff --git a/tests/wpt/web-platform-tests/editing/other/restoration.html b/tests/wpt/web-platform-tests/editing/other/restoration.html new file mode 100644 index 00000000000..4c53008b410 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/other/restoration.html @@ -0,0 +1,90 @@ + + +Restoration of style tests + + + +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/encoding/OWNERS b/tests/wpt/web-platform-tests/encoding/OWNERS index 4917e26650a..ec02022aea3 100644 --- a/tests/wpt/web-platform-tests/encoding/OWNERS +++ b/tests/wpt/web-platform-tests/encoding/OWNERS @@ -1,2 +1 @@ @inexorabletash -@sideshowbarker diff --git a/tests/wpt/web-platform-tests/encoding/single-byte-decoder.html b/tests/wpt/web-platform-tests/encoding/single-byte-decoder.html index eb463e1add8..6462cd1f79b 100644 --- a/tests/wpt/web-platform-tests/encoding/single-byte-decoder.html +++ b/tests/wpt/web-platform-tests/encoding/single-byte-decoder.html @@ -33,7 +33,7 @@ "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], - "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,null,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], diff --git a/tests/wpt/web-platform-tests/encoding/textdecoder-fatal-single-byte.html b/tests/wpt/web-platform-tests/encoding/textdecoder-fatal-single-byte.html index 74bad255daf..d9bf412826f 100644 --- a/tests/wpt/web-platform-tests/encoding/textdecoder-fatal-single-byte.html +++ b/tests/wpt/web-platform-tests/encoding/textdecoder-fatal-single-byte.html @@ -28,7 +28,7 @@ var singleByteEncodings = [ {encoding: 'windows-1252', bad: []}, {encoding: 'windows-1253', bad: [0xAA, 0xD2, 0xFF]}, {encoding: 'windows-1254', bad: []}, - {encoding: 'windows-1255', bad: [0xCA, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xFB, 0xFC, 0xFF]}, + {encoding: 'windows-1255', bad: [0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xFB, 0xFC, 0xFF]}, {encoding: 'windows-1256', bad: []}, {encoding: 'windows-1257', bad: [0xA1, 0xA5]}, {encoding: 'windows-1258', bad: []}, diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-clear-key-invalid-license.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-clear-key-invalid-license.html similarity index 95% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-clear-key-invalid-license.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-clear-key-invalid-license.html index 4061c4fd512..f145dfad77e 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-clear-key-invalid-license.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-clear-key-invalid-license.html @@ -4,8 +4,11 @@ Invalid Clear Key License. +
                                                                                        diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-clearkey-update-non-ascii-input.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-clearkey-update-non-ascii-input.html similarity index 96% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-clearkey-update-non-ascii-input.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-clearkey-update-non-ascii-input.html index f9d00f904ab..cf237a7da8e 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-clearkey-update-non-ascii-input.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-clearkey-update-non-ascii-input.html @@ -4,8 +4,11 @@ Test Clear Key handling of non-ASCII responses for update(). +
                                                                                        diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-sessions.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-sessions.html index 26bc02328d5..3ee4e8c542d 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-sessions.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-sessions.html @@ -4,8 +4,11 @@ Verify MediaKeySession.keyStatuses with multiple sessions +
                                                                                        diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-updates.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-updates.html index 514109d04fc..809045d99e5 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-updates.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-keystatuses-multiple-updates.html @@ -4,8 +4,11 @@ Verify MediaKeySession.keyStatuses with multiple updates +
                                                                                        diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-onencrypted.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-onencrypted.html similarity index 94% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-onencrypted.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-onencrypted.html index 01d140454a4..ad408f0f313 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-onencrypted.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-onencrypted.html @@ -4,8 +4,11 @@ onencrypted + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-playback-encrypted-and-clear-sources.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-playback-encrypted-and-clear-sources.html similarity index 98% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-playback-encrypted-and-clear-sources.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-playback-encrypted-and-clear-sources.html index 4d0acda5b5a..495ba418803 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-playback-encrypted-and-clear-sources.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-playback-encrypted-and-clear-sources.html @@ -4,8 +4,11 @@ Multiple playbacks alternating between encrypted and clear sources. + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-playback-multiple-sessions.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-playback-multiple-sessions.html index 2a4adc340dd..8bf94e13c9d 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-playback-multiple-sessions.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-playback-multiple-sessions.html @@ -4,8 +4,11 @@ Clear Key Playback with Multiple Sessions + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-requestmediakeysystemaccess.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-requestmediakeysystemaccess.html similarity index 99% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-requestmediakeysystemaccess.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-requestmediakeysystemaccess.html index 68002d2a808..456f37f5774 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-requestmediakeysystemaccess.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-requestmediakeysystemaccess.html @@ -4,8 +4,11 @@ Test navigator.requestMediaKeySystemAccess() +
                                                                                        diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-reset-src-after-setmediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-reset-src-after-setmediakeys.html similarity index 96% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-reset-src-after-setmediakeys.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-reset-src-after-setmediakeys.html index dc2c1d53324..15c91a001c3 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-reset-src-after-setmediakeys.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-reset-src-after-setmediakeys.html @@ -4,8 +4,11 @@ Reset src after setMediaKeys() + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-session-closed-event.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-session-closed-event.html similarity index 95% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-session-closed-event.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-session-closed-event.html index 6f817f7b3e5..577047a251d 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-session-closed-event.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-session-closed-event.html @@ -4,8 +4,11 @@ Test MediaKeySession closed event +
                                                                                        diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-again-after-playback.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-again-after-playback.html similarity index 95% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-again-after-playback.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-again-after-playback.html index 2106c937781..29f53b31d7a 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-again-after-playback.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-again-after-playback.html @@ -4,8 +4,11 @@ setMediaKeys() again after playback + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-again-after-resetting-src.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-again-after-resetting-src.html similarity index 95% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-again-after-resetting-src.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-again-after-resetting-src.html index ed7f2370271..8f6891b79c1 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-again-after-resetting-src.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-again-after-resetting-src.html @@ -4,8 +4,11 @@ setMediaKeys() again after resetting src + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-at-same-time.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-at-same-time.html similarity index 98% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-at-same-time.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-at-same-time.html index 62c63652969..01fd7b19402 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-at-same-time.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-at-same-time.html @@ -4,8 +4,11 @@ Set MediaKeys multiple times in parallel + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html similarity index 97% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html index bea28d0e176..31cc6107964 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html @@ -4,8 +4,11 @@ setMediaKeys() multiple times with different MediaKeys. + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html similarity index 95% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html index 93af8cceb7c..64ed315e0c9 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html @@ -4,8 +4,11 @@ setMediaKeys() multiple times with the same MediaKeys. + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-to-multiple-video-elements.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-to-multiple-video-elements.html similarity index 95% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-to-multiple-video-elements.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-to-multiple-video-elements.html index 38c11ee74ef..fb8386e8cff 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys-to-multiple-video-elements.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys-to-multiple-video-elements.html @@ -4,8 +4,11 @@ setMediaKeys() on multiple video elements. + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys.html similarity index 96% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys.html index 5374c9a65c4..96b0fed974f 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-setmediakeys.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-setmediakeys.html @@ -4,8 +4,11 @@ setMediaKeys + diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-syntax.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-syntax.html similarity index 99% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-syntax.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-syntax.html index 0c960c86184..5c4c667cb99 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-syntax.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-syntax.html @@ -4,8 +4,11 @@ Test EME syntax + +
                                                                                        diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-utils.js b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-utils.js similarity index 100% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-utils.js rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-utils.js diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-waiting-for-a-key.html b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-waiting-for-a-key.html similarity index 98% rename from tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-waiting-for-a-key.html rename to tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-waiting-for-a-key.html index 3469b159ad0..2af37cfb9af 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-waiting-for-a-key.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/migrated_to_root_disabled/encrypted-media-waiting-for-a-key.html @@ -4,8 +4,11 @@ Waiting for a key. + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-events-session-closed-event.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-events-session-closed-event.html new file mode 100644 index 00000000000..ddf3ecbbbf7 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-events-session-closed-event.html @@ -0,0 +1,40 @@ + + + + + Encrypted Media Extensions - Test MediaKeySession closed event with Clear Key, mp4 + + + + + + + + + + + + + + + + + + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-events.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-events.html index 31bcc40636f..4f3b6222b86 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-events.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-events.html @@ -31,10 +31,11 @@ getSupportedContent( 'org.w3.clearkey' ) .then( function( contents ) { - var handler = new MessageHandler( 'org.w3.clearkey', contents[ 0 ] ); + var content = contents.filter(function(content) { return content.keys; })[0], + handler = new MessageHandler( 'org.w3.clearkey', content ); runTest( { keysystem: 'org.w3.clearkey', - content: contents[ 0 ], + content: content, messagehandler: handler.messagehandler, } ); } ); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-invalid-license.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-invalid-license.html new file mode 100644 index 00000000000..09ff934a04d --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-invalid-license.html @@ -0,0 +1,31 @@ + + + + + Encrypted Media Extensions: Test handling of invalid Clear Key license + + + + + + + + + + + + + + + + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-keystatuses-multiple-sessions.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-keystatuses-multiple-sessions.html index 0d6086d3851..3474f9d5151 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-keystatuses-multiple-sessions.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-keystatuses-multiple-sessions.html @@ -33,7 +33,7 @@ .then( function( contents ) { // Select a content item with multiple keys - var contentitem = contents.filter( function( item ) { return item.keys.length > 1; } )[ 0 ], + var contentitem = contents.filter( function( item ) { return item.keys && item.keys.length > 1; } )[ 0 ], handler = new MessageHandler( 'org.w3.clearkey', contentitem ); var config = { keysystem: 'org.w3.clearkey', diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-keystatuses.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-keystatuses.html index 4fad37e5eb7..6edec35cd02 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-keystatuses.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-keystatuses.html @@ -33,7 +33,7 @@ .then( function( contents ) { // Select a content item with multiple keys - var contentitem = contents.filter( function( item ) { return item.keys.length > 1; } )[ 0 ]; + var contentitem = contents.filter( function( item ) { return item.keys && item.keys.length > 1; } )[ 0 ]; var handler = new MessageHandler( 'org.w3.clearkey', contentitem ); var config = { keysystem: 'org.w3.clearkey', content: contentitem, diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.html new file mode 100644 index 00000000000..9eca41cc08b --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.html @@ -0,0 +1,53 @@ + + + + + Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, clear then encrypted + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear-sources.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear-sources.html new file mode 100644 index 00000000000..884d22d7577 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear-sources.html @@ -0,0 +1,59 @@ + + + + + + Encrypted Media Extensions: Successful Playback, alternate Encrypted and Clear playbacks, Temporary, mp4, Clear Key + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.html new file mode 100644 index 00000000000..1e190246372 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.html @@ -0,0 +1,53 @@ + + + + + Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, encrypted then clear + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential-readyState.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential-readyState.html new file mode 100644 index 00000000000..66313e727e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential-readyState.html @@ -0,0 +1,55 @@ + + + + + + Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, multiple keys in sequence, check readyState + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.html new file mode 100644 index 00000000000..64b00cd2902 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.html @@ -0,0 +1,54 @@ + + + + + + Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, multiple keys in sequence + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-requestmediakeysystemaccess.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-requestmediakeysystemaccess.html new file mode 100644 index 00000000000..f8402c99a56 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-requestmediakeysystemaccess.html @@ -0,0 +1,40 @@ + + + + + + Encrypted Media Extensions: requestMediaKeySystemAccess tests, Clear Key + + + + + + + + + + + + + + + + + + + + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-reset-src-after-setmediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-reset-src-after-setmediakeys.html new file mode 100644 index 00000000000..61da9d86743 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-reset-src-after-setmediakeys.html @@ -0,0 +1,47 @@ + + + + + Encrypted Media Extensions - Reset MediaSource after setMediaKeys for Clear Key, mp4 + + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-again-after-playback.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-again-after-playback.html new file mode 100644 index 00000000000..697cf207cfb --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-again-after-playback.html @@ -0,0 +1,53 @@ + + + + + Encrypted Media Extensions: setMediaKeys again after playback with Clear Key + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-again-after-resetting-src.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-again-after-resetting-src.html new file mode 100644 index 00000000000..d695445ef1f --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-again-after-resetting-src.html @@ -0,0 +1,53 @@ + + + + + Encrypted Media Extensions: setMediaKeys again after resetting src attribute on video element with Clear Key + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-at-same-time.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-at-same-time.html new file mode 100644 index 00000000000..91e6b9ec3f3 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-at-same-time.html @@ -0,0 +1,43 @@ + + + + + Encrypted Media Extensions: setMediaKeys multiple at same time with Clear Key + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-different-mediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-different-mediakeys.html new file mode 100644 index 00000000000..064d7ed05c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-different-mediakeys.html @@ -0,0 +1,49 @@ + + + + + Encrypted Media Extensions: setMediaKeys multiple times with different mediakeys with Clear Key + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html new file mode 100644 index 00000000000..9e383afc3cc --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html @@ -0,0 +1,49 @@ + + + + + Encrypted Media Extensions: setMediaKeys multiple times with the same mediakeys with Clear Key + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-to-multiple-video-elements.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-to-multiple-video-elements.html new file mode 100644 index 00000000000..cf73b8085c6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-to-multiple-video-elements.html @@ -0,0 +1,47 @@ + + + + + Encrypted Media Extensions: setMediaKeys to multiple video elements with Clear Key + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys.html new file mode 100644 index 00000000000..2865052c65d --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys.html @@ -0,0 +1,43 @@ + + + + + Encrypted Media Extensions: setMediaKeys with Clear Key + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeys.html new file mode 100644 index 00000000000..6b4a08a9171 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeys.html @@ -0,0 +1,42 @@ + + + + + Encrypted Media Extensions - Test MediaKeys attribute, setServerCertificate and setServerCertificate exception syntax for Clear Key, mp4 + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeysession.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeysession.html new file mode 100644 index 00000000000..2748c31a57f --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeysession.html @@ -0,0 +1,42 @@ + + + + + Encrypted Media Extensions - Test MediaKeySession attribute and function syntax for Clear Key, mp4 + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeysystemaccess.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeysystemaccess.html new file mode 100644 index 00000000000..22e72ccc82d --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeysystemaccess.html @@ -0,0 +1,42 @@ + + + + + Encrypted Media Extensions - Test navigator.requestmediakeysystemaccess exception and MediaKeySystemAccess attribute syntax for Clear Key, mp4 + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-unique-origin.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-unique-origin.html new file mode 100644 index 00000000000..2871862dd40 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-unique-origin.html @@ -0,0 +1,43 @@ + + + + + Encrypted Media Extensions: Unique origin with Clear Key, mp4 + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-update-disallowed-input.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-update-disallowed-input.html new file mode 100644 index 00000000000..e5061a76542 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-update-disallowed-input.html @@ -0,0 +1,28 @@ + + + + + Encrypted Media Extensions - Test handling of invalid responses for update() for Clear Key, mp4 + + + + + + + + + + + + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-waiting-for-a-key.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-waiting-for-a-key.html new file mode 100644 index 00000000000..2876a54a479 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-waiting-for-a-key.html @@ -0,0 +1,52 @@ + + + + + Encrypted Media Extensions - Waiting for a key for Clear Key, mp4 + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-update-non-ascii-input.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-update-non-ascii-input.html new file mode 100644 index 00000000000..cc134729140 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-update-non-ascii-input.html @@ -0,0 +1,36 @@ + + + + + Encrypted Media Extensions: Test Clear Key handling of non-ASCII responses for update() + + + + + + + + + + + + + + + + + + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/content/content-metadata.js b/tests/wpt/web-platform-tests/encrypted-media/content/content-metadata.js index 31c6e3d6c60..8ba5bcf06c2 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/content/content-metadata.js +++ b/tests/wpt/web-platform-tests/encrypted-media/content/content-metadata.js @@ -1,5 +1,14 @@ content = addMemberListToObject( { - 'mp4-basic' : { initDataType: 'cenc', + + 'mp4-clear' : { initDataType: 'cenc', + audio : { type: 'audio/mp4;codecs="mp4a.40.2"', + path: '/encrypted-media/content/audio_aac-lc_128k_dashinit.mp4' }, + video : { type: 'video/mp4;codecs="avc1.4d401e"', + path: '/encrypted-media/content/video_512x288_h264-360k_clear_dashinit.mp4' } + }, + + 'mp4-basic' : { assetId: 'mp4-basic', + initDataType: 'cenc', audio : { type: 'audio/mp4;codecs="mp4a.40.2"', path: '/encrypted-media/content/audio_aac-lc_128k_dashinit.mp4' }, video : { type: 'video/mp4;codecs="avc1.4d401e"', @@ -10,7 +19,35 @@ content = addMemberListToObject( { initData: 'AAAAcXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAFEIARIQrRP56ivmmLh19QSo48zqZBoIY2FzdGxhYnMiKGV5SmhjM05sZEVsa0lqb2laVzFsTFhSbGMzUXRjMmx1WjJ4bEluMD0yB2RlZmF1bHQAAAMacHNzaAAAAACaBPB5mEBChquS5lvgiF+VAAAC+voCAAABAAEA8AI8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAwAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEUAWQBMAEUATgA+ADEANgA8AC8ASwBFAFkATABFAE4APgA8AEEATABHAEkARAA+AEEARQBTAEMAVABSADwALwBBAEwARwBJAEQAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARAA+ADYAdgBrAFQAcgBlAFkAcgB1AEoAaAAxADkAUQBTAG8ANAA4AHoAcQBaAEEAPQA9ADwALwBLAEkARAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AagBZAEYATgBmADAAeQBmADQAaQBzAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwADoALwAvAHAAbABhAHkAcgBlAGEAZAB5AC4AZABpAHIAZQBjAHQAdABhAHAAcwAuAG4AZQB0AC8AcAByAC8AcwB2AGMALwByAGkAZwBoAHQAcwBtAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA/AFAAbABhAHkAUgBpAGcAaAB0AD0AMQAmAGEAbQBwADsAVQBzAGUAUwBpAG0AcABsAGUATgBvAG4AUABlAHIAcwBpAHMAdABlAG4AdABMAGkAYwBlAG4AcwBlAD0AMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==' } ] }, + 'mp4-clear-encrypted' : { + assetId: 'mp4-basic', + initDataType: 'cenc', + audio : { type: 'audio/mp4;codecs="mp4a.40.2"', + path: '/encrypted-media/content/audio_aac-lc_128k_dashinit.mp4' }, + video : { type: 'video/mp4;codecs="avc1.4d401e"', + path: '/encrypted-media/content/video_512x288_h264-360k_clear_enc_dashinit.mp4' }, + keys : [ { kid: [ 0xad, 0x13, 0xf9, 0xea, 0x2b, 0xe6, 0x98, 0xb8, 0x75, 0xf5, 0x04, 0xa8, 0xe3, 0xcc, 0xea, 0x64 ], + key: [ 0xbe, 0x7d, 0xf8, 0xa3, 0x66, 0x7a, 0x6a, 0x8f, 0xd5, 0x64, 0xd0, 0xed, 0x81, 0x33, 0x9a, 0x95 ], + initDataType: 'cenc', + initData: 'AAAAcXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAFEIARIQrRP56ivmmLh19QSo48zqZBoIY2FzdGxhYnMiKGV5SmhjM05sZEVsa0lqb2laVzFsTFhSbGMzUXRjMmx1WjJ4bEluMD0yB2RlZmF1bHQAAAMacHNzaAAAAACaBPB5mEBChquS5lvgiF+VAAAC+voCAAABAAEA8AI8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAwAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEUAWQBMAEUATgA+ADEANgA8AC8ASwBFAFkATABFAE4APgA8AEEATABHAEkARAA+AEEARQBTAEMAVABSADwALwBBAEwARwBJAEQAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARAA+ADYAdgBrAFQAcgBlAFkAcgB1AEoAaAAxADkAUQBTAG8ANAA4AHoAcQBaAEEAPQA9ADwALwBLAEkARAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AagBZAEYATgBmADAAeQBmADQAaQBzAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwADoALwAvAHAAbABhAHkAcgBlAGEAZAB5AC4AZABpAHIAZQBjAHQAdABhAHAAcwAuAG4AZQB0AC8AcAByAC8AcwB2AGMALwByAGkAZwBoAHQAcwBtAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA/AFAAbABhAHkAUgBpAGcAaAB0AD0AMQAmAGEAbQBwADsAVQBzAGUAUwBpAG0AcABsAGUATgBvAG4AUABlAHIAcwBpAHMAdABlAG4AdABMAGkAYwBlAG4AcwBlAD0AMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==' } ] + }, + + 'mp4-encrypted-clear' : { + assetId: 'mp4-basic', + initDataType: 'cenc', + audio : { type: 'audio/mp4;codecs="mp4a.40.2"', + path: '/encrypted-media/content/audio_aac-lc_128k_dashinit.mp4' }, + video : { type: 'video/mp4;codecs="avc1.4d401e"', + path: '/encrypted-media/content/video_512x288_h264-360k_enc_clear_dashinit.mp4' }, + keys : [ { kid: [ 0xad, 0x13, 0xf9, 0xea, 0x2b, 0xe6, 0x98, 0xb8, 0x75, 0xf5, 0x04, 0xa8, 0xe3, 0xcc, 0xea, 0x64 ], + key: [ 0xbe, 0x7d, 0xf8, 0xa3, 0x66, 0x7a, 0x6a, 0x8f, 0xd5, 0x64, 0xd0, 0xed, 0x81, 0x33, 0x9a, 0x95 ], + initDataType: 'cenc', + initData: 'AAAAcXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAFEIARIQrRP56ivmmLh19QSo48zqZBoIY2FzdGxhYnMiKGV5SmhjM05sZEVsa0lqb2laVzFsTFhSbGMzUXRjMmx1WjJ4bEluMD0yB2RlZmF1bHQAAAMacHNzaAAAAACaBPB5mEBChquS5lvgiF+VAAAC+voCAAABAAEA8AI8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAwAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEUAWQBMAEUATgA+ADEANgA8AC8ASwBFAFkATABFAE4APgA8AEEATABHAEkARAA+AEEARQBTAEMAVABSADwALwBBAEwARwBJAEQAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARAA+ADYAdgBrAFQAcgBlAFkAcgB1AEoAaAAxADkAUQBTAG8ANAA4AHoAcQBaAEEAPQA9ADwALwBLAEkARAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AagBZAEYATgBmADAAeQBmADQAaQBzAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwADoALwAvAHAAbABhAHkAcgBlAGEAZAB5AC4AZABpAHIAZQBjAHQAdABhAHAAcwAuAG4AZQB0AC8AcAByAC8AcwB2AGMALwByAGkAZwBoAHQAcwBtAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA/AFAAbABhAHkAUgBpAGcAaAB0AD0AMQAmAGEAbQBwADsAVQBzAGUAUwBpAG0AcABsAGUATgBvAG4AUABlAHIAcwBpAHMAdABlAG4AdABMAGkAYwBlAG4AcwBlAD0AMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==' } ] + }, + + 'mp4-av-multikey' : { + assetId: 'mp4-basic', initDataType: 'cenc', associatedInitData: true, // indicates that initData for one key causes other keys to be returned as well audio: { type: 'audio/mp4;codecs="mp4a.40.2"', @@ -27,20 +64,64 @@ content = addMemberListToObject( { initData: 'AAAAcXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAFEIARIQVY7lQbkKsvOVDQCt43YNRRoIY2FzdGxhYnMiKGV5SmhjM05sZEVsa0lqb2laVzFsTFhSbGMzUXRjMmx1WjJ4bEluMD0yB2RlZmF1bHQAAAMacHNzaAAAAACaBPB5mEBChquS5lvgiF+VAAAC+voCAAABAAEA8AI8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAwAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEUAWQBMAEUATgA+ADEANgA8AC8ASwBFAFkATABFAE4APgA8AEEATABHAEkARAA+AEEARQBTAEMAVABSADwALwBBAEwARwBJAEQAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARAA+AFEAZQBXAE8AVgBRAHEANQA4ADcASwBWAEQAUQBDAHQANAAzAFkATgBSAFEAPQA9ADwALwBLAEkARAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AWQBpAE8ALwAxADYATABzADkANgBFAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwADoALwAvAHAAbABhAHkAcgBlAGEAZAB5AC4AZABpAHIAZQBjAHQAdABhAHAAcwAuAG4AZQB0AC8AcAByAC8AcwB2AGMALwByAGkAZwBoAHQAcwBtAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA/AFAAbABhAHkAUgBpAGcAaAB0AD0AMQAmAGEAbQBwADsAVQBzAGUAUwBpAG0AcABsAGUATgBvAG4AUABlAHIAcwBpAHMAdABlAG4AdABMAGkAYwBlAG4AcwBlAD0AMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==' } ] }, - 'mp4-multikey' : { initDataType: 'cenc', + 'mp4-multikey' : { assetId: 'mp4-multikey', + initDataType: 'cenc', audio: { type: 'audio/mp4;codecs="mp4a.40.2"', path: '/encrypted-media/content/audio_aac-lc_128k_2keys_2sess.mp4' }, video: { type: 'video/mp4;codecs="avc1.4d401e"', path: '/encrypted-media/content/video_512x288_h264-360k_enc_2keys_2sess.mp4' }, keys: [ { kid: [ 0x13, 0xa7, 0x53, 0x06, 0xd1, 0x18, 0x91, 0x7b, 0x47, 0xa6, 0xc1, 0x83, 0x64, 0x42, 0x51, 0x6f ], key: [ 0x8a, 0xaa, 0xd8, 0xc4, 0xdb, 0xde, 0xac, 0xcd, 0xad, 0x26, 0x76, 0xa1, 0xed, 0x38, 0x95, 0x2e ], + variantId: 'key1', initDataType: 'cenc', initData: 'AAAAjXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAG0IARIQE6dTBtEYkXtHpsGDZEJRbxoIY2FzdGxhYnMiRGV5SmhjM05sZEVsa0lqb2laVzFsTFhSbGMzUXRNbk5sYzNOcGIyNGlMQ0oyWVhKcFlXNTBTV1FpT2lKclpYa3hJbjA9MgdkZWZhdWx0AAADwnBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAA6KiAwAAAQABAJgDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBCAGwATwBuAEUAeABqAFIAZQA1AEYASABwAHMARwBEAFoARQBKAFIAYgB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AcwB0AGEAZwBpAG4AZwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AbABpAGMALgBzAHQAYQBnAGkAbgBnAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAFUASQBfAFUAUgBMAD4APABDAEgARQBDAEsAUwBVAE0APgBJAEQAUgB0AFAAZwBVAEkALwBiAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=' }, { kid: [ 0xee, 0x73, 0x56, 0x4e, 0xc8, 0xa8, 0x90, 0xf0, 0x78, 0xef, 0x68, 0x71, 0xfa, 0x4b, 0xe1, 0x8b ], key: [ 0xe4, 0x4f, 0xe1, 0x45, 0x7c, 0x5e, 0xbc, 0xd8, 0x3e, 0xad, 0xdc, 0xd6, 0x2c, 0xaf, 0x55, 0x18 ], - initDataType: 'cenc', + variantId: 'key2', + initDataType: 'cenc', initData: 'AAAAjXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAG0IARIQ7nNWTsiokPB472hx+kvhixoIY2FzdGxhYnMiRGV5SmhjM05sZEVsa0lqb2laVzFsTFhSbGMzUXRNbk5sYzNOcGIyNGlMQ0oyWVhKcFlXNTBTV1FpT2lKclpYa3lJbjA9MgdkZWZhdWx0AAADwnBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAA6KiAwAAAQABAJgDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBUAGwAWgB6ADcAcQBqAEkAOABKAEIANAA3ADIAaAB4ACsAawB2AGgAaQB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AcwB0AGEAZwBpAG4AZwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AbABpAGMALgBzAHQAYQBnAGkAbgBnAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAFUASQBfAFUAUgBMAD4APABDAEgARQBDAEsAUwBVAE0APgB4AEQASwBBAFkAMAB2AFoAaABVAFUAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=' } ] }, + 'mp4-basic-key1' : { assetId: 'mp4-multikey-sequential', + variantId: 'key1', + initDataType: 'cenc', + audio: { type: 'audio/mp4;codecs="mp4a.40.2"', + path: '/encrypted-media/content/audio_aac-lc_128k_dashinit.mp4' }, + video: { type: 'video/mp4;codecs="avc1.4d401e"', + path: '/encrypted-media/content/video_512x288_h264-360k_multikey_key1_dashinit.mp4' }, + keys: [ { kid: [0x8a, 0x0d, 0x85, 0x45, 0x21, 0x05, 0xd4, 0x15, 0x35, 0x8f, 0xea, 0x8f, 0x68, 0xe6, 0xc1, 0x91], + key: [0x76, 0x6f, 0xab, 0xc1, 0x68, 0x3f, 0xf8, 0xef, 0x4e, 0x76, 0x00, 0x24, 0xc5, 0x23, 0x8f, 0x10], + initDataType: 'cenc', + initData: 'AAAAlXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHUIARIQig2FRSEF1BU1j+qPaObBkRoIY2FzdGxhYnMiTGV5SmhjM05sZEVsa0lqb2liWEEwTFcxMWJIUnBhMlY1TFhObGNYVmxiblJwWVd3aUxDSjJZWEpwWVc1MFNXUWlPaUpyWlhreEluMD0yB2RlZmF1bHQAAANYcHNzaAAAAACaBPB5mEBChquS5lvgiF+VAAADODgDAAABAAEALgM8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAwAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEUAWQBMAEUATgA+ADEANgA8AC8ASwBFAFkATABFAE4APgA8AEEATABHAEkARAA+AEEARQBTAEMAVABSADwALwBBAEwARwBJAEQAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARAA+AFIAWQBVAE4AaQBnAFUAaABGAGQAUQAxAGoAKwBxAFAAYQBPAGIAQgBrAFEAPQA9ADwALwBLAEkARAA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AbABpAGMALgBzAHQAYQBnAGkAbgBnAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AcQBOAEkAZQBiAFQAWABzAG8AcgBnAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A' } ] + }, + 'mp4-basic-key2' : { assetId: 'mp4-multikey-sequential', + variantId: 'key2', + initDataType: 'cenc', + audio: { type: 'audio/mp4;codecs="mp4a.40.2"', + path: '/encrypted-media/content/audio_aac-lc_128k_dashinit.mp4' }, + video: { type: 'video/mp4;codecs="avc1.4d401e"', + path: '/encrypted-media/content/video_512x288_h264-360k_multikey_key2_dashinit.mp4' }, + keys: [ { kid: [0xfb, 0xb4, 0xb7, 0xf3, 0x4a, 0xbd, 0x31, 0x87, 0x34, 0x4b, 0xce, 0xc4, 0x5f, 0x96, 0x68, 0x88], + key: [0x26, 0x52, 0xc3, 0x1d, 0xf7, 0x92, 0xd1, 0x7b, 0x08, 0xa6, 0xfa, 0xd3, 0x7c, 0xb6, 0x25, 0x60], + initDataType: 'cenc', + initData: 'AAAAlXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHUIARIQ+7S380q9MYc0S87EX5ZoiBoIY2FzdGxhYnMiTGV5SmhjM05sZEVsa0lqb2liWEEwTFcxMWJIUnBhMlY1TFhObGNYVmxiblJwWVd3aUxDSjJZWEpwWVc1MFNXUWlPaUpyWlhreUluMD0yB2RlZmF1bHQAAANYcHNzaAAAAACaBPB5mEBChquS5lvgiF+VAAADODgDAAABAAEALgM8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAwAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEUAWQBMAEUATgA+ADEANgA8AC8ASwBFAFkATABFAE4APgA8AEEATABHAEkARAA+AEEARQBTAEMAVABSADwALwBBAEwARwBJAEQAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARAA+ADgANwBlADAAKwA3ADEASwBoAHoARQAwAFMAOAA3AEUAWAA1AFoAbwBpAEEAPQA9ADwALwBLAEkARAA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AbABpAGMALgBzAHQAYQBnAGkAbgBnAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgB0AGkASQBoADYAUwBKAG0AcABZAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A' } ] }, + + 'mp4-multikey-sequential' : { assetId: 'mp4-multikey-sequential', + initDataType: 'cenc', + audio: { type: 'audio/mp4;codecs="mp4a.40.2"', + path: '/encrypted-media/content/audio_aac-lc_128k_dashinit.mp4' }, + video: { type: 'video/mp4;codecs="avc1.4d401e"', + path: '/encrypted-media/content/video_512x288_h264-360k_multikey_dashinit.mp4' }, + keys: [ { kid: [0x8a, 0x0d, 0x85, 0x45, 0x21, 0x05, 0xd4, 0x15, 0x35, 0x8f, 0xea, 0x8f, 0x68, 0xe6, 0xc1, 0x91], + key: [0x76, 0x6f, 0xab, 0xc1, 0x68, 0x3f, 0xf8, 0xef, 0x4e, 0x76, 0x00, 0x24, 0xc5, 0x23, 0x8f, 0x10], + variantId: 'key1', + initDataType: 'cenc', + initData: 'AAAAlXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHUIARIQig2FRSEF1BU1j+qPaObBkRoIY2FzdGxhYnMiTGV5SmhjM05sZEVsa0lqb2liWEEwTFcxMWJIUnBhMlY1TFhObGNYVmxiblJwWVd3aUxDSjJZWEpwWVc1MFNXUWlPaUpyWlhreEluMD0yB2RlZmF1bHQAAANYcHNzaAAAAACaBPB5mEBChquS5lvgiF+VAAADODgDAAABAAEALgM8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAwAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEUAWQBMAEUATgA+ADEANgA8AC8ASwBFAFkATABFAE4APgA8AEEATABHAEkARAA+AEEARQBTAEMAVABSADwALwBBAEwARwBJAEQAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARAA+AFIAWQBVAE4AaQBnAFUAaABGAGQAUQAxAGoAKwBxAFAAYQBPAGIAQgBrAFEAPQA9ADwALwBLAEkARAA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AbABpAGMALgBzAHQAYQBnAGkAbgBnAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AcQBOAEkAZQBiAFQAWABzAG8AcgBnAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A' }, + { kid: [0xfb, 0xb4, 0xb7, 0xf3, 0x4a, 0xbd, 0x31, 0x87, 0x34, 0x4b, 0xce, 0xc4, 0x5f, 0x96, 0x68, 0x88], + key: [0x26, 0x52, 0xc3, 0x1d, 0xf7, 0x92, 0xd1, 0x7b, 0x08, 0xa6, 0xfa, 0xd3, 0x7c, 0xb6, 0x25, 0x60], + variantId: 'key2', + initDataType: 'cenc', + initData: 'AAAAlXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAHUIARIQ+7S380q9MYc0S87EX5ZoiBoIY2FzdGxhYnMiTGV5SmhjM05sZEVsa0lqb2liWEEwTFcxMWJIUnBhMlY1TFhObGNYVmxiblJwWVd3aUxDSjJZWEpwWVc1MFNXUWlPaUpyWlhreUluMD0yB2RlZmF1bHQAAANYcHNzaAAAAACaBPB5mEBChquS5lvgiF+VAAADODgDAAABAAEALgM8AFcAUgBNAEgARQBBAEQARQBSACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAGUAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAwAC4AMAAuADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEUAWQBMAEUATgA+ADEANgA8AC8ASwBFAFkATABFAE4APgA8AEEATABHAEkARAA+AEEARQBTAEMAVABSADwALwBBAEwARwBJAEQAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARAA+ADgANwBlADAAKwA3ADEASwBoAHoARQAwAFMAOAA3AEUAWAA1AFoAbwBpAEEAPQA9ADwALwBLAEkARAA+ADwATABBAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AbABpAGMALgBzAHQAYQBnAGkAbgBnAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgB0AGkASQBoADYAUwBKAG0AcABZAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A' } ] }, + 'webm' : { audio : { type: 'audio/webm; codecs="opus"' }, video : { type: 'video/webm; codecs="vp8"', path: '/encrypted-media/content/test-encrypted.webm' }, @@ -143,9 +224,11 @@ function getMultikeyInitDatas( contentitem, initDataType ) function getProprietaryInitDatas( contentitem ) { + var keysWithInitData = contentitem.keys.filter( function( k ) { return k.initData; } ); return { initDataType: contentitem.initDataType, - initDatas : contentitem.keys.filter( function( k ) { return k.initData; } ) - .map( function( k ) { return k.initData; } ) }; + initDatas : keysWithInitData.map( function( k ) { return k.initData; } ), + variantIds: keysWithInitData.map( function( k ) { return k.variantId; } ) + }; } // Returns a promise that resolves to the following object diff --git a/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_clear_dashinit.mp4 b/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_clear_dashinit.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..33ac63f6bfd720445402f7dc2d313bb3df9fcd9e GIT binary patch literal 238401 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_clear_enc_dashinit.mp4 b/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_clear_enc_dashinit.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..dca23449af78523f5b9111b6e1d24749a8e43392 GIT binary patch literal 241564 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

                                                                                        $*cI8h_@(qX1)y{x4f^|VD?vXAcUM*4 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�k;`74nJ$9n%rB`8U3{=Y)V)~eC z)V@)s3rVv$iCE1`h7P*X4>Bdb(FNdK1N4=FZR_2jx)5hh;^aakB;{kkYoLudvZ zar{E3hF?=YMsFDDK|Ql;*3%!r&Uuh`R7E{OkCJi7DUg#iI`(&Xbn2W#mK%qMphiwNMNj9UOC zC;UOVi)j}=7j|ANsedc1SE+m@06M&nLqWO?ku8J%XI4+CZ*ZRHxN{ZgV`&~+Za2P58}><|DGzsO>!#M>^d znHB4muE~k`_-YN;nLu#ff-xug8z}eVfy5!P5vf!duTvsyy!gf!R9%@!)~z(!t}-&F zgb?@GiG5F@R83pvN?g)kLE2Yo8@BbyF1<+F#2Vy>G*~V}X%7n6K05po)cU!9$A)s& z)w5b+25(0{@qz6i^A|!_%P#(ud40trCD6$JQFVrAbH>-FRKG*5zQ++hBehP(`?l3V zxf9@v<>Dq=yS*SE%{qkO{*$61Onb0c-~`%aj56okyU!lnldUMDuHN+$m|qNp97eh= z5}oFGeR8=l=|nBaJl*Q1-~uydLfpjW^SBk50uICh*5hJApAs9**ZAu6N4&)X(&H=R`@0>Q?u~w9dx8( z3|-%`?7q6ANuU{j2nBMCd|v4nFoo+Z3@Mw7@d^;aO_&7N^IJ+n2`F(2LK$)PlcB3f z74T*daaXEeSqr+l=*(RVSsupI&Ze{uSq_{WPJ!6-9n+s!DXgWRJjH&Zmf@>$S8(GT z0!k6vCs$?tto-=OX5;$rt@GrcVJ#+5c=H3wZn64yvdXH@9-qe`YhVTg7TOCKESkFs zsgJ7cBU!?{VP~(SwG~;vG6vwBw|J**LbwxJSP^VaT7jgibX)dex;wD_d9+`ew*Swn zlv?vX^lFfkq5GQ&QQuVL-`0`v~v+Zg~#igtu zh*Rwj;VzR2#|{qM-rjT&%KcR8$ikZTu3=W7N0cV?M86MJ*Ld2Q)?j|9gK(^ED#E*a zGsiIxG+7Zd(a}JtfbeLXl=)`Y1ngITynD87<|4024f;)0V{>gA(d@U)LRcPtmhHIE z8{-;DDA{BN$@=fTLj9@BFQRV>hsa9cIg?%v(q2G#_R2v zk`*je!kknu7|H)AAkqJ82d!0m6sbVgV37oy9%;#=-moamrM}l~qbQ4h^+a5dN&SV% z|D}ZI)YtbG3Rvl_O^K3J>#b6?-PH~s4u90z!*E(P`+enA#9P26bR<}fF}{WX_*1=X z9QXDlzwtyZYE2U{Q`qZ`FDyv&TCnrp@^&wiKUw&IW0S>S-z!oaBQgVQorud=Q2Xmt zFD|(giM=ni9W-ucrJ^kBy3I?Ham5jZsih2SwTkZ)Z^2_9NeREl<%#UPP;0w!TPe%8 zQ16IIw7n^+{5pf^bt|z8dS$tQfp7A#x`0Ivj+yq18z*h0ghZW2dX_db;}|WBlI^R@ z8b0jYR(xe?*CNQGYR2KN8@KF7O6}BsK0J-8*X}eb^^lBxS4jHiMw|vsqty3X)>_I1>>oE+~UT} zxnwV!2!)c{1L15sg_wE8eeNNi#B?tAqI)6LZu6JBP@J|AsP!91Gg^ma{qtbm{1ckE ztLfc#Ly7aOvm1sHjd<6#K{N7^LJcQW?%Ayk~CM?)+69G10#O@Y!TP zK?`WkYo;nG0l_&sUr+_e5CH6LHDkhq8cqHtdQ;?)GC=|=o?^A$0>$VQXt0#GMNM_n zyWMZohQ;9m_>wjx9KAxjG;zUDgoat=S3BfSn(`EKLGkZUj>`6^|~ zFi*=vD9SN#VF`aqvVd~HD!LffCM|+i4;$2!ZWA9gMS%+aOvy|jBJ)y8*9Uq3~by@=(maIXIRFx#TNS?rVMANCXOWM>c^C~JElAr&pZ zbgzB-&wWJ4TPR-s9_Js1x!U{v@HW?%AwZY>Oi-E zbs~lYmM`&iiKCK}p`8;Zf^9|SHA!YmkaI0-sL)=?AWG9afD~9^(RiI&4UA`;90EaKnfpVl^ZD~QMn_xW1g-qQ$ zyPv!$z3Je!e3(A}Yd#;Nk|6Km;-g?QqHw3D+#NJ(Qg(-C%8vz@XfFR42`XTKL_Svv zH?b09hbxX!q`k6;ntp;N7bBD8{jB?aA1WvLlb0>L=XZfI5K;5dDE}K55ZqRgA>@F*i>S6)-@7wvpq3r60mWHNJ-Qj(ghPoi;_jfrdxd+ZEY%{e;^qS zBl8Q+!n(C)Xrizl-T@WONeLQGh1?Hq+Ll!6ou7R5(A+IcAZj}g9;Ed{72RgRna9uu zzHB_iBnxH8Y&kbZjA~oSU)C|%)qS(IDwWF3c)dX0@T~srr)Y5+dE5^?Da3@EkRSc2 z(y`jRL@ zz~N$;Ee&glgaR?`$-D8wz)i42EPwqE4m6A^xzMikXcS%jKKHf1!FZj|<~TZYHukL> zQ~>jSAE-oD4HMaEVGs6;2Xu_^_`(X;ex>I4+4iACY&?#-BB!`&FF1}J0sT|LHUM@a zTc`J6tThyYGO2Tl7))P_4^LI+yu_gfc~;Fj|UNCuf;3g zOsPixJK18x^SiGiCgfDZxpd8r@+J;{IqHdo9h(*tfeXKH_#4M@^i%?-{f`IQ+ z>x?ACG^!(}Ri;ufD`mg}lbm3}>uJ~kj9;ka*pTQ%9IKgaRHiX4(ymf6)op z`OL#HUQcn0$H_UN3QA+qiUWKN|0o6n=R2F#)I(wOt%i%qH$q|$qFS4NJ00;yhEH*@ zB{~sNVe{LS(zqkQ>x?977{1a#P}0LPy4p;-qwQ)5GHrpk+p>n(Hrc!~PgkB9M4o&W z+Lx~mJ9gk=y+l;xm>4Cqh4Y=~WjSEGFHXv{ZP7j}GFGuVUQul@&|V?_lHp`LQ`3^E+sN^V8$BU`;) zy=3d-nV}A}vh@Kq^qN220cNVk`UA`F-Oz@5DJa9S*{Trlczv%zBC%{WBf!GeD0r*Q zE8RvA3>r35dyr^I1>s!ueowTX6^TzT6!bl?n2#<9X?g!?ZtEI8pvauMN&}1JOJftf zX1>8iuK*24LtMm`PnN%h<0DIcK949j$(Ish<#7wbUTn;cV$SvHFaK{8_kGj%peIT) z2}p52el1((N{*HftVO&r;&g`XC@oYLQ-lNq`Uv*l1v~k=pM8O%3iK8827dI`+8~(S zXPSFny+FYmfg*dc&jGZNMDknedgH*}aN@s80@ZYHs@@a3TlO~h5G}M(V~QhC_ARaC zLuSeSO&uPa2})kl{|>?F^5hoBLaD7D7#JVU3IVz6qQG%OG3_CK0eko*63Ol8C4Yk) z=%H;rCzrPgm1lkuyD#|-MYsc)zrvz&mrW<~QehQ46Kqo}u47bpcmki4-G8Rx$e7-U zm2oHnlm4I6zUj|0vkOoR`3g;N*{?8>o4&S&CBF#Zcqg0QuszA%78$>PqNs0C6`~6}F*#%ADwA11r`e*IKmh{c)PamC(Ol|6XtD$jKKt3r z<#L+AUAb1${l=b*+=BXLEo~u_nrDmx*)okdBwAij&W5eBtK<4PN&g){{SGoX(A-IV z>PAuGS+bv5ZOh6-92{A};#={~SuPoB(ld;0xA32ipA?8?RnpMh@mEcqF118H!AcBf(I3D>d}C-=x(YFcbq>WA7`7BT_%vBczvy?rw(#t zw)bUCbfM)7&iQ3s@Jk6X>Xm-^>4^sQ-m=(a7PpfIaGOe&l;m`BSO4Uif<%>pn#85* zTby!E2kB@i^FkAi<>J^Rp4nx!o^11IyQTqgI&mFj_Udp-z_^{X^Lx5J z>|;U$0oyQ0_t~B(dK)g^9kQV4g7QEM9}rhXXp*GdrZ1P~=s1!N1Fu4zvUiisVTZ#C zNZ7a5iqC3PM_nB&dYTK-f5IS8D52UF!9Sj*#I`MMQP} zWc_)D z=J|0ReO2wIy(MrWjMsj$&t*W5lKgPv`MVTKyud}+84!M&O;vZBU`7|tMp8Q%-z~{( zBniJrVlh_KQHWPNq|>0jK0`?zca3bu(9?%8+e_=-#W3NC)GEb&e;ovZp3;n%Q*x*MW$1^upN$?)#U;4}|SXI`Ji7000MDWmxTllCcreR?T)I z$tHSFj5+bH4*{WcSt_Ar{7yS5$?(1|GAO%Ps%ief0RcEA`vjAO#zDf*<#)dXJi>5KmOQLU2S%kL~06n47|I9{)RJz<_awlS$S74rMuvuEj(33k(e z!jvmyj&q80Nf}LuO38JU;-ME;4kc~crTn%~os&L19#zQXVJ_j+pX;FiJAoV7?{4ec7*D^AOf+ZoE(uFqN4<>=@oV$YMfv^sZd))$Bfa z#PZ5d)90u)haKeA^h8J3UO&4j1@X56_d=nqe$uhinsxN`Q&gVe>zM@D&Kv`_`QCMb zT8D?7h8{=v{1mAkDwoENGv%HztPQ@w{@^U$Ub8tVx9%dhGTkI1gy;nS90?wYLu;|b@Gk0_a|Y?d5j z29BIHof>jzQb229e^f8$0|WJ?``&Hh6hv;6=!c00xX?&=(TYNhLhj?>bX7iht>D$> z=H8O~OBw5OD^?`@k!=UcEFwE=`Y7NVIaCnmtVZ5w5LVaHB?B69y9|-$13fk{{1T|b z%}vh%cmIe%QvaS&v40n1CQTH?6iDy(^~7(&73x}Yn)%o0kwAzhdjk~~o2MJ*LC@-A zsZTF&P4!gJ4w0)yoocrlWJV2_@Qm12VL(f<$cf;M=QqaGo2bzL8weOLaDhmNsZT<6Fsti z&%C%m3Ubh+$+Dn3Sin%)>I&?G*U{66uZn~Vd>|_|*O+)SoRl=g-rgc>oXj9n2xRDv z;oiPcSwDJ;k`&W=?nv6ctPn3Cuoft=#%8m)E~rhp3U6Zlde#DlPE|U(hm^z434mC? z=NElL?`L{nm2q2;oN=4@LO$v_`^sa}1On=7@3ttq7bD7KVom3+QaehZA8TsSJT&SV zYE300Aiy6hqW1-$PEWJZDz+$fQC9;*SNtn@f*)fEv#YHvHy5@BHRjzc5?#NbC-#=)Rs8JGMPAn6=_oh5St-YEbjpS7Li^3aQi`yX}WJQgV{nkNoP;p|WH96c2Jv0{`#?w_ICH9Ged7H>2 z7OKMToYSwzOtw_O4my7L@u|L(BLn1@#}V?1C2(&mTkRxvYC32$fLEOV#SUkqsEv0 zY89K5ah`=1xTrz3#4lM!2MdwxtC#A$F&vd8IF0Nz{K@uS+={R>Ht`Jg;(Dm{h~uTeU_ z2-H2yk2OB=^gP2oys86YMuCZ`b4Xry%!sNKc6nVWW+YdFf${gl0ECJ6#EFK?QdUg!n_D5!ucF z00)X?8D!+Tu-M-m=SlTZHVtPG7aX=}sxeEdM2<48xEc^8vKYvoDK>$Z=K#YL-hY>Z z%1;WC4Cvq4YPe*Q&kjRfs|4PzP7?1g%xs{WaLn?{QAjv2>JX3;7=RL8U`u^{p3s72 z?TN|5%EMH%b_J5@T%e`YfOmMKpd5P?udvvE_pn?1c|K>wa*__njjQ5v-7*5ve6$(BQUVqmU`B>Akh% zttb+%f=AC^_07eq(9g#OYVZ48#M){7C;I zhxZwf11eXApIMg*xJP?+dH^ttdD;H-6VJkUfuK>OvCBfiSI0-B-ISq&zbwW$gPmqB z-db%LIW(xsdFO=ehuPR@e7KDB%#R0}ND!TsH6Tsu8uS$tS|#yL;*~iF)vgKy{mMsH zmL@Mc2sMZ4F>`AG7uln(1nbdxKV%j$0rZp`mlD1e%uHv9_b z&V*3OCp=k))Tc+f3@XXYp=wF#myJ%s; z6|#H`(^fkX7BOL^k#G`1yRFYkYO^8gkh=q)_M86Jpc#+a*ZrJwz(_D`Jzb)D8J@+J zGRJr+sB5r*Al%dIFE?6jb%?xW%Cm2FN7kI@1>8nurg#{2+4gH2!m>`V-@=CxSc#p>!T;iCncL5k2Hj3ahGCEK#ueT2SdqspPs}davbVvUP5PKY6 zV4w>pEd>ltL)le*5JlJYnCvw)8xAv75Ub{Y{P)7jn5ROhXgS>WxdB4v_-6M)t$F*d zKOLOA;6P@F#}lY;A&LtRDIDPB1%`~ypqZ2_Xi@zZ6<;N75%V$3ekmjK=eO6}2R<9i z9P<@;c^y}GdrKiRk9HR#!|BwsP*@Nb7bcfmgVgYDRp`W&(Cp|g&M7Vtg^zvQYXH=6 zFLo!^s*18vT4D!bjiXj2E8WyQRIP(CeLq;vJ7-J%paU$kUBaqyEm%_*&K%Dogk@Qm zw=}go>`KxpG6Tvm+8b_-c^`r&sy5*WI)#wKAd$ce(%pRy2%Ct=rW5}UgRu46{ z0J^fh0_0zUASTbwz;T{4PX$tq-b=}gdsqV~grGEr?D`^$AZBCiHIW+jkw$V71jTxs z&LJ>MRqSL|zZi4NbmDeUB`-KPS`nK#DDbjyze_?h#O#PaflpDvmu7s~3p0|Gb-6Y6? znY@P69?>{idP&{WsMz?rss`#Mzjl`3Kdn(zOck^Xeqyyvw>-1P@OP!ztg?o*7Hu^Z zbHJgJM6d3dB88pJ_%8qAZeN zC~I&`vmRE@qf(HOQ3tV#Z9XpD1_M0~YaTqW^n$62&u845WuST4$x*TAeN|6l2;Lk# z`skw-s$MjR{&aPpi9*IC<<_Qs2|_Cd7tU>yo>IayyPB2!4dx5255WSyf(^stOPEC6 z!I(bj98Tg8Sx*;i4RRma4Ozl`LMU6Ob%wc%$Um#y1{RqU>M^+%9$EE>Q0IcA(lN4( z-RQf0S?5MbRDZf_S>^dS-gmY*cLvQE=z5<8aITiGg?C(ZeH3={FPR+BBM5+v-dKEY Mm<@ku_nNZS29!6n?f?J) literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_enc_clear_dashinit.mp4 b/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_enc_clear_dashinit.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..d837ac65005861e8d81345fae4c4b4c1c90c6aaa GIT binary patch literal 241049 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 z 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 z zG&EM*5H>0usKn0Tt-7|pAl44xy&?D*nUc+^5o?Y-{Rmdq#G8nd>okzUr98n$jJ+Ft zmI3*VcVH?$kum#XC>5Z|rxMw1&ozX?#k^L*LqMQi6S4zYpP>$2X8^4O7WufH`{1c5 z>FkeFjjtVooq#Gbr#Sd9CfcKgZ;G+A+U@QUrrRW@E9XU0jlg#8Gi8sy_{0M=9f0qI zH$S%EtnPK0*HnSnuZUToUHVy&9wRyC3~pkDgJlftB&MfJC>ACj3bizSQ5xy@EmgCCo2%W?X-LZDp0P2u zuF!AJksN{E;`2wL)&0$P)rGmqzAk4@vRqp*$)bE%0Cp1I9`rHH!x8Cs*6L0ICf7fg z%}f%g`?3!|p(QEC;XCX?UU_UIDGEa=CIjfK{y*4 zRD6syK^ip!<^PF1bm^%Jvl0lUu5D`qN|sj?6Ofc0=Z);tec2}_AHBhOM(?$Sw+7bo zGBB&y;uPQX4y8C#SkJs{s}s{PeQYcP?Iwg88&BcVrX=;cYe6)yd3zdsk{ZZOR-dnn z*y&sb*s$R21KfCswm@d+u7WGo;bV}tNxUi|`NzF#sPOHK$@#d$W%ot}F+JR5XS6mS z@5c1*=1x1~NfvlM;$lsXd!u5dQ0S_Zd`+BPyb{byO^s63lOS_Vpf+&gW?ttwnfniFK;1X(r?- zUqB+{CdxaKwD$qDV#i0$h_db@o^otHF2`cXbF5*=XNw*tn9&(w+mG?N55PW54@ZW{ zjHS*8GD+Tqfey+Ag`>T`DyD^f_K5C_uxh5vpSQ2+la#fgdh)B*tt9WKc@)^&ojcZ1nvK)VePKb8>ry3sM2Ra>+1WK@&mA141<+rWQk;s$wsIV22 z`WimFZ-GIaFdUh0xkyKtlIr*42lFMX={;klu;EgS>(>pMh^^`4>NINSgp z-gcgaTdaIy5|%K)p4i&JLgptI#y9(zbbw_YB<*NA2|x@W3QG|x<}ugU<6WL3~5?kDg(bBVs7##HUA*{;ZWuBYv+RU{m`9>YacNcnY>ukn?KymC%ckY zCzz#*oOxh&kmJwAYWFglJYSDe7pu8~fg9@iAOaM2*IcO(scR(+1)z%m$Q2}*920ko zHOhXzfz@|D%tFi*Vc7uI|J7)`bD`7mkOc@DK*>eHm;A50tmL;LB&LSG+nt5Z^!r=O6kDxUwd>24y_iY%~|L8HYpUhw*b%_Qp&Ox#;12p0Ato6-0> zQ&<7-#gJmX^1WwkD1lQ(K7(dRd)nx!74eGuE29y5B9YT#+TO?6kzG_p{Ds>B@;RP^ zLG3Djg`HDNiEoAh_pIi&WP)P{pvA`tLZ!6POH=6#VAQwS<70Ghfl$Fz-kh3pnvjye z-f0DZ3MlmWo~Z8uMMhH9Und_#Di%&bG>N*Q(V9wb@qXW7(|AK)xx7bzeKp5c%;+!& zushz23w!9CA7_{oPMA#l^%c~<;e4U-?<%fs;ZM8#qPb_ZQpXMtIj|VFpk3-4zm-Bq z{PU9u`JZk`Su+Y5L?G`t@ESkn^QnuhyhX$QtFcqIKx!4RccuOa z=qK=aL%Me$bO{~j>Y5Cl?-xe`(THaN00&!Th=c|oF(ruM^~TlvYaJ#N%B?iURPtvq z!{k@mAwK&D6gRx*WZZKRbiQAKVZ)EW(_4;}`+pM(X(pz6y?GQ%4{N;o_b0-WVW@S- zTecDrgSqN0iTH2qIBC~FD6%zHC91bM0sHawTr3bjTGnz#?C5v7_w#Xf4&mv}exlPD zsO&M;I-*ZMXJ|;C2QF{NO9R?IlfIh24!{fj2e7Xt34)B(*Jb+;{} zy=s-OCNk;M?ORA)-434b&Vb~ovluqCvW_lY)073>qSFc#YYz0JWA8XuWUNh+9=w{& zs&%|5RIF?1O-VrJS$z7#Ow-KlH@USz^n|?O2n6Vnn8*F}Ig;qJ@K@ZL2DOXjzFjN( z{>r7?R&EXnALAK`?XX4DWgG5r3L4~HoKP8Q3UAPhHYfJ~3u+6^#}MJ2d>ufu6h5h- zx%Ov{kitdL_$|e1nY?(LaFgmOA_97tV}ZqHh6P*{VXx@`;bqvZpfrBG-Gcrv5y!0r z$U5qx196GFFR=21A&R2>l%gXq=K8H;1E(Lm zMSK?7k9{>4N|@S>bFoZ-PsT#H&&Mj&2(ZyS0^j7HL7N-yZZUz$Q2!ZPLZoB748uI} zB^`&%$!34h=2>zi4wSMteO)0u0p%ur;Bg!4$s(1Q3YWRYxX)Q^j?)Lwz`KA7SIEg^+(=0<;vL7_5s zGL?1{RBeN25-_4cswHq}D{SDxpm*_`E@{x*)!@R@zf}NbAS;vwS>yZ#^WwOHUWp2G ze5&pA7QlD(tdYMroRa)P+6uOH;bW|vUAks)s?SBeiqJ9qJQbN2dCS30*YB~Ba-4B* zaGZP_8PUU$5%Ss~u|H}cG_bNpDs*3sBO7^!=SsP`ccrEUiNX)9=f|!^^1b9woAKNX z2uTv^#Y_u9gm@n`_$0O+@@=Pq7rj@j9z-RdN?-uC(EYJV@#+h|F78HW&;7~Vb6yhx z|I$$s`ms*~CRL=m?qB2lrK~e;86Z6LZ$LEqhry#_lomb}d#IyH{^wdK2qDYeo*xOb z=~HG<@;|LPEoyyx^BPP6wgt(03uigD^b5*3BHw27IPHVhr1ivAdUB1dJ+W?CMF6)K zUu4k#_(fT}gqwl}xQS@o0zx*;Fci6woL^*uM8SmYvqED>x_~m@!VQz3LG<1O@ir|= z6(jzYZT@DiJ`0bMZ}44mssvkDP}%O}p&&*b84%luv9Su(<&kyoaQD$1q<7Hpz-K*G z;^28WW)xUGD>)FdF2y>zOG0tE3yW~vj0eslpzf+U^Jqe!!k>NSzK0$`)p{=}EbtrM9J?Nl#I)-c&^Bd&cARaU> zYsRaHzAxXR(;S)>yB7RRm_OW_MDC*(J%yuX{lw zEv4{xu$qgfS&b|tX&1ZBoT3p$bCf-KQO!V>1O30z_^9mGe09Knro)8jE6s@0cBNWs zgw9)0ezw|JJo%LBW`hbsVWDQYl--&m>^OfJl}yXci-{V|xW3yC_#cv=(f()IChLZj z2{jPe8bN*0vpc4cuQqK4(5ECl&C*kK^$dC#uTxuRf$87w)U+~Sjp`7~@@+};e;1Bu zs1E7AUOfv5=;^2a^$^nFvOm3V&16{IP&uf$lPKbj%NFHPTqJ)LU0EL{*`ze5r%Rmp zApm~xV2*R}r2UL0o(x@##IBsI9Rz*@}a-4ypxvs_)4Q3{MwH}ul=ph)83&&C5>6|Je2$bN! zr?qP#!5De5EE#|4dj^Jw2EJJ14maAzt}l5!wKTd@ZP6|U*gXHR6EX7YztkgPJ*+9n z0XH_Dc}=^6ntI}0Vijx}R{aa;*pA>z!k^2$`4irYnqM=ie^b+f;|hO!G?a$2@j?L7 z{(yN#w-UhrO}sHMsD4+!P|kULS-dL)5VYc148@#}aqqT8C2%dJ<`!kgzl z?X{_8BdNXEk<*7k3uuj~at(MeF0Zis=BAJ#S)cnE?;H*kU||3N2a08gf&qsyC5Ykm z#?||49jt&SOk@a=#unAFZnigytjQqSSP3mrj5Ux&t=ukQF&*SB)#W%!*_$2OI+2(l z3?>SlkE~>qFC#s|QW`D@mDq$|EpPD^(+hVewg6i*?^tTtAnqsz=u=2-du$Iy)kQ>0 zrzejD^a6{*Xh?MN3x(B?4cB@`HfreDonD7-uf^sygH9+$Pf&|q5hIL^O7A@j=Vtoq z`Bs(1bwGin{f!xe1ZiZU5Ag{r2Y5}K4{8U1qeIhGzk#q7Z#=9vci9$nkk;}mgZ%fe zXKyRiCgRtdrL5ML)CIZahj2-fFF#zsTXwxX3Zg@05r+&98jD>V$LE)Szeh(q zd4^{yxvH{Dbtn9nf*07%J3iJGExvB*9xQTF@#((h*}y0cU4TGn1d>v=WE8|?Ykr*x z3y!Wc@IUSvcf5*&tG^D@wO>#b{}F)vTOXGilWnB2<=RyC_bcex-AxxIW-sFznG^Z) zKGO9qx)@Uzs>0%`KlQE>KZ7xBlmIc(F4&ST{G+SWO>BKpk$92`*D2KCv!$N`TnUl@ zRyz@92I;m~sbHw_de z;vvaA{wK0_({BfQ&cReH&V2>?s^Sw%NQK(4ZMYegNs>9mt7$^-pR;E^<(UNV z-dWsA$$_$32%IPa$L7v}b@762agr{(C80~PAPPVGkc{YPL>opR)WSD~|1=Vqpv`sP zqm=qa^AE-N%8WRniKddY&2~Pho1)6HefZ$1_@{z?~m<5@q!G}1^Q)(zwTq%|WyiKUj1;)-Ph5su-*Z4pk-MWpbhFw%YgY({3${(`t!gD-ycH?y zHzRxqp%Q+!J7!%*b;V~M^Da(!HrJF^&Fmda0&r#p0-O!ajdfIgIH<~T z8<*kdlyV#a-D>k&2i01R&K>4%t%|c)z2!0AnowzG3Vqvk2+0UCEgaa8YN&g~T4#Fx zep!_s_xZV4zvpqOvuvqkTZgzzf|1u7Vv*N35C zp@0A3_;@w>ziOd1b8IAC4euT!8{1iD#9t<;1^e%vF~e<{fM{v1rND4mr;%*?J5E06#g zuxgE83~|QbNVc~dZ;ui;` zHE0_UO}IZU4%gEv@?F-Z(~+jT$PVB$4z>S@wLz`6w#V4U+{cxqw-xY%hIy7M`$cKN zj1g9HXFHF>C+bnsfv%Alm1V6TBhElpo4LTudo! zx!AElHT98CpgDz73!NiZgv#tkeeElO=aO00XA&wJXAQ}XS6Fh3pB!^myU$`;y*WI4 z!BM0AP~6^{WSE8jBa__3mH~5I;2%yTx47(i$olEVJ^VJe8}>$^Qu+dU{F+uVE(OSF z0Igp*HjtRSPsh_g)_r`WR%lK!`M`jW9VGOK_+M_jhCOV^NJ9A5W9HD_O^3qR_tLgA zzH1I{b5OL`MB)I}H*^O|zBB|^IsSm_Ph?me)Q?1>Pe zAhL=zjV*OD*Wl#R%oC~tFV7D=%?xRg5v5W{8J786OhG`jROrX;Ysj_p8`>%2zw1)b z#+@Y+#&ZNJ>(q71rB>hnf&Aj=n!^3R9hKA6Qqq*Ec|UriEBD>5z?K)D#SKMAFExJ4 z>0$axxfd+8Z-#li=uNqknP2wC*P4oZROW6Gj)4CAcFw5k2VE_s)8>{hN9DPW5ik3w zQ6hj4ZOqsWO1uDl6iNSxK0yOQq=VNxpEOpC-BPqTE+%^#!m4W;Oe(++SF99nGXn>6 ztwNuGY1GjAqO8Y7px098hRV=p&<2>#iHrDZgNiDdH)*^)F>9V~*V1e`ep_d-T?FPl literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_multikey_dashinit.mp4 b/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_multikey_dashinit.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..659a61cdcf1270cb99a058f89d817f283436e2d9 GIT binary patch literal 246574 zcmb5U1yo#3v#>k3I|L2x?(Po3-QC??0t6?)3GNy+K(OHM?he7-o$wEN`Of{`od4dn z?w(aGPghr0SNHB776SkP2+dqP9W0&g*#H0lh@qP?(`(tp+1A;_(Afe2fcj`_Z|??d zv$1uvFahTO^?>dDsek}G{uljs1=#SfMgTzYzjgn285D>lZQV>gfH|_Q>3_yVTLRVz zU7Y^#*Iutyf%2;UpA>)$YdG*@z_Wa%Q zS6vXO_BtvEAus^|NKH*#oPjx>sg1MCAM)R}|MUepu{E(Y1hx^{n*3)zuYP1S0RW7D zx?uGE$>=OhY@FU~0NgB1O#f4U&DDT)dr3n(6C2Z49gq}TOFJ`Q0o~2^kJ0~jlhov& zHart2(^s9>=d~T))yanNpE8K1vx|`pu)N{y;{2b5ebt#TwKINQ@YmV+$ z2dXMK|KmKonUk&I>y896bZ27=+gGE;K=0lLr35ldAR=^mWq%$JSmGEeG~7w*N0i>ul~|@;X;%Q%iGTh7J^9 z_5V7ap{t3DA+TN3*7Q#fECPuBdu4&U!O76U;WhaG^UzxUvwcWQT() zWenZS*x2b=>6sW`gOTXq{Q7DF0LQ11C7!d=qj~)l%QNqZj)BM(8U*!!1px=z*wER< z#?Z)_SjN;-+QOJc&c;N{##+kC-qJ`zh*3tJiOEP($-$6WjZH>F&c;|n&Bn-1$w5=y z-BLzGnpsmr8dzpyR908Cl(&?2($cW@kg{XsV}>#@H8XUz0q%P+jsG~63V!C9EGQgO z8n>gp9;TlNY~$nvzIh!yNv%M!~lK( zFVMaaKm{nTWd)!$d0mLhBz!6n}<5>dCfw=|H7ZZRYaBM384ZsoD-w^1V z5kMGV4WxX)&p#gh)0Y?Mi4Z^^*iQ*q;{TucJHM@f&7X+V1Eb>tv||pe*#T2};0R8@ zsJj3oX7VSx|Ia%7)5G-7ikbrGfNS}>ULL@>)BRb?*EM*Jw;{k4*xv#;!@q4Y0DXC# z%j;fn2Ck_g(AMkNuf6DjC1>Es9)D)>Z{J_%q6&=a|NCql-u8mi+YWg3$rU&jJ+STp zv}_CX)&^Mq&um^J^|wu4;99-zU=iS|Dg(!p1xC#g7=0;VKO^97&;a^p5A@XhEzAdDr&W4t+Cm+b4Qx#ZveHihv{{KC|K7>F+_CSmOZRm9X z-~&H761w@P=F^RG#XH#fr10n-v!DhP^N)$4wNyVoB*W^ zC=)>0c#|Gro(7a6p!|5tOM!V4P+r@DfZ`350-$^X3h-`x)dx><{^#0x4Lu{QA*9<- z*d^!$Y=5)aI@d99K_Gzht$9tM{Qlj_9SaQpD;M}T=Ye?RYJYL>H_r4IKYioy|K_{~ z|8U5bzxePQpZPcE<9_3%fANAh{^{SGAMuS_{KZ}0xbI(l<&B5@n+u5l!=dK>;@$sn z==FbdL8X5<4BTJ**PDLzzqye88+ZMS-@bACe{*5KH_rWUE&}}0^SWNp6o2vHH%|L+ zE(-m|5&z=hZyfC3TnzS&WBkRV{^3xY|K{RwZ+zu1{$?L)?B84h@=gEfFaG8~)Zo9l zy?ca9f1>Sh}U%c^+ z`~RCOFuifdzj(yB(b2j+@9k`G5+}%Vg6kXtoqIx@ z&7b;5NQ#U!Qf@?#OkY)h@FRK6CQuv5FVEVhFfFvU>|eXA5=x{*@n% zzRu9ca{Qk-)3!3SGB;A1a%kWJdi`6a#n9^|ElvfyJvCfTQVHNHtWs;?gsU$jJOUtH zs;dEK`X+P?5Jq)vafh3uU5lw@PgqvmGFRL34tbEs>tmn?aX(Wh41RH9D@3$9$^Cxd z;Rzt^%r2e3i(QB(adDX0>>x@}22`%)-Ijv2d<{AD3qgp;@u=pj*obA<%1N{-5pjZUwUID`EgZ$(b$~+N4$B{ zP;h`LJ!kKyc`pQWBXIBgX~l~U;e@O&HF0AI0r1(99)uW>e6Y21Igh6aS5Q_S5DDVJ z7~Px+Kf`$4knb>mYg=tl&BUv`7_nElr+QX%ewtA_BGfC%qKL4QoJIm$;mX-Fqq#Vjl$&xxhf0HKDE{GFIXHT` zP_cM|TIA*nxoj2@y_Kfl6scBaWviP^rokCVOOL`BKj7T92?f++m*80;u7Qg~-AY@J{qM#i=EV zmH0Y_a&$9nDdkTjRWl#|RFUw#`?MhsF>sFALBlClGwhc?>idZUP!)8HMPY97T<#vC zm(5j*2*o{kq7_y=qpF3ih?zhbvlKVSUof9dEQc_~JKQuXF>Y4bD4CAGP-eMryN{}M zCv7hK2hSbg$t?QoLlRSgm1FrdvCP?)FjK1if|gp$5W_iPCFf#f3Z!Z}Y)II?02z#% zCQ(2bCGmm&${Bix)Dsh@LFzjaN0PqAaLSBXiRj>WUg3OK`XLf)f4$R360}7${%S*> z{4DN$3yCS%O~rY3ZP6L&pGy#DTQqAQ12Ib5Bpc;=0t;A+xu2d2CM3?hS8xgBD%j}D zeAnS?;4z-(2u*c+QqbP{D8#rhZ{7(S>-5}Qi-_dAA*~rw8M46!-%r151m_-(i;h)5j+W39I7jYA+vEB3FEc z$KM3L_jgoE-iC;n-_T-+*lyYtWh2F~lkT#myzpEb(r6ms9mN#vIEvGBDIys3nmAa- zHwIgO!|$-?@V2KDOzd1%!fX|H3e&C2_2NVPnp#^pRhBq1oQ-r>4LY?YKC$-Ma6=tY7$}s^H2Zm;moAN8aZxep7S zF^c(J_|#mRRg*7c?=3#A)8cLF?~$OqPC) zxh1S)!%-G+1YNthHTBmM|p9Fr|AI~_Wvrkjm@GFf<9ifGf1plZG>l1Byt49XzR9mTdBlHp8 zeNB+R=)Mof0}(D@KxK)nLH~Sk-f{S9vPMEchS3`|ATG?*nc`SigR;Dxt&oCSW(xDM zcOdT5jY<6O%up?sS!8}{8B6F+0ei3yiA1%{qL9psAoC=A@FAzsG)r5IoVN62_3Y$S zm#M7AZ#9sVQ|~5E1H8j7%1Xu|3b>z3;82)PG8&N%4|}4KrgGSn>ct~7O_jNxKOT^r*uyyiSz zQJ+4a{0Xi6U3S^E1iDn`8G>lYo^Vdw7B;u{_Y|7Ym)iMfwZJd%!O%a58D}+D#s?vz zQ;YZgNh>T+D>OnH+{i~YF=CpZ@z6fd!|{iPrtoyN)JR00rCyM>%Ob!YG17LK45qWX-CK)PQvxwsev+DSY?q(Okcl}Xe2t!yb|9771@?ryP<@EQg{dC zw=d{Xx2s$=6ce|37@|K(1W)uVCjocmXN6X53>lRfGmj~+WOOQO1u&3(MWP`FaFFP} ze7G=iwvUc-DeKLV(MnQQM_Qasn-U&DeE~=#;Flm^(H*9`eo3VLoxCy58Y(Uymq95o zqUe}DSg@TEDS+fc|0GhAS8~xt3^NkGyhcIoYD6*4L#Cjuy6&*FFO~@9 zb4&@Km0($epptt%eQph5U=E0Y^}50JDC}8CmFz@eUL=i>;BKo-&Eifbe+kb|%bq*! zW{I{?ipNJmZC!2%k?R>%_bg`qaQfmYQUIln`$bHkP<1mU14BRj9T7zII^KNW2gv7l z@vnc}3Yyw}i=MK(rkyZt?UefP$)El?4vLR-Lb3HuzHfITZ&hOHe;E*t@=VDHs%$QfCCG(bH#jq+k|wk0`y0 z&eD<4M|a>mxZG#5;D2BY9RZ$%O~5T5_(3_urHLMO){E6WM!%Y%EHbwLd#guy85(={ zc%7&2=0vs*cKZ0bxVIHXR}H*%N=yP&`?I`ogTw2zN$Z8apk38oSie9SUp=X9xN$34D&l`-pBRO!XZiHi20U})z%A%+Y=l=G0v5(+%JvBE{QDIz_rp>Zn&1Emm1wY{ z^x7U=y0kfl=Boft7H0)ooElUu-2!W3Fr53*LrF_>= z?m>!E30lslm^)fdQm*`eK)Ru+dJsIahCYVc9eL|m6c>(t6?1- zQ_il2F&95S_a9d~>Fxa1rLl0-*H$t+onxucEF>w4tDHd!Rd{#C<2U}IS7rN5EobI} zRo}c*N3Sk$U-4@ZK}!$a4Sx!14ZPWQLeu5+KG8s#-W?2rMCoAn@oQB^Jnuj_;SNV0 z-wMPc?_ww0``Rf6PZ&H>V^~q%G)ZDv8=ujhoT&8;iUG1fivB2}0hN)PM|#;cJ|}Tq zmt*aH%l+i+(qljocQq~I=q1LncV9#~Bk8HME=4zNo z=Ged3^Pj0YNwNNYrz@@yf6Ea>`FUceYWNhy(8DPM^(3bM%G&Kf*d>`IN)ZG6d)qcO z>xHLL5h|t>iOAy1?!B{ZUQ+soBF)|kn;esz6(|Vv6=(I;+(AZd{EpQa|56Bwe$gp` zZI%pr!n}Qg>`%1B6mHRS<>5zR$z0@deW;Z^FgI;-nQy9_a;!U;wZ`6pKQ7s>FNmD@ zj;6G3WY!h^?v7GRk()xa^DcVT0iVg2lv(HtDke%wr}8t}$Xgl*j?|Z~l!vu`DkgkRgRWVXd2QJ#bZE&QMr`kMdG25aexX!~?!cvZ^N}s5jyc zt!#a7PAR~N8Fo+VAHGMDd+zHj$J)@%tg}-3yd%D(1+ixf9{8d8lHG7vMUxlyH@H1I z9{ot&r#Pr()?f9J-6{bnZY3d*v%eH}TJJBvOoQK*nI4m&VZ$|RMOiE z>}o<0>7-FbyBfKRaqiZ}tR}j`omL3N8yrqWJUq6uFJ+;wM!*pHuM29nJCPO{#z0aq`Fl2|KID?{m0z$x!=(Pe3YF?$slae!vb~AyNiC&9C&YA5>o??BoBzH6O zfR5yYcl(%JFDavVuamz?E8$>$Xyu3+Gj3B#gfMCbBc1jkHd$!CsqXVnSbWH#1Wx-m$U(_@0H;ge)S60mbSQl! z#mYW>Zl$7WYU)A?v%vkZO%QKf$X_Bv1?Q+$g_HvB&9=nnV+&A6&Le$ZF z`u-C1=<@t7VHA{|iAPC4hUk3QVX2MWHqV-=>5cvA^Ef}l%Qe=4o163NFWs51cc{84 zS_nG%RJ|`q-OHWzGyXgFl53@e-0o(q_;&(>WH0O@6|-D8m#qmbmsCN6Vm~DC8A6fo6STY;aLfOE*kyv) zPFbdH=2@%7cAP;Z`}tA;n{vo~ylV2}L{TVN*de3nN}kq=Sy|y4bCeH?1OcnE|B2?n zvmS(TQ_G7O#zclFUNmkf_?DRgygH!6(vAGy6M13q%RBckhiZUSADd?;hnsI0BvnDr|Z*O19FLxJ@k^6%4&~FaeqI*=D=sm6)|0+r)azd1f%Q zo(9pkw_mfVlzl0g{kT8uYb`6R*kdyojP%-$)V3TIA>+(~=*rTb6mU>OaOge0(;{lM z*+QZBI24vv{k<1V+sdTrK|&cf;@^JhrfYX3Gu!+=Ueub%tR3mztBN80N{)Vd4lMqR69DYs^j z3;J4}NY?w8(j8k11qW5v8;EJ{Kv}&JcT^wnp}LIOP&=OD85F$;@k+BpZ9YGkhCrY zHA?t_DM+%i3&F=kTBO*?A3gNI!y|lRRv3$$7Krh3I~Pe-Dxf*>Jvh$BM)w;)3P#l! z{S@zkK@SZnp9^wweTVT?>8P1$vuqJ(CN{z+8hnvYe*ll%PhxCvw8 zP@rA*nNOEqq8bhC+WS#>B)$%-mq`B%$Q$qquM`NMEXb($(;*+iQtDty+Rc9LZ-hL6 za8gPab2`*P4au&Ls~*5d895JLD=DvtRlaP-c~s~3N73nMFj%h`5=iQR-(o!Pn0X($ z9W(pc=xnGO#F#*Y`K${v6I66VNQBsqd{KrI7CGLUnL0(Kx!^IE%1Q2P>%!)E&cTOp zKp#Vd33ap;n|_KTpR~q#U#TN;y_}(*X2%C zzj-s-a=LE-1B>}ZE3Yl3-&c zL_pVxZOjE-sM~nsQu^sMl_l}=8E2Y26H*@=T@o)RBn;i0lkn*~>&L;|bCpv)lvVqx z+xcB4r7a{Y_sJ>oQ@~lm)1=kz3fAg1{q)_mZr61MTA%)&LKCz02NQtm$tB44uIxAn zvoc1u(%5FaBa4xJl>gBaItqP!SEs$a(oD3|V3s4uM|c)EbT6({|4H8aMDgXO3BDTJ z1EI2!bV9mRT!VMEw_Q93R0(;|=ngAd6KYvNN>Ahh=x-}^OX^4NmFN@vDU-cbj zKg>Owoz_v%Dkp>4q2IDc`tav8@C*{WsCzV24)pd7Nd&^gdZznKw(=54P zHaQY3=&`T~-ZdO|BJ+cG$7m$D^a`nG6_zo9no+Fh(}LT;R7MA9n>aM}DF%k1K_^b7 zs*lwgd{5tCSb8^q3Nx$5YL_MJf1C6h!3(xb*}`q3X^hl8&!iC5`KWlUU(l&KUAJM} zqp)qebZkm=UjJi3$v{iNki89jZ65mNS8@r`E4@6+v~=3h5CWJwW&XTH6I*sFvDLIl z+a5@U%=-=`jZuc~5m(58%`9h$%j>$yyEYLPtJ?U(?~yTBqjTv6A(h5Km&K}x2VXhZ zg~jJ!XaUJEAEzJsaJh^}3Vf&%vcsZtRvjhv2EtFmexVR7qoz2hJoNsnweh z{U{$7_s@BwU|>{WO(YvXL&?48XYh8OI$y0w3%%7&tl{i!wD!Db+bVkXB56*+O@n>l5<8MVhP-%)*^Vn+JN>dimT>Nbnvl;{pzX%*wuOf( zGhX2R&f>U@7;&oIBV+bbIJkchcD&HtDnK7{(kv(>CupGlI;bt7w$VEsEXQU6Qi8R6 zBmF)IxA0x5?AM@Ki8V~(AQ4?Wa?G)v7hRtx0d|o`_Grt6$kL?g=J$<31Og3oCGZ~y ztI*pWy%hlxRi|oQ;zCSmGKY=z-@=1%uysJ^1NdIr9P7>Hq{bcIuVgk5gM7OG)Kna6 zC(kOe$W159DTQ$7EF!|5H4jJhY3w2FvY}?H>&I2rY?GG}ML#?dAy zTWyQeUbgL}0P|fre|Ko|bxbxpd(|`~W}Dyx@b|pG=j$eoynaSx98O>${gksh)cj$2 z3sRfoKiYw6*^AH7-`T#!PBWDK64bK|nl2vqy8@DbVZ|!+X_;7Yc<+%XtCx^y^gScK zcj7K&I!5AXv(qr9`9UG^JAKcI5U27wxI9EEz2A^T8J|YPGWYIH2UE$vecslg^XunA zX!gw1Hw!=H>%6%N!AkO>B_Fn8td%C52?fCto^zv{ud&_gv(okLGYj1l5dF~^IYJ!} zAkNnNfO9I?$lp_3HKmWg5_#_5rnA}c8@Wz9l_9;ys1sc5r;FCNp-GaopH$P>ehRoF z15OPv?Pcr9FCA>Mk)m;sdH7?i1rWjMDPWYX3z_NQ?(`h@;!8XsN zRj;r=cAslVRF^#m~|aOLi&7b~L@Y5N`6VV@8JOS3@>jp>Ac)*z*1jSD>SFd4~Ar`o2qv ze#+5Y5`mC-Afjr3JZ6#%t|B)_sf32UUPa@Cn`Tkx!il44WfE6Kw+#?kwe{%5@dJL| zOQv2!v0RDWe)c1~4w}saoi*bN?|h^c#yFV?5tQ9Dm64+qQN{OjYi)b@!x&bW2cVBo zb9)xf)|!u+Uyjg9nc3znw;ZT$9pT)XEaN&pY$0*|>wvC=8=P=atZ1C1i=FKSTJX$7_qCdbb&+f1^><(_*Gq$E^xNiGrP%xy5N9wB9}`v)71s~4*BQE17fZD@ z`u8H4_rgAGt?U|cQ1H7W6M&=o(lY+=`}Ly6xdoz|l;IeQW+A3r)KBY1tz99nBvJhc zmbrsAm}b<0ZWl@tmsA@O1xj{dyS!h>A7rD%-r&fVcM;v@w}>^Xb<)uJl0PV!g~Zh_ z`nffgh!QN5=l~79I7wPn{Cb4YXDaeWN9xWS>T89Z=uv0QRt#Xs21|_xe6NnkOD6VY z@!L9lYA^Y z?1aSj4p7(CPvh0#*9pp@;@^{xu{<&02Y+Qgdw4)IW9uU!fGqMH=9<{I8qiJNHG=xa zOB3R+#P+_kNdfK7wCd!>nyMIRr=StR5LRF0@A2mRxkxTH?@zr<>*rDR!iIb1T67Z~ ziXQv)x~9IO0O#mt z5u>S?PH`%lq;KuT`aQn7&fLJw59*eD#{MA!vuqzir6Ly`2{uj zp}F9VPlJMUMr=@Y_=4cTT#Q`!?@UQ~Q`z$T2wwx=#XXd5N3Af$Wug!$J3oRgvEO62 zp$j4L3Msi-ZweIY9gu>Fb?9xXrDH=YhcWcZ{r-&8M|65r8XRVr3f-0 z4Plp>fQ1W;y_@^#a>qY_ijBM&#d+&q{oIKl#VLbla+I1(9fF(H1SdBlHu^)QC9bZ` z4wYJ&U%z-#wB%%&;jXGco%(tTg}OdnplEHl3%{x(C>5{Kb-duR`a4Ri|0c+Wb4@HGC*WMQt8ea(*l~->ZdfrdLC}3$g#*aly=%NbD&E zQiGhJIVk~S-lt>^L;E?L;CK$P4S-gK5_*;+PkyrYeKeEXOGsXyzR7bs8_@ww8mDx( z#`wWl-oFh_Tbt}25}UEsAc*w?Tu?@qU07hbmSqfg)T*cjM!qmyh5ovHbM~QrBdUz) zM78hj{9rgOd@`T6{VxgTu4ssurgv^0M4wG4eb?5nzRah=U?PNw@ z(9Q{)br4=2&K$jIf4&;9CCOo)hP7guc)SlDYk?~7NW^I)62auD zN5|Pw7zrTjX8C_is-<+EUU|s(8#OaI9)>519ZBvHlx{2m|Ci{fut3wzC|P%Dmlsez zr<+t5z=RK9!eN^206H(pB?)k)^AAK5{(u~PpUSBHktd7vd5q((5Ov&H;`3ENUZvK@ z#!MYWWlILx58=)1)j?bnpS-EccY2t9X&FMW`T1-)i?SA`6~&YXj1;d@J<>ryh|=U_ z9lM`u4`qFToHR!eioAFB6Zx%|8Gw-ZiN{=Q6do)MT2aFx0@>|198SR9o4imz5vUvG=4-`a{yhO?Pnwy z?*42)_xdEuEGl$AUaXJ#3;A#{3R6?lS-q!x83DM(s}&Wuq8$OQVE2Wb`9<-rScnnl z33NY@)9<1KEAnYX&QoI!;JCwn;M~-a;P+TRV5|J}k3$?q!;)}vqZFT($~rdUD}9Xe zMdHqXIu>!QoHadfPe@RO{_0M4d3uvL2ig`F23%CF_5}Y5=3Xv6MGFc+=2Xt|_lRwV zwWpI#;Tq`3DNfTXb&5r;AkO>>2#NDle~Swq9!SJn=Y1z(h@830^)**9FA-&2YYeoSwu#lk zVI;#<&}tq4w4#^2>`?K-9WxrPNWjm}Ti(uFC`X~=ElVdEeo-}0xWY0~r7`mF05~#I z8>a3W|1Pk2!Lk4s@{e|d9rI~Cx0f7={k@JIcom3|gCX?1w*Y!5V>sERX3%ETS5m+pN?)XwjR?(8fc$hw@?@#D*5#Y!9{Xkr%*xs=immY_)I8jpymErM+XF&(u~?^QSw$=9 zDr!T9x=8bDJ`XTLzjZdO&xx4b@PjqCWOMA_Zv@JwAL1!?Np~f;jtD;z-VRb=b;dN1 zUBmffGDqYg^>ul8&Ix8=I47&s#x~_77iZUDlnXA6G{Do_N^!@$A0kPCn@xzNsU2Cd z5t`nHsysuOyODbQ6n5ok^|8~;0^TwaDKTQM^`ZMdneil)aMnVwS_1i0qEoc;14GUM z87V^0+0H{ey>T(bGwQTnVMX{}s=OYK?GnmqfK*87u=Qt@j{@I}lAybTOijpTXo!tW zEj*rA56vp-HZ(!t5iC=ij6mRXnH)Mc`BbBlWUM{w4UDBNI`joV^@N7aO9-M}2GURM zXOBDNy@W%1hD|^<8H$r&;VT*!vJc@c3!?~6zMWettIhi#y1YY2-Rc_nL{fa1Px+(R zhxrl=A;(3=zF*wjFP_kCeR< zV_Oa_#f3TZ`5W->sHK1fTs1AEDE4W?i6k zvM#v^4Uw2PBD1ljMzeNR$~z!3v!Ux3d$jd?)?Q;8yBbTYT+vJU5iwuTC&uZ~AE~;G zyoWY^_Qf4vwtOpbWRl9Y|IR8I5?D$40b9`Xby}u$#3>Szt`u;X_rSq#46w2$c$Dz2AVh7y~5|ZSt~ktZ*b)aZZxr7c-T;! zyGEZO-!76FyfonG_}Z6P$g!!n&2vURogZTkw8-}3y-E31;0_X6gxZX4{rF}3@#CCG zD7NW$k6%OfUNa{kzT3_-T&LV?fnedkOG({Q*PL>)6l)8$;JwV-8XtbCa4(VQLN_3z zAv^ae#U(mcez_(kqf1B@`Y9Ul#o~d>n-QThZZRpD$i&If1M5isD{USvok|E}KN=8ON&1dr@FCAM+THq(D** zxzVf6w8>b#cx*gp*ot2KH~@k6ApLm=7g1((bp9?NV@QJ(g#}{-oJ{2$yhFdn@?d4J zrSgGp=VqCRFu0%AxWL)TrOMbQs8bJSKg&RgLSEUuX6yUF$7sjZ&*tak=aO0QsK(WX z7}sEE6fz;WYp?}nYi;A!m7l=|?KLIQ3;Ya&=2Uaeq!``b+ry9E!Q=3q+M{dR6%~j} zcOF7x%3H5wLjFdxURNEz+tz!mtIm7RL@v$=k`}46Y>p~2R6w)`3Zm$wVS*4XCs5sp zAUv%KNm{BLQD8{e;qHa#Z(J_UEX;TAk+jR8=nsp(E=69zj$omks1WJ7dcffq08WOD zR6$noLZgVdptDW-E`|2+z{m00>k9b0FS4xw1u?UZh;$bFwbJd=vhN;S7*Z}LS%D4C z^Caq|w-bx8-F>uSsb1rsQ1-KExnRhHH@_IC=oJe3G*NX|=GvxD?TNk^Wus_D9jjot z+Y8qSRxI%~ZK{j1Rb1QM<6|hdd?B)mi|BjW$npB(gb^o~Uy%R~W8so*D!dYsr4y)F z1(ux5-%g_)V!o-;h~Y^N$2^u!%NU`j6LF2ibFs))_+|7ws&tmHR-fO$S1t!CvN+_9 z)K5LxtEnP@>jarfwX+s@gUy=KUEMN>x)YTFWN6s(Bl;;d%-%_RV><}9X&7}+R2Yn5 zY^FJC#peQQW`{-#hsaYE60%v|FG3`nq=nJSkU2wB9yVNkLpRcy zS{PrWQ`Xm+@JQ8hV^H+{`uC}yGX3b72ZqXhyisjr7808O*!k>PwN$Fy1$)Acx*^St z5czv3c7iAd?C4d5Rtucx(*+`0;XZA-#-E@a3U``yI!Er?j!LYm_s_`Ay~kKK46f$0 z6IRCEi~8rfG?ILwlwMuj13zFl6!KJEn_WT*u=7b;8STOl1xW9Yg3eMT+rGZTpU~TI zv^)76-hSa)!$V511KYv?a%te12=U_JUktK*ii9N9bYv6g|J`hFcxyVYL*^qXvJO#H zy!NJ}b$m~JdSdnf4s|x;&b0uxrJt?GMlR;oFk@MAuwasnP}-^r0XWjZy0tsP*Vb=? zs24vzBwKH7-P4JEz3RzpoPZtbB6c^=vwb|rSGNIdAL3fa6n7T7RJgcvPB$}qA=wI% zOKGwPm6AiOgCB|FWo`&#;TRW}DQA5#Y4-(}LA6a@+2yTjSl?TkrZE_=q3Ls8k@fI3 zvU^!pVMOWnI*w8-I1P?n6&9tkS(u8C0b8Ay^Z|!Kst;W3u!{HvpBDWN92VcuT>7hH z(7sfz9~i(Q0*`1T5I?M&X2@W8Z5f&WMpsf`ESsS9tg>R_oUNXH^sYNsB+IP#{JV0D zcRJ;xVI4>dO@Hjnl@24u1n(@XQ>N==pq+njn{6B82iW(_>2&l}ALBlF!gl8B2lkWY zaiAAcghGgL6Lkuw!K^?=Z3@vQ5pcLdx#Wz>_Q(7X=h$_t#R)j>`A)!kTbK-e1Q*&Nd@90bmi z)sru@BZdNdX;N}#p*LqpO=3IaG+}lbDrp)wVf4L?V@|Rhyt<_qCifSAZ>|65#+t&L zhvcCANyE-uVlV(&pUGaN8xv)A_h5XC8!1t8HIh zt+=ALJ0nqXs``zu-0<01W>@xj(|OpeW1ynI&@v{_EG7f@L2=ryKC$Cl!v`=FJIl(7 zDC7!)<{RH^4_s;yLfGpaIbxbJPy52GsP9xl#nP(;FiEB8W(Q-_`+D|*P=}MOp%<9x zplRIEl9W(G3O}FIe!`w)DEWMXCcA5=tql)Jk2*zm&s|G9;6_tVVw`c>=-;X5jE0qp z46_$9l2U#ayZ=;Yeb9=nJo(b9bZ)ja}atp5=2wH-R0*pK{oVi5;pJ zoW^o-#76|k`A25_T1^8nGLj7&A&3k#`FEnwH4FP{Xnh)b8lHi>?{e{Ay@^fR<~em_ z8hOE_rZ%~(CwOUG^Z}`cbL+oyd)tVSouhZ?)LWjTq9;v^Q z5S;)ccRsWcc^Ao7@au!m$%i#nF=J>vuV1pDjQl~eKe~0F#r$lil&8LT z)Al$_$Y`2bj@BCohz@23zpy8WdULZ#kz}^c;k;uZ9WmC*T$-!nB1l#$vv`-Q+KNhV zVpV(ZH`1j&XiS>(a4&{M+Vq|Ut^7LJ+Xb({;jFdsMJYd!-$GZ3`n z@G9);LlosGwie*cR%SYXtH2JLDD6WUSiytGUqm{zP$4rQy(UTM4%#~Vt<3`Z2G7D5 zD()(1M79h5#@CKwyX3kbnM|bF^r>jTTUvwH1?Rx%rkRcnLpg4XbOU`$e4t4iF4(Ij z9-Y5h~Ie_M@()Ca2&ziiP9PQ|N=*fo4u5V^&{ zvNRgm9137)IGGYhH=`%%F%;~oz&G;30bY!hq(@3vZ6Q!Z)>45(@FFZNs$bvV$H~mm zH^Kjo=Aoln`?T%u&dQNKb%g>A$H`Vzhgp2{xgf8Ox`P<5wN1d=sVKX?zuP^S6rs; z0Iy{T;hp7ahAVVDUC$tTj0ldc+67W7m=lf#`(hFj3pN{>l zY@^7S)I?rR8}{sEYKYiSD@q;Cu$RH6xlkXUL|jkeowt!3>pCLmb$9fk+z+pPBeLRk zZe_&3U-_B-jF$@e;WkDBP_$5-HR$^3`(+8kRutt4IgHfrTnMhRB>`8@6D##c$YS;b z<(?AmdBZ2fAP86KF@4fEGQu^98|9#5&t(B>cIqE)_#VjT(&vU;h> zgbSbf=Dez1+^HV)VR=#DJ$#*e=Mt+0Lcd&4qIa3-vCJ2cU zyffo-Yw5!t?e-|ce@NkI81xBQYm#@5)J#rr-UJ=y`+AvbcAdJY;C8Mimq=$98n^XJwiuCJu#hO$x8CL2@~d`tZk zJRiGq&e?ds%(wI~Lf?Ic#KKLKX-1OMFfSc*Rd+>V`a&V82ZdT=C>8W{i72a-9B32z z+0Dve^K=0+tBLObqIn=v0SGB2XDgy5s!yd! zxU1G=f&!m(m$X?T`StffyuuPo1cE@qd@#|k-i-h>3C{MgQmU`QpJ=OBewmtS3d7~n zTXF5bM}Pjj=+IhjnJYmqKw4F80FA8oS86a^}PK zw@%Z?<@CLk;RxKwIYxLv5;o8T6bm}d2pX#glue?#+J)K{Kl2`Md?=wPsxYwiAm`kwwe|B%G<%0FG4fzOxRea;RSR_aa#T7#Rq2oD$E@izev}nWXC&imM_Gg zkZ?~=ivQJUNl7I5Fy*(AXRr9+bUMwYB_Bc@3apk$rqEqzJVZ&y)jpNeO=L^wOhAt$;%&&&X=7RyNZL z>1ayrvO21|f@JxVFkV|k!zI%b0H9yls3%PC;Nbt}o4wS^5>_>b{xderM(g06wd zj7*u}hwDB>>jC5;H6KOLjurU{HDU->A6l!+m=yfH-gtx>xNelggW=?PcnXaI?dn;i5t0%64EMP&e7G<=pz{{2v8>u^b= z%2Vmt^V+3TYDO?2AcvG}zzzZc+w96Z)w}iYmrDu-roQGAW}c(@b5!jA@mFe_iJR;{ zCNbq%8`?Wx*9cJWR^=l|;E4A?>(I!R3ZS2y(Qr)bW)+1HMy%&{k-*J8&7&7CKv&{@ z{aRCjVJmM%!2nmcAjX)xc|HVeuZ`g@*F0ppgGYcXw)NqJRAI1~S@h8JkCUPv z>1a0Vg6TQv=7nC?0Z7t{LDa%wV_0F{QJ7i3jFN2J2vU7 z@EW~rYJk3Q{Qf$pI=;#xgQ)6`hB{XFz~A6yTcw0rJm=#h`o^5~zYPy4-df*#_k-JpI; z=|91_a{6DYc1xp4ck)H*}2KzMR6e6JG!-7^1!Q2+!%Y z|D>+yFAg2N2Q~Q!B>?`%ob>+syndRCV-|@Swi}@F4~>PHQ7M)Cb4c zKS25TpVEK`zzN|FSEk|#Rw9~lV|@T!#PzB+IJ~wr;%_TukRaN3bsx4q@SnZhdA_0n(fuoYw$RL0Po*a7s(;rD99!aT+YSlrKhR7fm#txL@E$NTG=;)SGT z7VyEafW!LwSA>Ot&G;}ZRVLy+F`pKy$H&6}00wDg{`)@n_)#{C7bQn}p&kZySHWwyLn8KjOqroX z-jftEcB$S-yQUKYC%K3qxh0{{mA(dq1$uN%9YTy4%t)LlS0Ltuh^H0ShWKLqH~F9k z6D+Ng?0Z|OeDay)pO=&wn#^5f-f~wq-d0C@$?w|z0|6QYb5YyFb11_NF|p0gc@*=0 z#Y7*hp|0HJh?f01?ZJ&)2M4+EEQL-ZU(TH0QyJ1QuwaP_W8GrO%k{VhBu47+I4ume zT+rqH;qf_ssWbDIMT{s-&%WDhS2^BCbNr7YUAilrq@BL?xG zNP%1r%*XMT)$nyyZE2+55|^&rt_wilIJ`;JhFrhChf-6XUU$DFz9`ux3~Z6PT>7}| zvg##0eYte~Ga+k`1jjuDRp1zjL5JDlC~O z%*~w@qdYUp#+){J%x?@{i%XOvIAgT%1aKR!?4(x4-4z!>KgZX7Y?n&dtC~uv!yY%? z;D7r9KH7pS2uK(Fr{=0Ab$hyZ(QJ|M0=fSkQDfLcc7sgFGnR>R4Dj37Q+&BQ&YO;@BEk zDJ4=#Oh4I0L*TPPEO*7*wkCy-9x&+s$$Y*~{7Q*q7A3?KtU&`oyN%PZUiSsl>a7hT zhML)stB=Fdga~_4w&<-)(Q1evDE{g$kam_W4(!Gcs6a->(<*O(y%wX;l`+?Lk$w~; zWB!2B8iSfRnqcC`SPz9?kQu3qLxU6)8^F*iO^$e!RJ|r|A$P#}yKZL{pd_BJ8-6)9#>|4@kR-YfI&@#`%a$e8<|GW(N1<`5aiiJ8U}Ir{b|JUPeh{hTnhcfI z?C36HDeD1T48T3AF>t=n@4}TtT90_9#I+tG(VzvrISz1lcT8RT2_%MjEAIwqnLXwt zB0FR%Y=Q`Qqja4`T@8dB2vRx`t#B>XT@m>weHN$+=xLxK*;+LROFvh!dktJjuTpZ7 zGH_=WzyD&(rAo@sCmFJ1!F(9sRjhPPE$&pm>Wo-o34p_85$j^9>Qg>@6WwOc1dJ43 zlmrr8QV`#cx8dN`*(7vc?Kt-lct0QHd<9%Hy{Yqb4=ef>GN*6wTA znS(CyO8 zC!}D3ODB=&bg1tNuj8`m4O%{33~_&!upP)f3K$ zSdZkr?K1*3eYT(p3|#=4a;^vEOn4?x68`zPdBOd}dLWAoaji%P^(-j>pcE=e=s_mj zb3(C9bT2?(@N`vzo1qB=*$@>{$9}ge?zn`DIoXUGT3nd1oCT{4r&ql4sf@z_(yk}S zJ|9HJ!OkE}Qj{O_)oSOJELKsFwBo&o|Fg|qnCq@aWd6 znt(!u^iQT%Q;aDNZcSQC@ff5>G*GA%hM26ka!o}3H1FQDx6~xBgM~^DOFao$QI&3N zRLtAa^<|yM=e1ks6;fp9w+C735}u41SY zA?u2agNqDy?HJs^RYEuqIs>0Mko^R#hN|YhI6-EVA@@w*QM9Df5^L~&6@pzA}Wgsu3ul9>DopI7CIIHiY)-`Hr8s5-sLsvGyj5h;~oY7pd5d7J5V_KeiAwXwr_$y|ko z{>{_MIE+B?Zh?}9efNP&=D(?^hG9@cLJJ zA56zN>fP62Lg3D)H&Li*D8NCon{~5wQc3N8D#8?oynx&w1lK~b*gG*yL3~RYN&i$4 zSs>x7Cj1&xwZc4<10k9~6TzF;I+9K>a89CYiznx+K2HM>5B5fpe zaanqBjy(DAx|ssW%|c6+nqZ*R`;EF&^Bs_;BxY6fJki6-k9I2h_p9CC_aji?o~y&VhBf)qq5BdE=el+>~iCumjxuaeVH?E+uIUDs|&e zVg3>c#&0-KzNz zXrKgh`Py0npToP+4*BHRz=ku53dg#Gt3Ar)9HWqY2Jd_Ed{pJKr?#%qYCe4~F^C^Y2$aX>8cbU7x(K3y zcGkn*Q?IUNW7VTabslp^UsGYuK52x6e8k(w(xF`|ToQWGlR)*lJ4zs1aV`CDj^}U+ zF+_y00S}?j)NkipvO6V71y=OmYWc<-B7`evyT{DP=WYmTeZQr5I=PBotPh+SLPU?U z;wsm^YC$1_iEID>28U(A+3qs|UR2x1#e`_KJrnj>N0wb(LrKsymXo=hIfR5f$wV&s zT%vPwOo_CLvC6_8icwh;)nm>`1JVTvG$%Q2I4LKV?u86#?oG(kU>gv8f!=1GzX*#k(FR5a0{Z%Y^HkI-o8R;Y#IsuT(Co*p{=I zP(B4Pquvx4t=u8jvD$|B-#wC=C+h;2a8&N@Z#ZRX>=v!i)^?!rmI0K?OCMyecfz{c8G&@hiENyMG8eg6!m zgM7v8P7jYB{zPLg(tMlfJ(D7mqf1@gN|{ z36S$58PtvhUc?Fg<l)vU zKpVD#mnGmK)M}^~r7>)UKHy)Y;1ewqhlXhboq?z^>2*Ks8TL|Y=(C4(7}kjZgx?#< z4LI_}B`_d>=|&_A0A$dYl|AUnzpSD@N)MC61`O+Pf%ad;4t%tm_1gG-A&cWSRW@+d z7%^y`PJw*TZslkq;xf!Cjjr|GbcA2Xq3SYjQK=qt8jH`++q=@X{PQ+0} zJWl|b-71yk9nV`u*@msx_>Wb$pjev2wG!aH^vYtRXX<3>q|d`pLJ}gyTFX5qFT%y; z^M27q5F7EGytSP|jr@J4(WS*zV$C(Bdz-lC;lHR5Ixd~K9Le^3lr9lgmGlk6D^Q?S zpI>Lq>@}cXhJ_k%xNzTyDZ=ke%WeST05^)yIb3iUQ?>LbK`K`@L?~(oAN!izhBtIP zaRGbN+#+cIsti*!(XMiDKz$3ssd`Llw zv#O0n%y_YKZZn%Expa@f4l4EB_W%F~*ku|=nLLkntcA8f)Z#ql!x_RJLrt2qohdb8 z1qdl>@_xZC!dDsE+2Ok86b5T=-dd z04S3oU%8m1pblM6uICZg-UBDE-PF%&##^{jX3rxv=k8j!-kAT*vAI=W{H{&H#_bBL3MO8w>pfN82KBMH8PrW}mYTNQGcx6x7tz#giwIO{; z*pJn`3|`4PGiZ&vvpcMP#Xqnc3T@@WX=~>{yZx9Hk*@4$iS3I^P)m{L*lq{Ch1$`1gcoZ#A1Vlp@xWKK3gcI z5Lg0t9^`^8<^#{D1dzM}hCy1C=jYkQ(k^W&Fd>mrAs{DS_E$oEz|TrOz2T0)%ra#A z&~v=r0*9@Ws5mq)0*_V7m7rOc-j*bZqMJ4jdzOuuvB}9SUp>$piu)e+J`B$bTjs)- zM>f#e@##L1T6up#h2hjJ7UxK*4x?knQM(dhB{*`qfOli#Ah3;LFeg?j9hP?)@;{My zhO%L1NPQVy`;^4K>B;j5!cxM`=nq$N4KO^jYbtrQOxN96qFBN$u=rsd-Am!axIQep z1B0~&-(M7c!lb2CA0T2G@}%Xmu;O=GP6_W~CrueEGo{`^`ye8Wv>|64y_<@ z@s5JAsqpijA_~@sXxyb3tVH*W=JvWegf?-NdRMdPy8GU6I67VuZQFFf?5;U;t7nL4 z?QCvZDD|$L^TA`%R!4XO>|rs1=_`Hs;!o6a-?E!?V@dK~1mLm<8X@bts>;76kMU)e zevD*ND{@%U3Ig**ObG)<$^br#7My%kVwhK8)xUgm4W4e%#0 z9P}8Z6m)SrCOw_IW_wHwI5}q5E?e-1-6OyB^$+$E0BSOQs@(oi-y&op;c&>OHXlq+ z1#>tTA9md4)n`Kq?ql`}^APFnklh^Wu?4RJ$65g0q}{J<8PeYp0Bd|OFPpQsseXVD za83i!qE0y0^;@NdHG|fR=;;1$?~L-}Z{s$5vfSTm!q1fes6B@1`sV=wOK+dS+gmy{ z-?UplbukMqHFsljSwBzc{^MZ8RFA-)Ze07Ou-8`La;*^LOt%g9ay+`{=qU$Qb`3AX z=OY1KrzQ$I_2VC-g}&N0o=|s0OWJWh7@oVUkZv)hn)QB~Y>3o6XvoB(X^tUD1zh7w zr4X~~WhLCi>o(k#2!7O8x`ZC1#I2$O4^b+#8UxPsyVK16rX=ar4o(p)zd%LbZ!o!Sv4BDqjyZ*xuaF0oHQXuf)6lYI%Z z;%D!nsE3ED1Qxi(2Z%stT-(N|= z9NEw>1x(z-rZhZTGV*izJ{Jt3ahzh&;1)+q#7^{H7VeLg%OgA=o1NarUI$pzXl5> zx?7|y3PFz_e*N*TWC%Y4;gQ^e_ptyY(0T$f{wQJV00>`IIQkl8G-v4i5CoW??Vp_Uu`6e^6gQCmK zo0-z{8n5BKnG^BYEL?b{Bk;zq($favr4#pD0@8N9K(lh$N5&}SwGPp-Q)LqM5T^;{ zAy#r=JvnXfE#&CgJom~@*msjLa>(b1=Nqh^#dWlSt(Yx*L>Jzc^EbR##H^`DunGrh z7Y3v6H94n9Pb(a38VCE-V=yf+eJA<^WLQ|R3~dJY=WC1KihZM2rwa~bcUb7-sfP$1 zX|?vRxWrcn*_S--jSiN@^~e9=P9c5h?-G%a;lp+(^&^mhyR0g zZAL``{Qv+6;bmZi%{QS3l3zv1^pdVJux9C`G zW8*1>QG)^9HKd|$xZW)L`rKO}a^s-84>og-)!J#UloL%~CD~ABaelr`fhC#c+Dk2- z?CWYEGEe7?0-<4CQ={8(O&iekjtu^eGhJ!Lyj(^Cs3~ia2gVJZp7>HVhNaPa#S`Vx zCe!G;D@Vt!J;2y=l90d3Ud$><$imZnm09fM4jnP_cz5v@jzKh&meJ&TT+RS8GzFRI z%0sCTa(l-gPFbZKws`|Gx4i4n|8_Nfzh1$S=C}By#2mo=8;HEH-ppDRb<8a+k8A<- zmcyFa{IUif%P*vmfi6>V4v-tA=7w9CiyrYrf)aAaZxoQM1 z_}AcxzFi(`ad7}JLXWXJL_)m1h1KJg`Usk3aiZbjTD3+FKE{9U z&N9rWQ1A-IM>`pds98{SfJat9+d=zR&*4Ma8zfZ02g)*0Dzo{D-EtoqbadZN4J1E4p^wji-=Tb!za&KSXNh`SuPaof=it-`F2#PiHPcgwhMq zjEl{E?#Z6HPiyLWL*GQxIjeHKh=qK#H8`1Hm4*pG{;NbwcBA(&^HV>vNXj(bvk&_w{D8>+6K~*-X0+Rev zm2m{C`ZtJGn>nvw1I!bW)9~FNA{HC%l4>9?+=i+HmDT%hrf!~%lV{bfDbtD)UmIax`X_LK#~ zwO39hTkQJ!eg{CCN342M;G^`TUwZ!>n?|7G0g=jFs_-VnK0Zq{{psA4WqAB+1m9L) z31|fe3*;ctvpE{Pe!xYk>$4_Ygp5bCDpr@gkd`R!&D#qsT6i3>PxTPJH-lF1FRJV~ z=^^h>BdC1hGxDDIh4l<$5H2W7=IMv2ZD{&;a7k(!CwKpz9aO?-N0eM)Vc@ZHMO&u< zTJqLt&LFQGEO5iWTOC?NAYt)Yeu+v|+ZC^ek~vnqk*QOLvUFj5#Yf;{DkA+e7bdJw zN6@0-hPCn=GP1r2l;O@%aJa4n4AQ@5V_C$ci+zSzYKWcyng{_l99Q!zye@frr9m-ZL1E z$X#KCS#emZQY>U6h(SM@Y5oF;mtqklR;``QI;G}gvR+MW$^ifwdGRjNzIml~_~bhudgP4`f(zwhcNIv`Nb)kulDTtF zLj9fORdT#_Gf}LUHzhdv==)Q$f$r;5b`^m;+UYgVcaWdq|^~-*ZYa^D^AX_eErt9xzh{5zV?^^ z$vyq@a=$mG+a#zib{4H%+uxv(H^635C%a;S`zJdsVcf;farX!`A_n8LUk~NAK~D(w zQM!{A&(XZ@-pGf3G-=U_L9o5ZBK_h8evmz6$6GK6w5HJiC;U_rh%kmz2jIZB>?l0X zv&@~lfZJ!~^URg@(>e=ifsS$ELk+|f1BA4lG1Xi>(ny|~ng<=)q%hDe&Q|~c2@GX; zq-}dx_DZKfE*zX`t}`>(&ZM#O#u}jQ+T-=bSWs|XIS!CH2sE?uaNO0Gyf9~%wj+t_ z&<+uUYp*BcI`)A{3%;A%fPJ-Jh=R^EM&Bc7B1vow*~Sxk9lmyX-@(%7=4Q#*v=LYn zIDUdJC}Ze+jPDv%w^iuAl@s!U+XC)*<7&Q?i0)e86|l!zASutiW0s19R}M@L=6Ry! zbm|DUtMU_*>c!_!VzJL(j0sYh`m;MN(X+jK@vMbWG5_6=8<8{Vqr+77H#oC8Y{O?J|?J z&I{;d_it48#>@lkNhN|@syaxtc{mAK+DEKq3Esc0e$3K8$1?4&km?qgpX{%tEWyei zg+5E1euN8fzTW64GD*29R@9nm0c>R3xtZ*-;x=B5ZTF3KzVqoBOz6FXP1Tb2+di-! zR7rV($Id-}>H|qj0pS+2e*EnQimaXxtokp~j*N+}5ua>m5nuC;C|6s~*n7x;(k%9X z2zlV*l@2)YdM444>-|vD-Glik{>v%1Qke3aiVeWx`BUl^IPg}|0iFDVoT<2(_{QD+8n-q>T#HmWp?Fkc&(mw%@7 zp95avu1tM;O*vlSPqB+J}8>it#pqipfWX z)6V5sQ_)s82W=`VzMeaqL2;<59hhR~umYC}i@&X4Mb~-x0J#OTPVvHYNctBd0 zqCiSQugj|`T_W|cs0bP-AJ;iaFGsx3$N)%P@zt^rGZoSKzj}XX7CCs+ zrtBUu+B{P(a%3~exm$vCB-cNO_6!=f&EB1{v6Qss^;1;UZ?x1|mPC9MP zhM-^R7saB?d=pB#scAWMRob5PtAH~(=&wMvH1g$bdeQ%`WYt>^=ei2C$~M1k>~Z)D zQupihf^+4UFw3LO7 zORM1*ZC+2Sy{Ow{pVi`s&!oyhE(*xIG?B}ltY2!7FY5fa^0Lp_GOt{_W6UWHZb;Xh z=KSN`A+%(x5zI+egA~&-ql0o1uf5x88&Te5p%9sF@X@#+8pXDYtucSKX}3Z*fy~LJFons6pvl| zdN-7eFikO5qdR##?CXxSH>1ahTftX;8P0hUZ%K2|lna~Fy)(NEIBm~Auu^|&dmrgd zz4-<-yG_Tdg^I37-lY6wUQrF@2uI~(7lY0s;DNVUvl%^<|7?EKva3a~qDw!}LDnPf?3je<+!*AJ0oqP_8 zXUj8d_5dpDlHV2?9~pmyITPZnnv-DH^@k24x9a}J-a+PqQCf4Pu_hH*&E9gEKfhgw z(>dcRXz5@NoUY-(wPXd^$t%kN5Bz8XIU*JM(($7pV4sfq_y8Ww%u(tM;!ND8qx!iJ z9;i#n*A%;y@>Jb(PJ!W)M5akhrA|118Zx+zXbF6hi}x64qRcGX3HW7~^JW@Xh_+fh zmdZ)9-KCy;4p=0)Ae=LHNKBxz4BaeG$AwZ5+OhZ%AOp!{>w{$@)x8ZXW(!bK*sLx6 zgznd#jPXUx(Fy@(1_OfDcD8{=*;9vc|Rrzq+X*6+PjNoIzZ`T%G( z5rVh*%Q~S7Ml=_6(M&w^BQvVBHcqnRprO;(zOx}SQLvF)) zULMghITj5NNLEuZb`g?rrew{lQGlTY+I!4H0I)!g*bm=*az-suA96t*NuKR(=toBL z!4nzhLc8UtBPnRpixo@q9b`ba+G!mgA0&Jf2Ku_bXO-Bul&&s{TJnZ!;1AX&2GR*L z5zu|-?mR!viws@n^yq!CzJ^_lh4)(07^=o4?2_;B^qJ^+(Bd&_QJM7wcXb#fxr?36 zj+)Q=s8!rYMrAZoJr0T{E~I3EJkei%Y6R;p~pOS<)29K#sNtwLhr*(c8`Eb+8Xo^FqhoZ2xQv4!hbK?;C-lZ zz9I+M^6H3{?yFBis&wf}&Jb74|9QhGo!qYE<~Wfn^;1VpuAq*k=*3ugA)R?D2>%ZcY#If63~~Sf2(x7y%53ZpTdrk#d;$tt!u zoW@mgBJIlmVIRit#UfY>_XCDvrdpJ!cG+_O*fQTHWb@s72K#zhqiuCeSoWM2?Z5;z z+=QFK(KH+FOWsfpcivTDsPbxO+I995Jo!DDBxz zSA=#cJE?WJ+Z`oCY0tjGUYFpD4fZ|To37%@ z8xhDV_9ig`JD|&H?O7=FW9ts!^?fo|fMjK#;-S@4XAj~_51f3N(GW@+WFAyH>}gXf zm{2h-q0Es2a2#`L;bB8}@)`A`bhKj(Q3%9{)%Eg>9XsZZ4hB zF7}*}CvgkIa2>@r0Vms#U6azkW>35!G8#9^m1$dGZ<9iF{T+5)Xr|bKUOnJ??_klV zWFOJ!4-B3&!Z-%S=gaNw!k9ctTB^SBD4SE9T)4YV4H0a|f()6xgu&As-z(a!EYt9S z=Gp7%oeM4xIN%1GPtlIl6_TsmiAM6KCE{(tRDY31w-ea>YAs5#zLt3-%Vv%no36e+duPT`JW&WuuJu7kVHpWbMTY{)b%Q4IvAz}ekGhbjq8n=Er1kYr5h z86Ek9r90cJ6Rq|ks4*vt0BZMrXLiV6h(c#7T+qVqn=yhd(nljwA!-RQ(#kmfGr(34 z2AGs!VW9q&t8w!XV=ke)Q37Kh4t#C=byL0Jj%99fkrmMmH;$Wpq<8|_S&!26`oxqVI(y@Xdx;Tvc?l45l>nn!sk6IYz;a*okNA$&)ERVS97(x>qa~I ze}EU595dl_MDnaFteQp3*U3y8qOSiO7W7$1W{^&X#!A@$2snid#1aVolIKovL=Iap zDBQNdi58}+E@^Pxh*q#$8QC4I7_7c2r7QBrKNfsat~H5MUCj}Hw7kJp+T}th1Ipt(1-;EGIc;yo~B?9h{zOrYf2V4RFH8eG=YPBkvQP2!wgxEC2wG4o$5QER4x_A{Hy}?|w zPZb%FC`Shl@ZGUj1}+UK{Z@&Uwq=13L=Wpx5~#e=p=uwC8&@wrumx|c^NwS|y7B9= zv)s(=n!w2Kbg7;#!nR!BxnMeis5Xb$aOP~0VZ4CexV^A24aG<+oDJQYnQjbg+6H@- z9?O-`a5VHP{QFk+)c3d=YrR`K*&cqJ8hzqnIP+5t7|pqnmSQ{i#kp4;2=@H_-ASl{ z%@nvQ6=Im%kM(*~j)D3+AtAIqYrAxg_f4_)a_>Am@|%|)=N$v1q*^Wh@ov0DLATnO zwf+hAjeQ(WPe=6Ooy#j9CfWo}-=n>qPEnIe@e~R~%I^4M;!<~B+AT764t8WKtJchj z(x%Vv;2h-Bq03+-hGC-Pjo@Hxu~xI_lo~o^DjMKZHT`G}WUmT@L>Ob4G-EI^xJDnT z4k%tWgmR6x#PX&6FnN=jub~UDS$zpb9hg%QWNu{Ar3U85vG)4rOQeSm6~>u@VfvxK8HOUO(x zY0jx74upqXodd}nUqAQg?+Y}y)Kfmdg!WpH%BgE;vjF7z+*JCT^98XS{&!{}POfZ` z)jwS01o}Hi4%=CW3&Y{8O~5%Mp55`9b26=LKY8$T2XmWVBr~^|ibUKTHW`?=PQ6My zj$oo`#L=(FL%;*NSHo))h4`V;2#r7g^>nu@Ru^!RLpkm6rq{P`bwQm4!|Kj)Oew5# zH%k8ys}rU`fh|5{Uqs$m8zi zJlQvv^5^4VopKT>$=8XMu*+QYYD;`rgh1f-AcfBX{2BInef*}aYDqKqCYfza@x$@z zf>o7dkz+=%Wl}q=(Er&6I%kqRrHx{!nJHkzYAez9jMp>9<8B@)CR`ij598%uZ;?;s zDbwSXnr`A%UXXFx(0bU5eD}qk+Wv=NrhyUGv5o|IL40bd4D*;U>Nu)wwNx)X>{;AMDZg}g+r4lO$uYQy9*_}Sd zQ(~Rc%h3ABvrDYBy?ucKF>xDv%(x$?RMZA!YYRd}@~))gw)C8SDyy`YEt`vj4^+!V zt?@nnMPmgl51ZvMTL&uvK_)3jV0e=zygiwgCm$0*{w9w`YDH^-8dLyX3(AB|$%w!m zRFiP)mwv<*m2ZkiuBDV2zX<8fcq)^0HyQcDUBjTE&A zfRrebwJLfdwbP%P#EGk|+3Mb`>~XU*1ATsefy5C#7g(kTPe1V3XEop%7O9a(k|~R- z{__0<%F`2np7`2LMQg6ZIZ}#J{{N+ZDCVr=bA^%G7+BJ)qhly5AP{We_GG0;kf1~*YigpL(Wz!;g9Od zAGt}uLD1hiO~DkbaC5WbDZ-4M{~-Ji*a)7dsu> z0$J7_*=@4xJj|0#fX7h>sbKv-K+JOb_|S_;G;%OAlgq~MZ;*EUCOh5{?8e`B0?A$5 zH)T{sPa56G>GIZh4?bDVLTJ(;nThuw2ImPyu4=_kf>WMN=hA`wIp_z)s=94#_N=x) z|F-Yq=ueFK7!$xx^sAQAzDukoSB;;txr$*NGSVH_>C-IEs5yY$ftcWvU5?;x7V2pp?rDQY-8NC?ex^M|>xdDXee~o( zsd{=<#SM+$9Q|j^2VNEDq~MrBm<>2l6hQX>{J}PhZh7Q}ePv?v^tGX+L#hjwqy4fO>OJq@q?Iw-`)xZ=!15GVq^eR>T zcTW-;gVDik{M+OED#RSL=cW=P=7!^+an&7hJ?3wkXCZh=xc8$y|8iL6`Cn?rqySq$ zq`y)`2uM*TB=FI22}~H@W8=#DQcuuc>z3J?X7|So{v?wLe=_sD_~|z>ziXR%HH2^})3OK=aw^dU?QOIuxOpU4mr^yrU)ije zU>_T;28=0P;WJUraBwqAq%_Eu z@CeI0V!PeFjGF?d#!Uxl#;U+ILIztr`{jwb{N>FEKQ2;TgLed=wpaw~!JSJaKZ1ZI zs#=*;$`20VVEh*J$I~=Si@2UeD0q|DL^NHdG66BgNrX*t>La{pEulo_JCaG-v z@_tJ;@~63g;$0ip{9;*qS;SNmejpu>323T`hUJuG!#|cVpu93Ry?oKcV)Yp^0 zC0-SGAowDNjH2VmUFUcqeAZz%6$VKtnofk6&3gOf80kp^J5Bd6kXPP#_k;Yc9PlBf zSuLgD_|+w}xk@ML9Uoc7CFld!pwN`0Qp4`%L!l^4>7t-`AR}bV7%YW3rtSYeW5Jmo z88Z)hYgP1?xH@Qvy)NLMg&sV75ze%K?M5d*+=l$#ulI0x(xM#^{6PZ6v?qt0Y$G#S-_CF}Tx4Xny z*V41ZRqg`zi#xQtiB)z5{?}#uY#?LH3s^}a)H8repC#Z$S!=QWVAk|{0|#hTo=PL3 za0pw~Vh-6&_MWZWRXVep-Y>#GHk#p{)% zK*f)@8a!~Mh~etS#iHIfzo!b*8QzO`NE^QbC0AG{#zO~r3`XZd>}M~!;?qC0ME{MI zl}h{mY;Qvkn$IMdxYQkgUN-Z#bC!6}dx}}32QPZ77cBozeB%;HI1lmG6kg9-<~fxu ziV_X7{RrK;raO866<%px>D1AeI?q`#yqq`5Yg&eZYy^OuHsdIP4ATl<_%PUy8Bl>g znR2bB1%=&&va3a-qHNJ*UDcK22BC0&RHc48MuwwV3{;j!!Zy^oHIZjdw^88h$zslg zB?wuk7OO0X?@?y!*%(@V#g%|M$o{aYdB>P?4rcQDmAn#X6I7dBueFSKWA9qK)v*AT zCL|F81B8PcV_pQV%Ja|5bj*0-qKBO=*d}6TvFm`oe<0DFQJ920Tt(cZ?O2{U7;u4-m4_8gV9&(t2(DFOi+%kv(!_Rf04fex0S zOOeXFO*%DES|sB-000PZW#02oB0rAj_6gxfa;(NYzKP(XS?SlnQ|kJGfY?RzoSjSi z`?>l^{srmg-7pk@N`$YNMr87gddIwArW8cwq}Wg6YRmG^IV!F7R?Maw0C;8XZ@Ble z91FNdj0JR5Wl;x4x4Ab-vW~!Nrg2G|dhTY920|S^2`%h_s)*=v+P(5!1;9ROw>ncC zr!7Tud+zmg4Gw0_Nfyvl^O`4Dl?`GT;s#@9LzAkS&yAB zE4C8yi|V?=>nG$z3`S72QSbne*T6XP1uM;3jODf-pTH~qO#_BuT9V>PQwV|gR}wzo z?bjmofuBj{zQ3VN&c4a?5|!cW#xfPAbm}u}lpJt6#u;9c46bTrN8xC5oa5~xMnrD5 zdqKo2z||}YHTAo({WKS#tJe=E(W@h0(Kc~pt};mD0p zHOL}3yL#GE3**)@=bwSq$4~%N)qz^J7wMsFY~r+VYn^XBk_pt(AvX5Z zLc;Z#IR$#_oO9Wr#Y~vky8wCoG3eZM;+FbV2sf-`+7+l;x{Bb8wn(*F!AY^S+_aXG z8yXH&jLf{{g>LOxqx-SjN4d4s3Wt=w$>akPiu*!rI5@3NW(rv+Qa3@F!7Ia3So`UvpQ@hxC(@D@b%RP?p;+*+{iR^30*qNSD%f=C@TMC_7G}+3Jq*ILc>&Zj z((S$f`zT3Y0VBD+zU#O_EyEc#jroccn;dElIA8DH(rn*gN)?mD$NXOF+eBw8u&^C= z-RNfUX{9TFE=(AlBN`zXA9TM@N*k7lke5SV`g`@uVV@e7!YAO7$77Xk{zVLQqOaHw z3#BwsvS8un<*ih~c#t-d}j+}Js>V0ScGhB8j z5`D@4b>c4teL(`kBoLuMjhALYpxaGxuz<|o=eb&2#Uvtt` zuFSn^zC%^-4xkdDjU-{7>yFaEn=G-Z5^F&j{a3W}jt6>}6`=J+LExM=?&cH7E_#o` zPo65EDOA3_$Kpb^U~+c*J$*hfg!16C=#a7|2fJP)iK+#niP;Me;)SN+mlV9G59Oe4 z4{u^^QQZU36?FPZ?GAOg2=#(w+m@fWq#d})YTJV$S?84EvFRZU0BfSFY1E`4EzLt=G;o&wNx^y(3d(ESg&wf1O4l7<>YtHS+I*z`EBp~OAA)kzrvzOAT8{RMX3 zIxa9n&L{4K(DBaVE}w%1qrr~tcw#`5vg1p>A*pS@1ENj_)ZMAl7_g!e4bv~}Nzypv#$T14mYyKeBhV`` z#Ymy6w53i|O{#-BQ3{wRzu@;m)H2lR0zG9IU^71{%LKQf%3*%_rxWyM*`3|oPK%Z> zaSVM$L&k0meG!!d{dm(6e#vs7Vu8av!o08YjpBJO@j{#6-JqC+bJZePFwhd$TcD1! zwokOs9MHE?pGmq6Y#83Sf=FnkC{lRLiDI1L7UwTcFq-LFKEQC4?fz+Iv}=W>bCoE} zSEZ|>GMG-Xb>;N4E3T^zGxU`^`xLQ>M}>6^343@28~%)=`5hF1x7FS0rWhUX|KzhJ zyEa+6jaIs~S%E^K{b$iP^X^Ep{I4n#geHV^yDobTNB zuuiFBaga2tCmmmcIIU}s3=OHbt&TnTX^fUfm|3nx{>8R@kYN>qW?{Ln)j34TGxcik z%>E$Akfrrh?jN($J0^`P+Ie;@b_`G{qgLz2wxHHIY0E3!J$gqcv)*LDn2gwAf(l*8 zI}7BgP3C^Td(N1OhbtsC*2->5!DfUBCq3l$LwQ_tTA0o9N|xpOKz!J?au#FOO23&W z>QMq14ZrO8Yg!#so7~I{#dlr!4;`Qb=Uy`AlK$JI{7Zpi-Gj#RED94p000O(W#~_2 z!X#*57S`Hm7bdLr8tyuLYdBW?WJ~cZsFA*LZx5a3-SLXPhO-1>b8-U(>x1*3yn7FH zA+;<5ThF3*FP9_hNhMD%j89V}EVENAco2>|Izn@(rVDb6xd`39?0< z_#Cg4BzNcr$kX8&|AHo|Q40wiGnpC#W`N~Mw{27O|5 zzSy27T2L3ujW^wa|xB8`?B%}ZOZLx*ZnYIY0&PEsKqR?AX4@G62q(pHRRlRH|0I~v6`m+X)GD(6W77*|YUUW_$y?7mA z(F@aVCt(p;;|P!QLMU4H!cq0Q$C)&m(0M{pi!Dxp;pi#H6eq*!WK-B`Z>C3knnJ~5 zF4EI(YPk`pt#;Zj&Vlfb$u$5j#GN})7Kd8E=~_7*Iuo1C<1^NMd(DJUu@D>Eeak*c zr);nuj`R)SlH9|T@Qg9|)+iJ-y%2KF6Iaz;>^TiU-ZSOO&8yV-eP0r9rasX1m%|Oc zG`-znz+5%l^}do(0{i)v^<5d3@fP=@<}T%)?1?k5Apy?9j|ZN~xvOh_k-7%(g9~wb zC@RX03(}@(oY5;`8K-vN^?~G?1(WR?Tl&;)X-#jg4y3|zboC;#Y}L8 zIdhqHwV26`=O2I4&8m~fr<`2~sTKcbK4U6JqukeC0&|fWjDW3o#@+RQVc|FL5mW_U zQ4fNgAB`Qn`Ri1Xn}2@j7Z7=JDkqH`XzRcD<#*M5q1BxK0W4Uk3851m^3EiY_(uWw zeGCG1#vHk9opsNW+))(LWQnfkk>+*S;LyTw)BS5|<-ikaHY}6qD4M!RrUvp@_I>Dy5n1iy3K1di13xfsbVANtQ*Kn_y^69XPP^P zi2|T0GvbS$?`tagqQpTifDL`A)}*DqAgPmhNm)3^c>5HAZz#ecEe0TBqqOAv_jA)wW3ibQT-A)MOtwckk#smTe zL8JN}lWs6^OyUZ`@1lb-y5WB#soMycAj=%@y z+IvrP)EFG8YDPD#h`M$;t#R7?tNBnk(3x%1;#@N~Di!=-c5OHwHF0hbS(W-dH>Z zdvHmk+h-^7lZAO?Bd3a@lBk?z4_9ZXoq=V98c#vtaIADN%}prff&?ELQofXP?gzNO3R8n~<0PctuJsrwkh$rUH$sf5U4zlH75?bJSoY1sGvc z4Yge7LEIPp|C9ChBuA%ITge2=*03AF?#_&hYiQIlv)PIZj z?}YLsHw6vYiZ`_jK~!W}tn<13gVE%7auLi4b65f~oASj4eOXFL4upYe!)Go>T@p$3 zb4VD}{GekCzE;9#6b0BfjM0IzwG%k&O2BhF*Nv)VtA4QIR}@+VoNOaTRnFjN>A%Ee zT1C!}zAvNrzMyzh0|!*Fj9yB`0|K^IV<-q_I+8unSC&$k8X(&5h__W%%C3J*Vsjb*n`}lZ+%;fQpLL-_R zak!0$0!T_t$7;xlVl(UMty;x9h*%`Km2lLT1_SUq7jYrnii$zAU$PUNG^OoGI`$s}$EaaKr8XC)v%HTS9G~2`$^s+`vNsAz zBWCU9Jk)B_l0FOCsL)w3;0)LN??cG|00<~$8Dm|(JEZidX`{Hy6GR=wz3phboF%h@ zRd?DV8sm40Y!Va3^tVQo;nj!6mEEIeX`=rwnZy~Qjso71FP8-?70QS4(B`@t0(BTx z)=jN8Q~lP{C2;WoO=amkPFnxr3-#`ENvh1=yC#bgB?FR-P$C)pWblmo@@;1(xgJb6 zoOx>)!H1E$L$oglQR<>vXfbACP*2pCZmY~F2~qftT^!1wUX4K~S%TrDTx=XXJwJs| zoVE_g@+ZP<2hYM%CXfn#t0p^nYYfMrPNQ~BG0GlJ<^x85SY;TYH%jldP<9{;Z#nR* zcvzy6e(A}d96>3{QR|58P4v7R5fM@0i{%jinYH+V9kC=u58|NOBC@TV(7L;A zCk`a`p7p-$vVKat4hvq%b^LGuO-fer7+@CeP0s9m1X}lYAdps^NGW)>IVJ`J+r~g# z9oo#*Nk19WO4w@jSYP|#)Q`QH+MY zqXTiYF7|%f?2pR%0sZ`F(0Mb1gWiEQk!~Kv4GEAX>{^r~cfzY-@xGVfc2;tz{*lm@ zM(dJvbz+VE>?V-pIUU3`BKr0)HeA9o8wU@}1fx7@Ft~Z-(G?PGp~;oReo)_N<%PLf zH6L|+9&A)Xd(dNa#U`7sawrXF0h-%D)L+f|a-L5Sg6q4h6vEKQn?)F4j&gk09}uI~ zAZ}>J>~#qEZGvX~Xg0w-wxGx0UQosoI$Ika(>Ro$pAI*4%M68c=5e6m=!aO`7`u-W^_xqd_>i2!vSO4#EA znu_DJinNs%XS;-0#2<8}n*GNPu#MvNb6GD~mW+&R1ExuT#mK3McC2nRo7AFR!PW&F>7;Fqcpr;V`~@^5X0Eb#^- z(UlFsE(8c|6bM1rwoy16&}8r&MBlCR_Zh$XmK81NRqDRt8q`0Auz(CT4+JKoJ|LbL z=90wR-dQbt%(Yo_3|?zLe1^|e{r(D&3Y-%txP@opPnD?`K~5!3eE04XXK0R?_-; zuu8O}=XF<79(vc`FV5p0{e5)krc`pqM4RB1UWb{RD#|tdcSV?+F5IA{*eg6nb|66k zFsz)|Ru^Ejm$EX!xvEB5r6;p-COr>|2)tyrZ`Kb}y#W;QdPTvqc`~Qqp0^y9+|vKL zI>fX{3P=C3^H=*jPTJm|^L^u`NIAxJBLz0`#{;x5rgz0DMb6@o^>MDFnvQejjiH&*$8Q>nK>inQW9l?PPCVm9FiX3xyag;BG8-+W_ z0K3&^>sQRQ2IxA08s-u|Dv*6LID-<^uPF?hU77xh6Ri3L<&sChU@xnJ34Pm2FrmIp zZ|8R@4ZH^(c=MN$93p6BRJv_B5XvRGSfvV|DY_B67c&<_l&UOaZM#HT8Qu;Pw5tZKS#43#Ewm_LuSNdJ)ra)qN?2Bt;n zQ6Gy+;`^?$8BzM?%-ZPrM}G5E4G#l9G)|&i%u(K>w$P%9MK;S&!DRE^a%339m3GgT zt%s_CjJM5RYkA8NDvg|YSF^XzS09kWxJ@M!62P4_Rk=yt6sGx9XW5Pic{}%Vc z!(<{gVWT@BjqVIYYnk%({#Db%_*NK7`k{`V$PG+u$nFVR?rfY*X)l*MtwY$FCC$_?;%%XW-Q?;%os##zyC(UN@91@&FI{oK#od45>}#lN+i?I$ zQH4X#1I30)rHGFo;0ldLmtKM$*txoR;4gU_meBn@D%0 zDZlL>U-a{zr|^6m#{Z$-sawMmoNu$VDIjhzYwkU*VRdliNkRUAi-$DEiMYY#ImT^xRH#Tvgt3C~s0CKZ@yEcgMJ&RwEMD_!u>w z<1sI`-LDgl0wZ#)yjS0FxKGjy;(rk<2e-WJBqC~{F24AWhc(CAsyt~OZ>}Lk-pr`- zv(Ghfk4}&^0vb-wws0j#g0^Am`tSY$e`0(og}T?~1S7)zgH)Lr1I3A0sX(?XS{0V@ zX9}DZ&>=yhpWMGu&ATjr8exjKa%j`ZOqA>56}j)`j|;U|S0AtSUDY*lFNpBki1)_@ z6t1T+DwI1kB<@9Oo4AGMPHb(*HWIrzWE^Wk&Q!UtAxj^eQ@b*SS+8!Ya6n8KAM&kfz^c2C7ta?RAThRR&Dzq|kFJ?* z%w|vRQ#*_GJ)ut+{{K}~<6Ld#@^N-^SBKuoc;N0zIDBh3)GLxH5S84 z7es??!g@IA289?zW^f63`&2i@OIu%eZIJRQTqxBu{-1|OVmNb@rkS2Yvj&XI%I1If z+=ep?kZN7a7oOqsX143ktOif3Y7;*X3^B#wfGca7?`zwRaE^7=&O{|GhXag5IlLmu zHG+dVmRir>$4_crMUhHHoscPNX%U@NDBSQP9jKX&e!>OgCqItihS(qAt6p^|T?b^e zdF&pXrgO?p>V$S|_{#-E@i9s9BvuPHJm6Dc>2slhcH@*Jxg$h?mP+IDP_o;4b!L`E z!A2}#H$Lsck;gH=CX?FfoC5z^$$|W^Q-~f|ftMkH5G^MX+5tQtSXThL>ZoN8 zm;5;AwhgOy0!SkSVLvX~iHuxw7qC1tv2`KK8&QN7*x6Rht!kVO@=GMy`|+hl(uTkq zwvxHsV78NTXeU*C^2nUM)I=Fy*HQ{bePhP$Hmq%NP7?%XK4X$Yc8M?wm`>IOd*s-4 zW*1)bLig zBve_GDP*HcHy6o{HGf6U938Q zr7LjQm(VhIqeF5_lt;D+I_Rz5ODngNRgrkGJVyYfEO@OF9^7{rC6*TO-R-y?V8G~n z_L?>2PkUv;%;>djagRl*=YIUfcvKSLmDX%w9Ls3CxJTd!5PA*nlgH?vj5OK`cX-=d zskxz|G(!l%_Qw`)S{X(|$Bq#YZC@{8i!=@E3d#k(#jjd{GDuXBb&2FZA1R2T%wyU! z_X5r9&a5GYYy3XzzAg4X^d~s9OY47}f3Lcll!`?P>;L0B7sjbduQL0_ zuEZY2w>^LO$z#5&pc?6>xeOfyjhPts?3dl@1zUy!pVjeguEGw}1m2-6q6tUn@Y3Qv z000ONWo+oXg+Y4ceh#ePZ6a|TqxFiakK5W_z5ZkLD*_zs zNDRt=?JQ|vffDJ|OJQlTb*MrhEZJZYhzxuVpu*J~JjgI}`C0Ki0^p&DJ5F-NSV({W z<`#rip!$@EcN+4t@It`0j$)d~qu`Q7?Jj!0JJSi|LshKb+G-JbqJt8Fw>0CcYsjeT z^@s3DA8b6Y$+Yw)r5vpsSFp}cnuZen-n=BGAOTL(0yv2Y}mU~#; zS_=3jKK{HUa4p6&uWovH7;s5rkJX;ccT#WLb zMNm<+szTf>&b{@2Ef53J|Z$1&FZjE#WB)*MX_or|}aiexDYT z((w&Z7wcjq-HuQAj_knm936ww(&SI&-)JCp%~x^>t7g^|n}iK1)FX^h3_NGWy2{BP ze40d_^1So?$EryKEs6A!9X;AFeQsYZbdvAOX5y@`OlMv;X>bHXbHqGP4LN(^1u=P^ z6g4&l;TDdF)@;gP3UM3e#x)h#P`VU_#WB)3wmmR2(D7f9CT3R#}#l|z7cK6DQ&_f z&-(bv1pXLsHqX{pLc11_j6)@dcK9_@i3n>;e-ZwFiR5INA^e7(G?4R3 zEuwsx$_WWkmF5m0aZVPYPvOwx@Mq}i8>Iz=E-_JxN?@`;3=GxU?CjF&&`b`8z=AqV zwi3&}#|hD0*_Fq=BvW|J`EPH-UEee6O4}A#N%z+~qO|C8tb*?khLy~iwr@kraChtK z*$0%!;Vf0Tket_`jPL^5;=%!pxM)2F(GN2Ls@&A)$}d(*J+)9u%8f}JbHJ8>NYxgf zvi?3s$<2+JPXY`q#jOAZ(mO0niEN-QqdB%-z;Fi+i2_F%HhJ1qDNcE6Ox0^m$3A)7 z!koB?BEzK7Uba#zKystB%IZHqqkPp0WSDs%Vc^_`+>M^wqVGR0Slhwn_aEF46M_Gk zoeV?^C_;wtrMXAHr5Y1D5v+rCTzv&v+jvlJ*C5Xt0nhjgMPc{?$=5nHJGqUKa}?pU z7BE+-^$yRLq)sT3=dYV&g(ZhNKHC4NLnhZE*j)GRmZXSA`yF78A8Aoyr4$c-lDq=m zI>p7Mq>bn}KumG&^PTiUm3B&vA}p#%`>GG=kFgk*89cKnj;0NY?7jCMZ^NJ_qS<9x zyGRr1o|IW}wXcgAF(O0k@K+G8|7>~Qie+uVKwFAPu7Wcb*41};t5jF6?W0(i=Xs|= zt?L1Z)!Y5GG4A4Rw2nuJMFD-;w4I720^v2hpRm~{zARv0tA0PE3SQjb>qld)hm+C^|#+_s(7In zI$$5+S~cX?B(9KNO~mO*TYQmzUeC7cm$f41{OiN{UQq|&_y*K&$i9$D>t^{j2f1BZ zuLl(~IQ>hp363>BEbCt8-ygmjx}yAWLYih6XcE{z$1-}vdf}vj*%}E7?PFtnV=VxT zxhw2pTcoj!n`3 zS`WwB^UnsK149GE%m!Q|v!=4lbr?lz*`=kS+Ju+=n$w{dF&GHh6(A)4UJg( z()vIs$aENDXE=u583EBxl$jqy{^His21yfRz7(aYq|*k$5n08ht$aEAD3y4CR%?8M zJ3)zAV4}@fZ5Xs&m>wuuQ-}G0*p^^!3(S~iV+p{he#F$~0=^wKJ--gCZv>%N%0z>F z`oIsD^<3y3+>f11&%KK>2Nv7DI@X_-JC(oTu`+ZX3Q-h%JDF4R;i}!nIww;!H8wCt zcuH41FGY1|Rn@HciZOVre*Mm+&CJYQvRCM#G0p0v`7-nu<22TD#c9e{pDH-?KlXxUGFWb6^BP`*2#OI$;pIW^ru@K~sJI*F@MI}xm z#A*?hT`*veJ)UN&XArLJr?|)`&uEcS`7g7fPYsNAWHQGN?v+jqls>Zp7q5HJZ#RmI zuw|-oL;B`}plWvBIsy{`Ov6e|%VK{AlWplp_7b^|t*5sjS76I1E6+n-E>aF?vy|(Cl$qWp|@Lnv?J#Tk;7k%D81d zrW%Lm_9iAxE}u(-7o{p&TL;0(Dr%ewHk3%W$MZ^sa0%$G<}@jk5}kzM#KDVszQF)C zlhG|@t^iMFBUf=)g?jV98uykOuHBn1x7Kq-(vLz`M zO#qMCVWwc-?Tu*5dhQHMj)41EpV|7aJ)ySrzI`3|;LUK^K=|TIgL zd&6ZOn~uC_WP(7kqFo3&3kny*Pp4%3^QlA{08*H=)E$%;30&HP6=@ab@1HbS704Ig zx~bc&ny)a+`Mh%SuWYA}Me#o}LnZrTov^R?zv=dK@tWSv|NPD=x6DRushOyr%1zFp zfCNA8qe6B{$M$}Dk9OXHQx#2M+$?#tKW9Am6l9PBK`Qt!;bVI9)W;{GV1ayWYO97! zphy9HvM|hRuz!$hL=}&(4m;*nq+@Z^FYwH(f|1Z(AT6Bj-+y{+FyCe}UIz zLXJN?yA6tS{ESp|H729Id2UGs)9&c5wKvNE5FXc+%XOXaJO}2YoT`HF71q6@6t-Dn z$<298c1!FXT-`Ou&ypbiNln@0O~rh33NJMUr5GpctBE^jfvncpA`0bsp?6IX;9EpV z+&t`x`ETjIM2)k(lF!6RCOZ<}1-hrx=~^c$$8qjHcR6sM!GoZK@lH3N8P+yxQ{CfTQS@nUGL{%! z2{%cu7$ba9hXDug{0&VKR!#dJV|nn}fxFDvlw<=1+XGGLD{;g!mW1__=;Aesxk)2= zI!;mq30-oWxi&FxwI_Z1c1B=A;(X}$rc3GXLHih-dd7HgpcEH)LGt{UxypZI-7zqK9&)TGT|2s~313Wj61wPb z)djmlf7t@7SHRoEKg5_U=gZ|C?2Y~k=URBf;0-sA$G2H2xNzX@_x=x5%sa#;E3=PM z6@Qh%_TRTx!j3Bg|Nn?*iTbb54;nCt20t?TyIWG!Z3%o-r@ka1DrC`W4@XBRnG$zo zppsmHwv1^EophBUl%aL{nHqEmIMgmP6n!RLrNln!{QOy(D>Tq@3rQ++@% zx(a*kEEzFEsv=_zt}g$)MkNA;w9pLb32T(e*=@8c%%pGKaEP!$A+x>Md4UR(azZI* z;`56joIw+K;2+P{vBr*GkfI?ns&;(SrkCGS)OL`TD@tW%VJ^o@51j6`VzrkxBTlRb z`{`~~t`C#bnE?4sTanl#xYK{HVKsm|Rr>1!QG3{9W}>lzwVw_lO&jgDuQ3b?fzixB z{-@YQTt=W-ln2^w^nSiW3V$+T7h7 z976dQM60lTC#+^pUf6viF?4M3TU62F564^JRNIUOzo`El+GKG32nvfv4A=KcCpn71 zzP-N4rJnn`f^(yeX+a!1vNrRCM3A@HC3}}DVLa-S=GGg)c{5$ExcVX>W1zeH+_^Lx zBU7CYGKwx*K43`H)raK{%{!`qmYHhz6SQc=JXBnPqHC42j~rMo)h}8q#|95)>m2Hq z1>hO?tf`GJ2i+GdZRt@?DSfQi9UIpvoqJi6&`8+xO_#w-_9o=- zU~)H7e5NJjTYkMVp)q%2i@~>XyE5$bBpyZi%xe)Agh47NT(ip{se~ z4ceb}5kBzN$3LP&Cdr82i0u2lDZy&G@Rbf<&Ggb?ueVB7j7d-m6FiwW5Y?j}dhd!+ z)H`@x$>qG)Aw;fi_5wgDXwmUjP7bT(l+*gT1DvEN^k9V~IZ8zt$==%eeC0?S`lHFI zLAy9w19Q_rR}pmRj95hM6|*ZUFYk;B=Dw3~@`s9kbEvV23)n}4#6e^`tOz&vQVDyr zI}dB)Rw*gcBs63YlQ;^Pq%?p!qcUz9p;X8o1k>nooUZqu(@1Y+awi@UJK4~}6|B3H z^PsFWp5zBiqWsJTyI)v)#FLj$YsQ0QY|s~XHEdee;J>%VnEr@@-GpaB^7@&%D36oJ zlnGws!66HtIc$r9!pC`HlUKBm_aT}f`HcuCD$m(Ai(Z`{F-8k5yolsgF%y^$xm&kE zaxaz}p9ri3cK?a{f|fDtY`SI--VX+P*vqqX#TiXMt;28k7|(vufrYTqz0!RoCSu1e zKmF-vyZS&%XtKs{Ba8#!ZIuilPNGCU*oP3Mi3F2P73s&38N$QORyo(Wwz`HDy=P7H zm&Xxt?e zb`SH`wdcOuNnZH!Blac)SV!!VGonjm5Fe_SFeM3{)Xq*L-3;|2U@3$wPHAkT$KV-J zSexIhuG|fDM@Dg)@f7)(&u|RZ=zRQR>KU;lPzNCt3t|)TMc{0ry|y}o*I&c)^BIu! ze%gOfWr&!RG)OB%znKj-f;H773O_CQT@yT30>I$Mmdd*mr}k^lHf{NAkrRibzqvtP0~X$DPHN*!nLIeg;K-Gy4dZ?V)`m$@H<@(3VBL7#cLs%<%!to9rH1UNyMI zk`i8VFqnSg=hnp^fz4>%O0fpHS*Twq$0u2ii$4z5CCc+yc}*h-5T%v%sx2LNp)n&c zBcM{_R}$mh)`I#$2cSn02YCQw1@QePMFrnvySDqj!^Go#GVT!x5Lm`|dh{%W8&YH@ z==3!qp*4%@fDNsHiK(z85|2k5 z?OYrqyvq}ECN>pluy6l`uuRJaBp{29;O)FFEZ9^*J9oH0|ubM{*} z#JQN6G5$Ii;q2*dV2MA&4|;SZp}M42o<)mBk1(tOD-`B~?T8qq$zR($PA-@*xTtLy z(w zTBpC{#85EJT}ilMK`0jar9B?+H4!AZIzXPn+`;s^zEVY}@PoIE@DShu3~TS`OIs*KzKC)5VsPT2ruCyltkBes;lq4DKXP^u=Nu%4X{R z21@qaau6Fp{zd;-pKd+M(DCDu6$$FcF(j;S8bmuFBaGK~1|O2tBezn11U;uht8^n>SCnSDR*A>SZlccpm6NqK^g@yYoQj)yibFP7^ZYA!Fg$dGq? z!~Dg9m$X4$X~Bhvki%2(AMz>IIp2cb#dtpmq&%$k3BS$I!xF-icS%GOO-G(~KluJL zJYeIPet^40g^GZ@OY$rB>O4@(tcdwV9xbQ~ohvV!a1qt; zbFVI2IfCjaX8-^P<7J+AjY8CkVkAhxZ{bBB-3c|Ih_I*+;%T+MPQdHGWCNUV0hNA3{yjv=2J9;HS z=vR}&ojJY2<9!QsCEej`2*@w`u)93UC(wm|7(PFc%2d!r22v|FN@X&YKx>zj$48ki ztg_pj5g4eAT_~L8)f;v2oCn>t#yjcb;zak;Vv}J0nLV;i$euQ=A|Hs`G@y4ptGSf# zbTrblkK9=FJ1hj>Oi1duSB(+UaPUNA&;};s<|#`bKZpo!(1wSBp(wW4?mQ^ROXAcj zhkOy5Z>JL=`(}7S%wGKjmp{v3hL5z)_+q(mWQr2&&C>Z6cST&hDt0<13aV2B9Ww6n zqqyrCe<)#ccJ;C&bI&;%@yDTh|(Po$(G{Cf$2w;UoiA& zrgG{ee7SjEDHvq{7}tVxIn5+UA$VN7Uv4r^=tTfP3Ey+ln=BgEae!AVvjAH_q`y0W z!=|Czm^cu+fozay%nb@v1phlnkQlw(%0!&l36RQwO=2fS=4u z2}>R{?buI8?K1+KXs@{-8p_v9KF_YNSMu<3|KB(mX`BhwizXP!3nQwb>}g*SxAQ{D zR=GzjwUEWO-cIii6yPT4mmDArlwR)MHRxL$AGZfyo%M_>f{t3sHSkY=r({6zq1|Ny z+R*HyI7njY*q)BIt~;2%SRo6UPDu3;AVDUS2nS%XY|(^F`Z2ac4C&5a+>W?fBb5AU zqqSC&QlVjfq~TMkJJweJ)D=aokjv)2iYyiU>m7pq%n9uZoi_tUE6#Qt48}KSwMnIC zXF?T+gzDp9fQjl0*DZPQa+&P^; zf7=BolvU$adu_pL7drqz-_x0R>n5eN5s}5cL zW$;H1r4{?Je8WOvDDZs$4*NF&THA=((k77lCF}k4YQ-m90;}suQ|B?`B<9jBoKo5Z z(9roBGH0rK(4D+nYYvT7qa8Ucq5oMv^s8VTx3Tw`)5^3$<^YyFbT2XKPYdCZ-M4f$ zsJAw~nx}cXUdKM?DpnJo)0#HmrI&N>h?@p{RP@^dgXZ;~VA};{IBdK^ES^qk0U8YN zL>ZwPU2O0&_2p_QI9aX9<}E(WMBHeEZpwlcn&cr(;{Q2N=HAHy1nythu)F)r^pM(~m7YT3W|cd^&Yn3bHjw#NnRs+Ji` zGw`darMd*$&1LyL)F^Pc&iUyvHp;PvQfLxLSLtUD%jhm_?HCwP;M#XNz?Sg{$l1Ve z9?YCtTX>J@<3fbuEkb;zH^V&WWFZ6Ux#CAA{iGVb>dLGMqWL<%rJg>MBk6KgxQBTu zP(kz@D){$4D{QlkR?G2sknUg}vmr--&-8 zPN=WH0yt3^+jSM9wl4|KF_ITitTB3gCou5iw{}5oQ?m+c0LAp@TYgg5L;R0iDYBg9 zxA$5tVr8OD&f!N*5^8;e?C{LI<8B7Zj^tpi1wBLV2Qila4l&IDf+QC0?fde5e)r;1QgiV? z#R)TXUqZ)^3U5@mpQ<(gtD5 z^)G^*$Zx#gsh%kpr(XLnWwBi_Q??!Hi2T6$G~vT(JC5YhWHV=m1y!$HMVl6azt+KJ z62vP@!2=eo<$}Nhzfw|6gq9FyYZk%8A`B3zcq}Xxn|E9-HY}yOV&YcZs2gF(m8t&t ztgq)Vpt10y1E5w{TXnjd%o**Hq9*Z?RNcJ$;Io+uWo2R&Cw<1ujSr?PyeLn{!m2YS z5G#EjI|x7KoITKW+5@(E(d-UCjOpc`g<@iaSM~CCkvKz?$uK@`WBIKkZXZmpGoRXV z{*L`IBIoz8SVNXdvUjzYRM_3&e7xq$-5|njvE3}}{Yf#jV&Feua7NfD*`Ac%&N%JD zctjY=KI4A&XaE2Q-eu-gfEP=(W`jmS7++kHy-eCll z=mp6dTdW%`x5c%JqDO*VzW4!j651IK#~#0dYMTVQ*(XdH-6KZ&)W+H?=Vp8(V_@dU zqO~P|9BFoL?hc|23MKjMxUv#mrz!HFf$QXIw>Bs@=uM$1Y9!n7DgdSsdx^j)=>;S{ zaL#zypBXe23D+gRwZ>TLlPG$AX)#+nTS`Ft^6G$ZX4inw0v(>E2_JY!GO_7sEC4?2 zTHb3PeIKH->x4pw9K2Xb`s5H@_!@g9&0?<*ZuDstUTe=L#JQ?2@Nb=DSgX9afsiMr z66dYta;~kgDhZlLdGNXHk>|<~A*)=SBQ`Y!*v_KkUd|J+56%x1Pe^V(OpLh^;mgUH zd5d+h)#7Xbp%ske2d?7eM61?coOHn&Vy0wwnebG~z;g7n#ijmxJ!!fmRE8`;sE@IR zKM-O^U@A@CrNp&g#TEG*Q2ZI`kHg_G+k6VJm{5ulLs;=5TJOMrCj|-Uzn#r(Wfm8A zGsaX{PdCuQq|;2~LGH4R0hRi3{x^xJ(RF>yw7EvQQ1DO>4v|CI^HxSo_dZhwPYRR+VK2*r#td9%q}hlKrz_T(gR%8+LuVvI(lbkCL;4& zQ*RGoigG*DYm(rX#m5n&w|m0mKv z6xm%vw80iL^YR@yJ>Wz5zOHM4H9xH)No}c)QstyQr~z01Iku05PPO}j56jBuf)ZmR zvw6=dHmsvR;;kLTh<4jP1&wRUsswhO= z0AP*)Sv|qyk|`AyIqJOBU@+sG=!3HE)wNiewO?5PU)Sa9jFg}x@=C{0+;tKPYKidD z^<43B4K&W~F1^ocG2C`)?$)^xyn$&~H6c?NIz#u{Zkn5ksfwsOBawyJgNT?_-o`Yb`*-&QHW^!D@ zkM!SrC{JuSe_1fq@;E7OUsO2k6RjdJ+57SM_^X2VsFqfphGm=e(u2h}POH927HA@b z8Kc!plk%_#YG_3L`ne%*v&PCIXtXFC%fYz9=xL?mlgnx1tEgj#^OmZ`kBHjpKVUVK z;Qdg7C?kbX%gU0zyn0cj@wwJb<@gs=)VAHvPUQ+km74WZn`BMK}z z3(Wpzd#o2YX*4jW=?8?kM3%Aua=$UDMu|n`5;gSi>ic#7KX0>afO2cckdD6EmYd}_ z3G{)?*_3XLK))y$-o*F4J}3weH+g*al&sObCX8If7>w^9J}^DO7;)RoS^O`tYu<*A z0%YAbT^ZP!LG7$Bm$SI!GufF`412;oY_F)-4xRh1;n9g8|5V?l+i^Xy)a2c&%f2+h zjw&zg9AC1rUSJB@Ha@FPljBJQ_Pzq*-JTBpCrcq0Av%cW)qQ#q!@B#{0!UhpP>qfY zm)a?Fu=ySJB-QlfBck&1oy}cyE^5Fy*8FN;RlDBfUVV>$su`MA+1}fni9QhS{w%d! z88=SFJCt|xDz{tycwa&wNPbcaQMJ#8LD^<0l8PIvV~z|}5IQ`DuU}!6aDjj}^v8b^$__TeEJ02b z(sVcQhF@*CL`KLJ_RxRmZFCQ7bcPMHCnMVdFcEmZziJ)zYyCeh6PgcucL|?&i{-S%cIq;TTMz=w`Ac3`@e_egp@z&I(%nm> z$$CCQC6e#39Mso>cl1Rd_{8R){AXw&T|3!=RKG(o!JpW)5?d{K5f!ZMDm<|1rp}mP zO>^!Z&e+PdF(74YtlVjsLTIgn#MwZjhVKe=nWAw`AFI~&7K9Jm9MH<&@CLwt@{5E3 z00+=zwj3lSmnq=r+4CmgIf7yxXsfQIJPqj?qi$sx(3wim4b%KjD<~JIirp?1 zlh#B3?>!KSkMZ~8+$QJvN+e&kFZJ)CN)V(M^ljqi+o zCEp$gs9rmP0={)DLvoD)zRY;F@BjN2!cHXTBMV|(J*3etacUFN2FmtbxQ-g;PQ=e} z^PPtH(QB<5J~GV+ibA}McV_f+eGM2mF!e;|H&gcjLT*l3WB`n_(G?6;sr^s4zReV#3g$+UdDZyx7C#}^jsXw{TQ~mgW!9M zg2Iw6Nil=L!AI|!L$I|MA}nVZu9fwD{u4@Ur!UYwWJ=r41e}q7MzH0OWdk`GijwUZ-&$@xbKiV~QXxml*GLAw4 zW&DBT)@On%)hhLift}2}%CY*(H{_qe_;qdHq;8MCl`}Z)suoPdKu1D1Y~H9aHYBRb zUN?hZsY1zmc7cf0gF(^zWfLlYeVLLrz(5ujX*o!=sP=5!=o%C$Xb9Ve69m1ulg1rG&y1rYrM;xgkbhJ4zCfTw-k-iGs$J!uC&gmOj;21#bmrR0M{6 z@;wE$gx}TR0=^K(TB*Zg^R;PWf(j4glODElyl({GC1QrK@S96c3JSY>-1_2Cf1$V( z1*P2w3!u^^RjaP_`P*@6e=fXZ;I zHJ39~p*&;n#68+#mO9ANjFkRr3nVF2{Wg0JCAIC4$@;4L@s%9^K<1mZekQ(s@Bbir zhOT{^eV6;sxPSSUo9Q>(+(DbqKVzhv#)_{`qR(L3soyrd&)oL+{O=;nQPFUpVIK7q zwcEWK3)6~F6b!GzpbWoWLN4wD#7;H=T-((cHkg>PtVkM1_=+os4gP-E7njD)wb^9| zqURXG|7iCz#7#4bRyM>Xyf*267urlGmpm^Y${EGAPiAV{Zj51=`qEf2SIPos|6x*V zwu}MIITayGjs7(R7N;P+Uu20HLj$palrcH@AyV+c0T-<|#WcA%8YKJ!0lN1(WRV@_ z8oRcr;f$cA%)RQW1OKqd&Wo|pg8Odo6F>2hF8hh6XFwZLLH;Qk;xStF8AFw&h=HGa zwrU1g`JYVanJL7wg{Tf%GpHs;)O`vFLUpyQdyE|<8Ql3yD|S3!{OHGN^L8erV{!8w zI#^A_bf>p2Xln4!rVwMKe!&ZPJ8XL~$KN(9Q2!?iWirawNKS0$~IQ`6?Z>u23-i$ff9FuB;f;Ec*kWHLn_&0j){kHAbzh2a`Cfi#Jxy6cGG zpcgUbL`QSF$;o9X&lo5k=XfgTK4x_W>M#j~XOGltqzyJ= zX%XBdL*0vs_o^JAR>Q1I8N(JZ%en-8)4>1$00-@5DjdYS$xS#j%BXk0IiP?WMpc4K zkSV0lV>l;)C|pP}CPK5{3GlaZblxXIrquR%EjjCT5Kd!k-*dq;qZr2w^v-bYq>FEd z0@9Pp_qOIdP(%c^PrT!&R7acPIfy`El*M`W$TFF?WdvL zq42(?Ach5=tHHS^#!0$s!}v=Y?I+rhK@}|^-o&)bi)U>W{Nsf7?Q|7<&m;8oMk}tB zzKvlWs6Dy`#G$bESKOtH;*CmVw9Wy0F-Dzc_}i+QYy-Kx!ov>F{E*fl9a8UYPRH+% zyj-|kao5nOM8TF~c?`ZHqkT=O>x&_Zw9 zrGFC+4VR2^GVWd~_op#gSrYzjt~#CG9N^Mltv;!yqIz=_$5=zx1t1$dHNom!Shfv@ zVk1x=cq7ZD<_fh27l)4&$4J+P z%$`}&Y0@RB81-pwIF5>{wIq^}6qSkG%OtO93eC59nP7fjqC!O4))TsE`6;ZWl9`-|d%&X{FJpXtJIxIvNausoI8<^KY?oc5A#Shjzx3Xb+{3IDe* z+8+_ZXXHY`Ek&NQ;&*iCze26&NQm$k8@`D)q8!8soxVp5dgZKree9#uY&abGtUENf z_T>hthqx?8+Ip+K z`fBAvTyvenH%f=Vrevl8ScHK;f_YX^n=$rHm&dS7{~<{n;0e0e$-PBS89r$z?KME_ zDYyR@x=MXIRd)BIE+#@(HjUchmdLv-%^C*P5Y+kfP(+T{z!`Hp=qO%vnrZKs9>E(|`c?E(T!z;O33p35^2266nJj+5^<8(9yZ z-#Y9$_Z<2y-4GcuQ<{Lv+b?SS@F3T-P0G3UGDSs_VW7e58BZdz^~f2&NnrgRRL4F& zgW5F~G(|s;Y=%AFdgja_K_D%8nt$VAT>%_OtH_y1wCPs~MfTeuABR1?wk+uIx{Yl2 zc&Qu}JwS??BWl;%B!+o<1BQMWw}Vp2Kw6!AUtB?*DW0{T@|fQi?)f)Q24)%Cw5FM) z=2AN0JYGObspIBBqOJBU9ZqzRq;jJ7-F@|CJy)%o?;(G;~GbnPulx6*BY9L#P^ zU;D}-Fm{hiMC{LUV}!UErm^K>o&eQDBU){tTHUpVvwkis-hj+vKaJ`Dya%k>@>iZl zQL>^kF{LX__mB3N6?+?Opf*XB{&@WK@M{57g-KPnGMAVDPn)b?zT9PEWJ;gaWC#v~hf3UUuCwdWAI=)tFGI|rFm2!$3^0OpZPUFehL zc-mLDH-1MnT=X+>1-8-0Qc}%Od#d#)*q?Yp;<=B9C04kD4${3-+K)Y4eHbJ1wM(t!FQ%eR>+l9DovJ~f1~fakr#~~cENR* z^tt$=4l%NcEr)}oQb^_+wwA{#N3%57mW7X?@Ydy{s|RFtD0Dbc3Ci4o@}V7$fuY*Y z)#5{GO$jV4sg4J25ay$so@2wgD+S?csv;oAV*Vcdj?z+j^+Byu=2`eId!y5!)Xf0b zk}o^alUdvOznN{mMQ6PN6D*szo1i`a=|V~}W6gx^hF7?uJ49l>7&a!_FL_$?IJY#g za8_h@qdGtEh=IjzIXpm=c3JmVh_7){)W*WJvS0u_000NeWvf69fcV1RX|=Kg2wvE9 zvNy_1qRBI>LYQr6Q5oz>^eU!KQ{|w$Mu0OGOPboziI2kuYm8S?V{tlM@~>|nOz7CR zZ#;Gn2SHLO*T&)HiFUX9zkc>=o*mDxayf6nkMB+u01{CB>JUxGh27ze!F#X)R#kSJ z+sazA(e+)1QTtT?+0Ct<%vnM2RaJgQyT8l4mf7}a+2agAOk;#=umT3%^>%etQf#cp zqJtWuhK(+~mh<~I3?nHMlC(}A8Fl;UfLqb|$tCC3vq!_QfzEdw(7`Ul^04d_fd|PY ziVGPLV2PfG5+T4NZ5)kt%zWS${P)0Ov8-1kjKniVcTK?UobDPhv<>up)hSHnXCC-w zu@^(C<*VhwRe6lSHeX!aj4hApjBGE#`sE6WPYcu^n*D(3jc<%eV@#$FV1`Jpc>H>{ z<9J>@zr4+<8tfrv2lxptU^q97iaBORh0MoZZljxj#ICDN^pu23xH7PrD7RDY<9`18 zALvWL(yWjsp>mcz2EXTYsTuKsmncT$6tFr&z#1%pwof z*@{XV7DvFPi@wPfcs7Ziuz%tsgOzryjO3Az_<3wX_RIN)gKuC{&9?TAI;=u-^X;+2 zXDVlD?uO4O?gJPjm7(4!`|s>YxS!e#iNlHE22I32!`&;>8r?dFwzv|_jqL2Z@A_6G z>{yXRkK32k{|5vlj>opP6e?LBcu)!m-**HmN($G*CH0cm zHnML?cUh`MJuMEKIukNe4IS@KnaWPLw6w6>f4B#!4^^#hCnif4*lR#$awYmpjJF!S zE}-e`>uK6y`1`G@4N%~54GQY8keWv=MuF2VcOae!8H#&H2&s%p`&jx_@5etE1<>|p zztoz>BHmpA+#YqeJCB&6Uif+D-mkE6-Dc>79N6ckD63Jg^&E1KrW;W|GA1sOk;_iRTetwvLqf8 z5xV?VgxP_+UNoUkH-(U%P#mRI(8dcVN>F2*jKjhnZ9+g;L_4_g`La*EQEE=KJU1fM zU?@sk^1#yPkWL!Y?o7+Ma8w3M*GmP+{Rh-Z_cwxN+9|Pkb~A{gH;N@7E0vD*Wm+qq zPTw$RqB1}ILA7qn5EeItY#jJR3q0}wj6iUeKQo1cRKy7j07{Q&z`r|lay^t6dN!yp z^Kv=son93@V?ac4PPh`H$>3AyaN@HHH;n=T>zFqmqn? zD6G;AmX`1i$N|vNdTfxFN-5598a4G5T$GI2mBemJ`O$w|TmFJ(vHy)kH5#b|C%L#culZl^0k zga06|V6H&(9t=0>+R?snkYJH?Vd|<-`wwJKQ?JFL=A8VGVY`e)`2c{Vn)`ojItL=P z2-$O%fxl(PXxVmLC}rdeE&}J5vM0gxUh6oe0S1pA2RC3P6DP;h@0Y&J_9eR^TB*sU zoiWPTI!u@bFM+M~1VPP8e)AG-yHv~~R?XpFg?RV4J}xU|CyFf46?aBnM_h~9H`0D2 z9-$K;0(GXL*)%jm3|=tI?ws4d*cf5p!-C)hS{I!NN6h15Ba{O^-X3K-S;h!ow`mQGJh1 z%Ql3rqQe&FAeVv&c?O7x-OhU~9TE*w$t*ukGn4?4*x1^a8ZNq)pubLBKQ1$p?OQ)CBI zmmO$bR;_=jy{-z0HBJhi|BR129_bpKPUr3v`sdlbP)Ymvbt-nYXcevXE;&z00-)2Oeoqh6YdWQb|k!T;MnmnOOd0;cGBxg!EwLb0HdTsf-N4yetD3&>SaoF zv#feMtzTiTDx(uGXIoU6KT#|HdHTR!i)SE%v)%m{V0$z4aL-&iKp*n$!v#S>erG{t z+%@lmOKG(|{|s><)>MT%+6TJDF!QyVjU6mK;-X7{%>;*~^(vAl5)LF$lOUfsFtop@ zoJBbWXRu0!>qR}RN*89WC*KkwrwtevAk+bVN=>x7V(j8Z?QMo6w4&o=->8oHfQ|d$ z=y>>^Gn2+D*Pz&eEMz;`mg0PfWAjKA`)?slhAd*Wp=&)7wY|^QwKe}93q;6V)<>R6 z63q?lB?cDfJ@bsC%Rh!6f{cZLZ$)y$86$YkXFa)e7YWefZUN)E{Zg90Z(b!L#~UB-?KlGeIH46RZVbRA9n>jGRv#0wBw9 z<1qMcOsT+FPWedWhl?+5r*_0nv5}6&f_64Jp^^e1(-C_I#jQ_pJF%+BV7#drl-rc7 zdBnQ}e6###-BV-LL@Pb1Mwp-58S5!z+DhytjX$$c1!?g>{Qs5Ob|uc$OGqba7E~vq zRjbWRX*qOymb5ZBhSjQ=mha~tq-8LlBtRj8lhw018$Q^S@>d9F)LGg+fSH@ml!ec< zyMc-2PxH*8N`?X3#{^!=_HSUnlYSu2_5d}A=TsJs8?5-P#LF9cOazw%6k50qg_m`- zo2L{a7RrL+w(B%2IR^lt1W71+9v-GaRCV}SlSPCAk7anth3csm=d({9`1dFjW}LRn zi8^41<~V$y6gfiDlz+l|u3eMNIruS?_rt3RHY;){uu#T4-4UwuD>mUW9A;RgqrFy1 z_XE}Vq8GIwl<{?eN|Ph85E1KlzAMbqY(P%*Ge9VW}qXBvLb`^ zi}Y1)-@Eju+b*=ZNcvG;r8c@p9An~S;X!8%YthpWrp_TS=}8TXxFg{Kz=b=lc81LG zK~4zrce0EYm|nZKnJP=yVusL5swZ)j(FR2!1@j=L605jgmftR_+*-3F^ceP(q3GDv z4Ku8W01iSdtp{UepG1tD@S}{65&zk$t=(Z`VZKPqLL%oCMONJo?K+CX`DNZ221=`2 zK-Q`Lk*d;Ym%(c(GMCBNqGO9kCpN_3T@`%0vu2zE zpmnG^!GP0@(JV)Imz=#8d9&C#D_^A5QU%rCEXGXJ(1R@}LsO8eLamrJ`)uQ+M50l9 zT*v<6bJSJL(gM5@2NOb&8%PRl+=la_UytOiE)l%6)+%_)_qK3li zaeW5b{_x*vNKv&HOqF|8G?8AXVHr-{zOR{n9d@f7xM!J|PtKp3-$J!r5`P7HJ+p@Y=`V7LvA- z&sou-vIoB0-W|&`vx0>`86Lzy0|euI5^&nn#C)W`Eg>V$zyA4<3~wZo??{PKhq4|j z_A2n9#qp)PXyTi4K>8O&bIf&>y?nlmVOTzju0d>Nw(ntxw-t~oq@e?ks~6?Mrt#_ktg)Q zPiob0w}id12-M;gL8oC%m|r}$T2&A*Op$g#5--hEbe43S zP&eZsn7enaSp7=U04f945w?pBHn)FqCb^RR@~e5pg9{~jS%bx&+pG{e^!#~LXo*o= zRb}GsWdr4vOFsurg1kav+HaOBZ(sAd4_{u4 zu-c?=(f|MlsAXy_o-p2k&8zgdOQjIzYshc zOaiV|euv)mhLRfyv#3Q#K%@M z;}NU_c1kD<-6%CZTiGT=V$o_6Em;rBbOAd7sR0v2QXCx|S_gNo0!Z!tK3iCWJ1BCO z)RvL!+_E-atX&G~*`y0L9pRc6Ct8CAiZ4V;L>C}NkY-jlb%YZC z(0(>)Y!@6meg_dTBJU8XREEnw6!3L@m0ZHcoNgK5B#jL+eQiw#aQq63CUbwW8L9SgE zt}}OW%CgvLt~~(RqqbCt^6l5HZNxH+D`8k}ks9AK`b57)KbkX3l#Xozj{zsh zO;Ie&`HP_uq*}1K;v&`3y{DJ07(DWYa1Wac4n#8>w$*$rAgU%a zxbqLwadd`fl)_S{cVMsTBKW@*xruwhrlZU1vz?FO?w1ud5z%BG8P=kE2+uyG#s(j6F_4f} z=~*EcHJ(?T0TPcX3Z0@mGp53TV4AgRzNk8)r8(UKiEtwubN-?Tm}9Dhukv25(id1hG9h2OLbh3j}f%cYc`LsZ>@SZbvz$nwnqXOb%YUi2Pv>Q!!onCxDUB?ID84 z!w5o>)sHVS8~-<#&Q~=NC531|Q@h{VnR)BHx5O@?7%e_bN2V6-c>6D46QFcO#;%TP z@8iRAXBo*4Mw0R%zj|t6w6H0R0liVTH>bKz=qqYx)ov;C?x}Zh3>IHmUU9S5sB?4Qk)8?HJHB&vGBo6vbkDEi59F zc&?4av_tmvoGkg&`sptJgCb7Bz0?|sV@ya z6DT=e@>L@pe&$Z2>&h}wIS4m4*~rGTC5FRaI zW6W3r(|pPY_zn|hUG^NTSvnMf4W~M0zd}u9-dm2LhtQfBhX$gl;|1T0N#IUqskAmd zBMEdjc_B?{Ojgi6nbHr;=$V$#JZsYj{MU|>yta4>ynP2hDZ7QP^DO9m+B3@T)VRbK3l0?)q)p<^imt;Ik6tCp4v*e_@U)OUdVv^tVW@pq} zK4)%F8%wtXE8{AUA~a19>P(~-vwwpDFQ7~gts&!ik#hm!EQ{oFtmG@mHb-9~HICoz zf4^$yX44tUW4=79BSy!)Q~{<>yk|i41SdguH=BaSH0jYvg#(r4RyqcLU6`hIlrNYJ zGGk!H>N?PXtPAr~!D_&SpoS=!%UI2Y6-f+A@qW3#N-$TiH(VbsK@A#q?!LmK)O0nq zTKn4saiv_fJlJU?oywYo+*oY61l06YLA+?Tn+{=q8!bdpki^$x`aeCzWf(-=A# zO2*yEgQ|j)!-()5%v*?fH^J1^BZsCsjOjKmgpfp+Q=q#vO(O@dN5~$x4h_i->Wm!q zAqQbR{TUKj=YDcS2kI*#7%ZzgtLOx*mukt*QUl}>XjCh<6P|>n(B_l#DTBnJsf2(L*WbtR>{?H6eR=DY_D*#$;T*?et2~ zT3*tN1`0sZStaa+JIitUW}+yf2DgbiH>hHDs52u)1X6w1jtqqa$x8C>Hb`~h*vUJ( z9t~@d(&iB>5b35(I6u(@ z^hX|&(wQf69!$KY6@jNb?fIcc*O-a}(_w(l^gQ?D$4o>FvO?F8S;aWEMVUIl5?Ai4h_%BEq=<7UgvmRhqVsIFbzGf#6t;R*2#w{6e4^CnOF|c)7p4`d0H1?;(-JVnckEv$G2g!PO7}?&$x(mAk zQ%}*N85n97Ch5gk%%bxnkTjOhAFX1l6MEv2j(%SSg@8gB$u7iSK0Si2gi3o(a&wtf z47yur?7W;bgsl7e0l{q8I9LL@ORzJJ(B;0(z(P(foNis<-Ux}$;9WO$GD z3}@@ghZQP$9ii@&DQ;DPso1x1ouo#sH7!y6w+(6H*es!m z456RnixuVcm|2%HmDV#BrGTkO3-c}sAKF1rE~1sl*j=VqbbTVLLa*F1WO>MwiGR-8 zz9A@W7Jzg`+6#rvGxCh;s&ciR_li)cl4BfM!Fn9COLnhwYJ&YPJ@2Ncj@Ai zMToUV%mOt6frRG$Bi$4><*R=&vP);BQCTnQvC_|XXU!-SNz<%qdC-L;Fhy3->#g@s zr&m#Vk(7pt2%APE{H~etz^N`waf>5#v!@HqcwNtQLqnY`k+`{}Y+T%WD|M;4R{>l( zl|KS$$C6qVBUfd06Jt-^l7903dbUB>@I;``ayj4NkDY)yxd@es#zy6GDx#t_h# z9X`CEkonVcJo^%zvdh?Z6n5Zn;lGl_p&^honv4|P1nij|UGG zI)o$xb<4al`aQsQlrujHnHiJkXFtKNJ1ll3U~cQNoCb$|!pLKwtN)wXYZO3Vakzo4 zj{NO6>=ib0c;8*dQ~N7G>HK#t7^{EbW2p&HwtwETPca+sX)?jPA_zb!sfo>?t{PB7 z#h*jVApU1Gk*tSBK;W*0PKlTtXM+)1Ju;}J|Fsu)b=FQJ&1&dFdNOBK6Q309biTT3 zugZ^vgIW?ahySUlPMXV(rz2z;fF{epOSH>CvDd4E1Rre$r2h7?dKtskFD6BjU~|=H zwEuwDBHY6_4@^E&3c-E!VfmbeC&Q2RnpWqK_DoZouWFFyN1%7plk8ekp!aOO-$t$HdV9wx7Xy+TqE4=S zsjoF{yzn=3f7A2E(fi`I?lPF20W0Kx>~95c#buU5LEIsO)X0>CBS0FxmParyXe~1w zEf~EY4~q$Pe8O{)N2fDkSyj`z`M%z2V@XeaRP3LlLk-jI7{C=CK)*-jE0ZUOknume z7y25H`KX3}%2luNT0H??Lxxld$YJ~zyr5=OBlsd{ZgTKru!z}aeI24NL?|7VJywhM zPabugVYaV7Xj{T>)(j$z@%`aGqp367C_S|HOz!$b_Ew-a$ZVbh1x;^MigE;JA1pR& zp*<-WtshU02ZT`D$CeRZww)tJ**a>Mpl>=VI^}ve-6WdL{bNKIf@2h<*E`v3T~i!z zwojD;!ETk8+vlCs^MqF{jN09S(0G1N;d(K94W3oie$Qz^8c5+VldU2X>nx zn(P_f`Zh@`O2>Uo?bF4ML@z1R*`Hs`NUI$nj<2@mNno6S8+$7EyXd-^z;oA|kjJCa z-=$dLRcC_rZ*^Be>OEWZb2LamS*GP*@c^;B*-2CuE<6vhe*{Q7bu*$N{ey(;t>lI^W+I6!taN$hV z1vXSKU5gW@hL$A2VVxsIN`o}4lGx1AEx^vsp74A=I$YctLA<8JwAY?w}>;nq_pE;h}sAD4!qv_gMss8PYmeS%+BX)lI}Hi9ju6BQ&(2)LTJ> zU3h9w*z+OpG}q}jxGPLf)4v&N^QALYk=!d)xTA<}U0KJH5fWVTV%vMvgPy-w`{u+) zmgr|j5!?Y!Ad+E#{Hbi$g2tkgQ#E3 z@%#+u-w>jN4VOoyqq*Bl-2GbLg=wz`mB)G>xD#Bg2m*dc%9YRp z&@*HBfiWC`io0@k$Q?_7kKF)hP$*kZoNPB6a+owwopvrxCDG*BEzdDf(=fwOJqEZz z$`Z1Jd9v0l9yN4`hEcNHxWnB6l>WlTgLlDYy`Y@;@{KGS$w1lPdE#D8(&Ghrm8!Pq z1M_q1UFn$60W>5`8jON*l$<%69O;ge&zRUBX`yg|>pJ*?RmyM*`#8f6YNN4+RsRL< zgVL*>X1f6e$5dpHJ20!rEnqj-;~1?bpMW_yNjcLsK+zaB4HxdATqHI+Sxy+Nr_pb%Txv*pC^FoTbCLkB>BTv74OgAoUb!_cz#{o{juT7 zMoY6Ld<5TJeM0A_+%8a_h^j$_QQqC9*i52UT<&1oqHu;UP^!-0M*vhntG}T;em&d_ z(IQQ#0OmRnp3Um4X72^jlgTp@tzmRqT!%w3CAsyr5XHfy#<_Wk+yRHtk#%JgN1YW zy1cEf6LnPlq#=LT^GGy=*ten3JL-xSTtH&wa8fEz+v#ye$>!NS`QZIHm}ZggfMZ+3 zX&H{(Y*-+fCfKQh5BD$vSZp2VVk#s(ekia$GA)lx9YwU%CaF{nbnV8vGZW4ri4R#+ z!=kgt7?zb@XS^IhTKUDtpg??~bKs9RoBr1GMyDiS1;t5_9@veQ5lHAMTT6wLF397B zedxMq=3c15^POGx;8`{7tiDUNkeHMIPJN&zKi0^QCDZ}Kmn@SH(Tq)+9nv>=x@xYb z)k*w!eXe@v7KO1X*_MMOzG4@3`|b$poJ+p^dn#uveo`f4NmC)o{<9^3vuyh`=VwzS zGapzGTVPQd{7ONlvDvwA)a$s^5T#jkUz%m@;SZ_T&|y?AfMawX7opTy%1eS%w|u^U z#ftVQJ%p544|6jAYk`oSOU1ulkkGCQ{TPbrmFPZ!qkV*_g6B#?34e-|?GIm^iKYqt zt$?uz0UXT_Z%5wNSqLU6g~@qp+~T8$_YPczn9#qAK<9zu>qt1`=ty93N!cg_QzYY)XWt2ZRz1? zjXVU@dQKZ)C?l#z@|(4G?5HWWt+@%59(&{aKPM8ia{dxpn>D-ICEqk#J>qJ&&;!24 zPa0Eb0O%gut?HzfF!!VSN?3o}k8_}Z1d!GGQ9_2(^4`iJ#ijX>E}T>o9+n+FRQldX zjR(kq8^%6JzTWV8(e2M=c6zu&F}DCe&^0GcEEi;47jOH_y|muiN&cdUr7Gg4i*7z2$RCE-giXY#pw zz%*);$1Q{SKryguq>5m}cu^E%PJ0oAcmehM*soJcF3&kv3G-q(&7RxB=J>0I=F>DT zFmBKjA&DmHuAZwKUN$P^F`x^s_LArPR^+tyte(RkUvl-m_`EKpBE$eg!-senWQZ6G zYa*)qdeVyxDFA4f000NwWu^%-7qHsTLe@L->O}vZCO7CSY_{V94GD?+R|>d9=A}Kw z`Gc`8jEdoi63$m<1Td?I$=0!V>LgZ29A(v*L;N3<=}>4Q`JHlSqvC1wEz{CKDv41+ z9Ha>m9$U}qZ1*bqW1hgNH)DxWwo;!nEY|AV3NR zQOsAvcWjn_b(h@8l6-OXSvB^=tP7$12DU(vn+XT@>RE(_hvAA>(a7Lln_v&VgM&Oe zTh`>55r)tX{&2w?$3YRKC-rG9LNElI#~iqYl9$5~E%728EU)stRNT~)cs*{no=zv` z?w}8qc`Z_&7PEFx!HE&W=9PTL2b_|Iu|#POE>3U1b%Y{Iv+uQaUW*~)!IBI-753DN z0SrD8+B^ZI;&|qR&9doSAb&2rGJSKRTFd^(dUv3Ji%&UZIt^+TCzURTte0Y_<$#&cdyOFp`lpu z%S0aQewcjJ3Q6={bZUhIs%;$sBa*ffJfoMlE*h+XKl@j^uJy+rp$O|zq`?Kso{!gQ zejA3*?W-|Wb&ThND$(?=b^SP?6^X{rh^ki+T{;@L9C7S{G~`_HV#7$zgb9eZ6TY;V z?DeVrAcJh$^@NLh12Yp#>cbw@hURZ+51a%!x|% zrKrx6>f1U4F}Ivrxhk|2!ZD;!*e9j6w_u=)xUOcj%!$mws~R`bt^4RzV5r7X#h82J zdM6^WUJK$AD)ixq;=t7#vOz3mFVAq(CG*-YMAT%+yL&wyQ68`xBI=+?s5UecC~;G2j0;#b$dH@I1DtfiycZJm_;^BohYzPQYLJ*&-|Q9-jE!O%Sf>gNhk{|z((W^{ zMr|yZVNC{LFY1R+#&aRL9_h{ep~4_}82XjSZ{0@WAcR?FGpXz}e+lfLP)0@wT{@l{o z^ix$5HdBbE_4;m*iKhh4WPsBBNwyWuCc_PRIC9TL>GU)=jN}0_{qjt{{G8Z#RDz_( z31;pDLX~)r4MLE78X5+G{&*^C9B#>m{vo~|b+5Ko+75nrh~MXMT02CCdhno?H!rlb z#Tx}So1E5+6Ys@Mcu*fwveWOaH z4X2>vHz8Z7cIVMJrEE{`TQfEp%)NKq==^Kr)q$&}ZK{=L*dIz*7}{1360@C%IWJlo zve!kDaR^?VAhvTCuZa!3rrD+_p3`q%e!dn#WE*79_c6D|^gGmIW8yx6t5bh8AruV-Ut)Nbcsw*6%RD$h7WbVp^`2G_Xv=)QlpzBa5jvQ?)(Ble#8 zBlzPTu|xy(-v*)2n^Z0bH503^h>D=vl^U$?k(p{-r)FO0s4`9@cHG#iy36z(J;+JI zUG`H(6oL>YO+Zq{X4g^V#zykgW+p!Aw(?U;`vbK*m1?N9QX<=p(1{oqfh^Pu*g^M> zcz+Q+F)GdP9)r>E zZa)#VW8?>!ePVyxksE~KtiGdxENo-pbFiw)1awmhQyn-+J_=q-g-dr8_a+_6W-CBS-ybR^9AmnbZ*kZqrOemKxO3ETe) z^<=B7lV=k>b8g91#J#gq1yCwcA3fRz-u)hcze>oUK{`)#IVFHVC(w;5<15v5hEM+}+x!GAh zb^rhe!DRstYvWn?(oKkw3gTCQjm~)3<2i)e*8e;htyP`1`Wz9(ZS;>gbEJ}Aeecl* zq%>*Gddv;~uG#aPUngTxxToWjS({x%@O^CaNnn!0({8z?IMukkB2}AlsfM1-psa4; zDO_%>baF8CSRZ}HBbm7-@+s0_Q308kBNv>^r@>slyAZh}cCkAA4cu(&CP(J1_{D+O ziXB--{Aqvw6WdXpz*>}_EOrJ)p_ioPlk}x4aFbTEwAdKNN02;5R!=ah!0lAHL~KJn z-^`=z=i;R!Xa@QJgS!=z*4z;T9G*|u6IK&onms+HbgDgGO$IS^`9EDAzC}SW8TByx z!9>|O)x~7>j4c3aJHFb30jsDKu6dq+)o)o?I2q%Fqlz5OagHhP$Xn&C^eco>dxs@aDI$M(-V4H4RtsrT z$!-QBD&Sjw?%<9M2M)^@a2P0E-!JBP`q2+$+xp;`{a2rBV^CuhaoJ8}z~YeLRB4 z>^f#za$}Yd6W;(RitsU6ilfiLkeA??Pqg>M`b+`9W+g0!8wye9{tAkllT^N1TY|1D zb;!dzeHPKg39lLQwN|etp@j)7&&hO2FT(-RC#2MuDKeHGzZAhj7DfpUO>GNfb?=G3 z+rt%Za7^));TBD^&oN-!^`%PP&jzx=&)+d1|f1kB)?}Y;0hmbI6!YH ze=;jFM#xLd#k{VTbq*3MFIljrJ_SKxZe8qv zW8LkZ6GAx3;P1Cw3hXNE5=!pz>Zis95g_ZX_I7`F#{Jm@ZUNTzn)Dcrh>cPI2Ds z)?m>2o}ZP9DD5{y0d}O|QckfS5U(KLIGa!1SDbcsW-W#Ujz2g4`{xp{9m6W(geD@0LrAM#R>^2tBF{3O{5aXv&h zO{(*T&;nRDdT9<55of){hNw8K6dP4hy8gV8FR6DjNRdmB6V%Kl>L}2a=R19C+cGoQ15IKW;;Di5Bcsd(FJ6XlM*YVUVn2C} z_sS^0DC{_H&8KemRBjHW($`x3j8|+)NKL3{KK#ijh8Y*HS7Z4%=sbF`JM9fX<`^fO z6OpHi)l_E%;dQKk=%W=U;U3NM4g0A3Y3K&(b=wZhC9i3USnxn$G9+^p;r~O!HF+vn z7{?I+`s$b>6#jH#_jqoCLpVvpQ~YDsD=UjvTCFu7;w3xFLL^YuiOxCBh+93AdSURf zZ_1aab~E3Q4^pty?GIG7CT4XQT6aqjqRd;#jl(`ezKXI;kzrB~ut_Fks08y&Wgj~k zBOINyF7J-CEI+3eJFzw6+He7?Q)vj;)44;0DFVmA;&z!DE!)?{U#tSN<`gn>tEcPb z+;Chpk2zg5=Zgq-(%^orwwftblD(b$4M&@-AP7~J86=cgV{jcow8MFVPA4@zwyazg zvdJy!x4`+rNK3Cc^;mvptk+8e@9%tnyRxEcRqgmPC;S*I?U5v$)p@6>h-i$}nkQrR zcjRUPZWuV_5vfZi4Q5+~)|we}@eQqtE|(fTZbiF^vMcjrhRLCLiN=?YxOVLOfPw)6 z%4+=)e5CEqGm}t_T)z$9rMMPO6pF*$*FZJwjN^PqtyaQ>@=k+|Y$&{ZW5rWMb%*K$ zGXpc_t{|wD2v1g>mG;@fPSk?O&}KbofRH%NYIcL1WZlRCP=Le0nN3S{nVBHgJ>hO~ z9j(cGQFioNd3sdV<9?|s$+I? zimdeN7#Gd~$d$QkA_j9z!t2)Ikp2O3o zREcFN8yn}yJB5YDP69V_=Utn{omI&b7Wv-h5r5+>lJS%q{}y^?3%;`$T~}MyN@opS z1QZY*dtdv%wz)fJG#Os5!EpzHQGYXwlo3c?3^h7z{efzJ`aF&4p)z{#!D_@u`!yA_ zP9pw632LaWR7CT>?LL~ZtIzCNuf;3=--zlSRgUT$92Kp#hTKvcyJ#AW#(HhK8i}8M zdf0VmV&IqNv+l0Fy6@(&QOtr+7b=lpof~w|vi$ZtP7aUdWBapQnTfZjn@Q|(bIY8p z5YnH`looYRc544JzmAseBI0%N`)G~70O2M%ln>RuSx~wTn4nYK&crJ7HPbMa@xC&9 z5IgqY#orbe&@kJZ3K-BW%AFd59xo8BXgTO`b|#kbPz)&w&o=HmC(K8u44QJQxNpcX zrNzj~igpHHH8+Rj_A^|yTZFUa$Phl>UKe~4jH!OTc54)Ol-fXobnq>=7uQvK=!9oc z?uC+)ig2vIrz8!*Q-og)CYvP|nAbL`--&+@AIEV^vsSJ~(#vYWLqRJ_&T1os0z|>3 zd5Q-wIAXDhVJ{S)~*z8+eL9G7zO4tO2@VxgY;KwY#;U7@Q{}QUL0D zSTg-^c%y0=Th;x`v1H^}>*aT=gSpGKz9=nxT7M>(=F(z7t=&Y3C4MXN2nB;ejdlkq zq>IOU(pU&qK9Lip^}|VAMqUR+-vdh@fqTrv+K)mE{?~s&ZT}lYEnI*I_bkc_bMz0~ZqcKi(^Am)93V&&fX0e3HBKC(La5;QGAiKjn#)- z>D1pWCu=)8wD95ke=Y`P-v=!m`?u|y3?2e0EFriZ#$z0GXEs8|@!Ze&(mFj3(_|8) z=AuwU(QBsJa7+_c1~6*dy)yZC>D5J6^Ct$eK=G(->}&^@Qq+`I}>Iq&)2KGS@sIx=%=rL zX1Iq=sg3-y2p+VqQ#ow0_F*<9Y6ifxPfagwxPzw5*39I;7jC>}8N5=(x0i|ED+pSP zF~;a8Az4MANXIVq=T~}f>9M;Y+h*L5_0_b}B3+%p z6UaD7P8v0GJXw&ebxBgSzYw^;{Z60c5HgGTLF058#@SsQ^KerM`ko@IAW>;F|L?CE zWm|07+c$IhoA|%|!O5pG3;HkIb&Ud_X$7MIWj6nsd#fGTq7dgqQ59U2-`oJqEAmpp z6?By6HfZ5G#a;b!rpKm8Fkm;6#XhR3<7OEJiC|YrhA89^D{IpAx485$s|>;b;{;p9 znl5Ub2H~-!4}Su`$1o@YM9LbS{Nx*_U5v=@RF-kKg%nDaCAZK8ty)$M)a1);5#t{0 zxfdXS0(A^C6S(bJVfr7y*DDG>rues8&dv75b}Z02@)&4LOggh+Jj`_;+*8%twqZz_ z9`*w=KpSc2Q&~9@O6dr`6c9ih2ZdKg0QFZTk2WprFJw@e+K?Y*X;`ZVZFBw1 zzvjgAD*Bn_rp9B=K_Ap0v_sEktBMHCG*w= z2pzd3ID%SVo@3X)K`f0$-&NJb_5ug*0myuY8Tx_j;|c7vtBXQ%J?X#4N|-HvtwJBT z^f3B#$U_#nV4e~QqG-S8K8(ayNe~X2=0DycbS^qg!?`&0MK`+#9uLD1_IY55R&MMY zHvOjjB6$y*n_o=SjzKYl?(EhN?(_+(j%;!pTzP!5lVHpov{d{$YChziQU3B9!%uJ9 z*JC+gF!UtBIXy&Xld2bYvG0K=fPg;I1|p$dY+Yr{%1=>%fdBvpqh*EuEI1n#7=nb?Y5fy|tbUyfcO_bA2f@T8OfJ_}l1n}%uc!w;cBeSyQ>u8}e2SFV1G7?ICQ!KaOlBq^x=d2L^`&a0?C2Qrv&NXIwN5U;cdlItKKz z0(sfw%nJ#YJ=}p5!msG{%&1fRF_>{@S`UZ4yQa#|dWdz0Y?CB83C*-8TZ3Ed9jnf? zRXoZ{18`dtPNGIkoBpCHJ3Uh?j*okwlUgWKsjEP|OBcAt>m{pW%CO77n&r1)QO5JCjBf)A6Z z7h2PG0LvO&!0lV*Ul0Akr6+DZ5w=Y0J4d4(&3g%F6JX&eN3}l95RD*SMv$PtaNFiC z0ipXC+A2ohWj{!D|9n&7T~Nexu(JT=EJFgYOEkczn}^pTMz~FAsplpMz-ZUSzEiWc zv}vz$^rP#@aQ6uj0{Em99wDfKE&=7T+U$7s*ut^hnS2gD_#Qb=%C@UuZZ8R^TiR`8t*q)w3G%CW(PsC@poyp!!aNe4?NScl;B^b znfW5}N7H)t@n+6J9`DS7TLoNK6aZGV9xXpUUqekE7o?dh4XyJ6#2D1QvH#l(b|

                                                                                        #bF(`B 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

                                                                                        Pvx{FWH{ zm=B^#wV~~|EEgI}?gJ7OuiJjDz?z6whS)Z>5m{2 z5NSShJLVJ-D42HuDEfV#qXb6NONNE4O38gc-_BuF%KvmYw1H9l1)o=LNEg<*w}32e zv{jy>KfG4)9*e6UNXB2o_X?W8Z@k&JIS{&Cg@cPg_4}J5W5?L8y^;VW!vq3pBeDm} z&fx^r+2AAEEDP8G00(Aesr@^YhUNd#2oPa%ywNLgB!_d@wrfmSVy*3zv33*2KDu*o zE5a*?qH8H^9_Znt!H5t|I(^LTv8`@W3dtB!k;6ee!IAZG?he1dm9O&44Ja4a5eEjz zdDQ7c7ZQ^08#7W8+(%lvTTMcIVS8kfQykj#@c0V{igSfrCAqH#SU)g?p6@m+Ue>v8 zDx>74_g}=S65YXPk9Ybwo7S}*0Oog@vu63h_7BqD8%{tSjTKnkHew}D+lg#~_~EAe z_i9WJZbf%J)O{n^wu8Ov6d-Gq@p5%iX79Im)c2t-=P@;m!?dFUDf1 zpUp%u&)WGv#EqwIbh!r~%>D!Yn#F}}vaN6-(o?%sj{>yh^%=pf)@ob8>*JFY2o;1I zZQ7D`XCTt=!)blRpk=2UO3RI~(*l7myQpY_5Y9SrDok$?j$%_^T6f*G14erLb@fc# zqTHxpAg7%X8aZersW`F9txn4GSpF4Tb$v}RdZXz8FH``(y*4ifH^$t$cGfqhc%u&& z5S|u|B|c?!S}1eAJ;(I2wCY1a)QCi$gD7$PLX19&LvG9iPl=DN#vaLjJG!!XVn zshQ4=55IwO#Dvz_duW9h@;wgsC=G*%Z;CBHBo~M%9F{mECw43tE&HQTo1ny*m&R&S zHvGlBHqJU+P%l`pFXRQvIvp3`$Sys&O3@{Dp)#zCN@C&elmPmQe_W{AXXUR-$Zfxk zuB^8z({|h*fC)i(B(-1Ppf+YhCMGc?z`Izp{&CRS#bU>ShTCB1om0x^@>)#F$-5E zV%NfWH3vSZb6pCBcfq9}wq?isF-DEB$nM}YK}&*C9;a#h0`-_+urB{hes{v_+92p0@&fwi%efY z04mac(iK3B+@@44HQ(Rg$h@Us>gK!DFfu5RmXAHM56i&wf3=C!nMaQ1Ipe={0fao; zw|W~#$FW!j*7>3l;k8#*Mf8rr?<@+xDP)5==8GrHRkMjXc$M)-^FJhT6-9%s zdDdEbir+E)L_v~Hm~U6C&_nsrf)=D1#0)PTh@pjG3iuYg`Tzh2v1N=iNqQP=Zi2wD z5MZnfI!=tO6Ucv=lOhauG;&~n=pm?dvtQRN!45`_Qx>k(u>)mFE(yGoJ@`Y80>SMG z#T)Exa5Y;fUN;O2!`dw}zWMTo+U;3{vNW~r+*8MeA0c>eY^>!DUE(6AuwM-|i*r=G z9-A^`c8#wY(ykJ$^q%Rzy4~g0dar^NRK*1cXKRp>i89a2ZoaJFj-xe^gD-502BG~7 zLX*#cyrdNwzWdJebyXQ;<>ug8{C$bEDX)N2uFJAW2a6j>)D2}W(*CIKGkZm)_3vDlBL zk1SNVa!=Ba@)0D|QO z9a)jk|8?8c8m=1$At9(25|SNZ7$Rbg!V+_Q%c`J=e2-C(w%LDQja$@gAMfHb=L+gd(0Myc}rf4!^EiE&yMRV7FyzQq3o zs&y5i4;+Vh8?@+24u`zoy;P%JzE`|d0z%8_9LVxeT`YfeLJZ%G5WeP+M;H{zbT3E= z=FR<%6D&X|CGuE){IXdQ>W#??TcbF5#z?PGm|<1=tii)I!4knuNajCEh|Mp=(fW#( zW9GD<#i1fZ+(a%oOU$pP432s%Ib&3rDz%9#?k^pIy5dFM$C%mg-^-b(elJ2dv*P$UInN{8n76 z494c>uK6;jl?Yp7JQow};3y!B3sYZ$I)gq~OlIzc&-5++NR) zf<-6LJOl$g5Ra4f#F!1q`|pz_iI2A))DnuTZ|902Ozef>uq_*4(KemQGIdT^Qx(

                                                                                        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 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/.gitkeep b/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_multikey_key1_dashinit.mp4 similarity index 100% rename from tests/wpt/web-platform-tests/html/semantics/grouping-content/.gitkeep rename to tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_multikey_key1_dashinit.mp4 diff --git a/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_multikey_key2_dashinit.mp4 b/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_multikey_key2_dashinit.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..0b9b457a6b3a61e79c7f0c3dc90a19adaae62d64 GIT binary patch literal 241870 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 z
                                                                                      • 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

                                                                                        ;d+NDwtI5T-aOktfj=sZCUPhJs*~0E5 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%0DGez0JCezYTX-&L#gVN`l) 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

                                                                                        RucRl5oQ6C?+V>c?N;$%abyeE{0- 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%0D2%j` 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 lgUeMPfh#@`xiBB + + + + Encrypted Media Extensions - Test MediaKeySession closed event with DRM, mp4 + + + + + + + + + + + + + + + + + + +

                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-events.html b/tests/wpt/web-platform-tests/encrypted-media/drm-events.html index 118ed204a36..880376d60da 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-events.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-events.html @@ -42,7 +42,7 @@ initDataType, initData; - var contentWithExplicitInitData = supported.filter( function( s ) { return s.content.initDataType; } ); + var contentWithExplicitInitData = supported.filter( function( s ) { return s.content.keys && s.content.initDataType; } ); if ( contentWithExplicitInitData.length > 0 ) { content = contentWithExplicitInitData[ 0 ].content; diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-expiration.html b/tests/wpt/web-platform-tests/encrypted-media/drm-expiration.html new file mode 100644 index 00000000000..6dec511470b --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-expiration.html @@ -0,0 +1,67 @@ + + + + + Encrypted Media Extensions: Expiration with DRM + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-invalid-license.html b/tests/wpt/web-platform-tests/encrypted-media/drm-invalid-license.html new file mode 100644 index 00000000000..9584f499ce2 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-invalid-license.html @@ -0,0 +1,32 @@ + + + + + Encrypted Media Extensions: Test handling of invalid DRM license + + + + + + + + + + + + + + + + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-keystatuses-multiple-sessions.html b/tests/wpt/web-platform-tests/encrypted-media/drm-keystatuses-multiple-sessions.html index 40aab914182..8ef745c4fa7 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-keystatuses-multiple-sessions.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-keystatuses-multiple-sessions.html @@ -2,7 +2,7 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, multiple keys for audio/video + Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, multiple keys for audio/video @@ -18,7 +18,7 @@ - + @@ -38,7 +38,7 @@ .then( function( contents ) { // Select a content item with multiple keys and initData - var contentitem = contents.filter( function( item ) { return item.keys.length > 1 && item.initDataType && !item.associatedInitData; } )[ 0 ], + var contentitem = contents.filter( function( item ) { return item.keys && item.keys.length > 1 && item.initDataType && !item.associatedInitData; } )[ 0 ], handler = new MessageHandler( keysystem, contentitem ), config = { keysystem: keysystem, content: contentitem, diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-keystatuses.html b/tests/wpt/web-platform-tests/encrypted-media/drm-keystatuses.html index de2cfd2a552..de7ff395d03 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-keystatuses.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-keystatuses.html @@ -33,7 +33,7 @@ getSupportedContent( keysystem ).then( function( contents ) { // Select a content item with multiple keys and initData that retrieves all keys var contentitem = contents.filter( function( item ) { - return item.keys.length > 1 && item.initDataType && item.associatedInitData; + return item.keys && item.keys.length > 1 && item.initDataType && item.associatedInitData; } )[ 0 ]; var handler = new MessageHandler( keysystem, contentitem ); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-onencrypted.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-onencrypted.html new file mode 100644 index 00000000000..9e4aff330d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-onencrypted.html @@ -0,0 +1,47 @@ + + + + + Encrypted Media Extensions: Encrypted fired on encrypted media file with DRM, mp4 + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-destroy-persistent-license.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-destroy-persistent-license.html index 3a164617462..d70dc9811f0 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-destroy-persistent-license.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-destroy-persistent-license.html @@ -37,7 +37,8 @@ var keysystem = getSupportedKeySystem(), contentitem = content['mp4-basic'], handler = new MessageHandler( keysystem, contentitem, 'persistent-license' ), - config = { video: document.getElementById('videoelement'), + config = { content: contentitem, + video: document.getElementById('videoelement'), keysystem: keysystem, messagehandler: handler.messagehandler, audioPath: contentitem.audio.path, @@ -51,4 +52,4 @@ runTest(config); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-clear-encrypted.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-clear-encrypted.html new file mode 100644 index 00000000000..a8621ba2552 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-clear-encrypted.html @@ -0,0 +1,53 @@ + + + + + Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, clear then encrypted + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-encrypted-clear-sources.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-encrypted-clear-sources.html new file mode 100644 index 00000000000..491e32a6fe8 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-encrypted-clear-sources.html @@ -0,0 +1,59 @@ + + + + + + Encrypted Media Extensions: Successful Playback, alternate Encrypted and Clear playbacks, Temporary, mp4, DRM + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-encrypted-clear.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-encrypted-clear.html new file mode 100644 index 00000000000..ed5ff23632e --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-encrypted-clear.html @@ -0,0 +1,53 @@ + + + + + Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, encrypted then clear + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-expired.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-expired.html new file mode 100644 index 00000000000..a87687fbaca --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-expired.html @@ -0,0 +1,53 @@ + + + + + + Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, expired license + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey-sequential-readyState.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey-sequential-readyState.html new file mode 100644 index 00000000000..42d563a5de3 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey-sequential-readyState.html @@ -0,0 +1,58 @@ + + + + + + Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, multiple keys in sequence, check readyState + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html new file mode 100644 index 00000000000..0b23721b6fa --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html @@ -0,0 +1,57 @@ + + + + + + Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, multiple keys in sequence + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multisession.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multisession.html index 4289af4a3c4..391ebf90724 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multisession.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multisession.html @@ -36,6 +36,7 @@ var keysystem = getSupportedKeySystem(), contentitem = content['mp4-multikey'], handler = new MessageHandler( keysystem, contentitem ), + proprietaryInitDatas = getProprietaryInitDatas(contentitem), config = { video: document.getElementById('videoelement'), keysystem: keysystem, messagehandler: handler.messagehandler, @@ -44,7 +45,8 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: contentitem.initDataType, - initData: getProprietaryInitDatas(contentitem).initDatas.map( base64DecodeToUnit8Array ), + initData: proprietaryInitDatas.initDatas.map( base64DecodeToUnit8Array ), + variantIds: proprietaryInitDatas.variantIds, testcase: 'multikey video' }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-two-videos.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-two-videos.html index 6109662b765..1aafba40fbd 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-two-videos.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-two-videos.html @@ -2,7 +2,7 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, two videos + Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, two videos @@ -18,7 +18,7 @@ - + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-requestmediakeysystemaccess.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-requestmediakeysystemaccess.html new file mode 100644 index 00000000000..2656f8feb55 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-requestmediakeysystemaccess.html @@ -0,0 +1,41 @@ + + + + + + Encrypted Media Extensions: requestMediaKeySystemAccess tests, DRM + + + + + + + + + + + + + + + + + + + + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-reset-src-after-setmediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-reset-src-after-setmediakeys.html new file mode 100644 index 00000000000..b91211df444 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-reset-src-after-setmediakeys.html @@ -0,0 +1,46 @@ + + + + + Encrypted Media Extensions - Reset MediaSource after setMediaKeys for DRM, mp4 + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-playback.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-playback.html new file mode 100644 index 00000000000..d215036fae7 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-playback.html @@ -0,0 +1,52 @@ + + + + + Encrypted Media Extensions: setMediaKeys again after playback with DRM + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-resetting-src.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-resetting-src.html new file mode 100644 index 00000000000..d1723b5ce9c --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-resetting-src.html @@ -0,0 +1,52 @@ + + + + + Encrypted Media Extensions: setMediaKeys again after resetting src attribute on video element with DRM + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-at-same-time.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-at-same-time.html new file mode 100644 index 00000000000..581d22f4af0 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-at-same-time.html @@ -0,0 +1,44 @@ + + + + + Encrypted Media Extensions: setMediaKeys multiple at same time with DRM + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-different-mediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-different-mediakeys.html new file mode 100644 index 00000000000..7d3fe096383 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-different-mediakeys.html @@ -0,0 +1,50 @@ + + + + + Encrypted Media Extensions: setMediaKeys multiple times with different mediakeys with DRM + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html new file mode 100644 index 00000000000..efc6d19780d --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html @@ -0,0 +1,50 @@ + + + + + Encrypted Media Extensions: setMediaKeys multiple times with the same mediakeys with DRM + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-to-multiple-video-elements.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-to-multiple-video-elements.html new file mode 100644 index 00000000000..bd78cb930de --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys-to-multiple-video-elements.html @@ -0,0 +1,48 @@ + + + + + Encrypted Media Extensions: setMediaKeys to multiple video elements with DRM + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys.html new file mode 100644 index 00000000000..1a74a6236a6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-setmediakeys.html @@ -0,0 +1,44 @@ + + + + + Encrypted Media Extensions: setMediaKeys with DRM + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeys.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeys.html new file mode 100644 index 00000000000..f6d03926132 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeys.html @@ -0,0 +1,43 @@ + + + + + Encrypted Media Extensions - Test MediaKeys attribute, setServerCertificate and setServerCertificate exception syntax for DRM, mp4 + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeysession.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeysession.html new file mode 100644 index 00000000000..0c737df9eff --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeysession.html @@ -0,0 +1,43 @@ + + + + + Encrypted Media Extensions - Test MediaKeySession attribute and function syntax for DRM, mp4 + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeysystemaccess.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeysystemaccess.html new file mode 100644 index 00000000000..d54e1943765 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-syntax-mediakeysystemaccess.html @@ -0,0 +1,43 @@ + + + + + Encrypted Media Extensions - Test navigator.requestmediakeysystemaccess exception and MediaKeySystemAccess attribute syntax for DRM, mp4 + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-unique-origin.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-unique-origin.html new file mode 100644 index 00000000000..a344ae5c070 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-unique-origin.html @@ -0,0 +1,44 @@ + + + + + Encrypted Media Extensions: Unique origin with DRM, mp4 + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-waiting-for-a-key.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-waiting-for-a-key.html new file mode 100644 index 00000000000..508afcacb15 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-waiting-for-a-key.html @@ -0,0 +1,52 @@ + + + + + Encrypted Media Extensions - Waiting for a key for DRM, mp4 + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-not-callable-after-createsession.html b/tests/wpt/web-platform-tests/encrypted-media/drm-not-callable-after-createsession.html index e147560248c..22d9a1359ec 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-not-callable-after-createsession.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-not-callable-after-createsession.html @@ -2,7 +2,7 @@ - Encrypted Media Extensions: Test MediaKeySession not callable immediately after CreateSession(). + Encrypted Media Extensions: Test MediaKeySession not callable immediately after CreateSession(), DRM. @@ -14,8 +14,8 @@ - - + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-temporary-license-type.html b/tests/wpt/web-platform-tests/encrypted-media/drm-temporary-license-type.html new file mode 100644 index 00000000000..a4b54dac3b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-temporary-license-type.html @@ -0,0 +1,71 @@ + + + + + Encrypted Media Extensions: Test that persistent license cannot be ingested into temporary session + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/encrypted-media/polyfill/chrome-polyfill.js b/tests/wpt/web-platform-tests/encrypted-media/polyfill/chrome-polyfill.js index 346da6c67cc..2f11497ccaf 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/polyfill/chrome-polyfill.js +++ b/tests/wpt/web-platform-tests/encrypted-media/polyfill/chrome-polyfill.js @@ -1,5 +1,6 @@ (function(){ - if(navigator.userAgent.toLowerCase().indexOf('chrome') > -1){ + if( navigator.userAgent.toLowerCase().indexOf('edge') === -1 + && navigator.userAgent.toLowerCase().indexOf('chrome') > -1){ if ( ( /chrome\/([0-9]*)\./.exec( navigator.userAgent.toLowerCase() )[1] | 0 ) < 54 ) { diff --git a/tests/wpt/web-platform-tests/encrypted-media/polyfill/edge-keystatuses.js b/tests/wpt/web-platform-tests/encrypted-media/polyfill/edge-keystatuses.js new file mode 100644 index 00000000000..8861444591b --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/polyfill/edge-keystatuses.js @@ -0,0 +1,144 @@ +(function() { + + // This polyfill fixes the following problems with Edge browser + // (1) Various maplike methods for keystatuses are not supported or suported incorrectly + // (2) Key Ids exposed in keystatuses are incorrect (byte swaps) + if ( navigator.userAgent.toLowerCase().indexOf('edge') > -1 ) { + /////////////////////////////////////////////////////////////////////////////////////////////// + // The following function is the core of this JS patch. The rest of this file is infrastructure + // required to enable this function + /////////////////////////////////////////////////////////////////////////////////////////////// + function _proxyKeyStatusesChange( event ) { + this._keyStatuses.clear(); + var keyStatuses = []; + this._session.keyStatuses.forEach( function( keyId, status ) { + var newKeyId = new Uint8Array( keyId ); + + function swap( arr, a, b ) { var t = arr[a]; arr[a] = arr[b]; arr[b] = t; } + swap( newKeyId, 0, 3 ); + swap( newKeyId, 1, 2 ); + swap( newKeyId, 4, 5 ); + swap( newKeyId, 6, 7 ); + + keyStatuses.push( { key: newKeyId, status: status, ord: arrayBufferAsString( newKeyId ) } ); + }); + + function lexicographical( a, b ) { return a < b ? -1 : a === b ? 0 : +1; } + function lexicographicalkey( a, b ) { return lexicographical( a.ord, b.ord ); } + + keyStatuses.sort( lexicographicalkey ).forEach( function( obj ) { + this._keyStatuses._set( obj.key, obj.status ); + }.bind( this ) ); + + this.dispatchEvent( event ); + }; + /////////////////////////////////////////////////////////////////////////////////////////////// + + // Override MediaKeys.createSession + var _mediaKeysCreateSession = MediaKeys.prototype.createSession; + MediaKeys.prototype.createSession = function ( sessionType ) { + return new MediaKeySession( _mediaKeysCreateSession.call( this, sessionType ) ); + }; + + // MediaKeySession proxy + function MediaKeySession( session ) { + EventTarget.call( this ); + this._session = session; + this._keyStatuses = new MediaKeyStatusMap(); + this._session.addEventListener("keystatuseschange",this._onKeyStatusesChange.bind(this)); + this._session.addEventListener("message",this.dispatchEvent.bind(this)); + } + + MediaKeySession.prototype = Object.create( EventTarget.prototype ); + + Object.defineProperties( MediaKeySession.prototype, { + sessionId: { get: function() { return this._session.sessionId; } }, + expiration: { get: function() { return this._session.expiration; } }, + closed: { get: function() { return this._session.closed; } }, + keyStatuses:{ get: function() { return this._keyStatuses; } } + }); + + [ "generateRequest", "load", "update", "remove", "close" ].forEach( function( fnname ) { + MediaKeySession.prototype[ fnname ] = function() { + return window.MediaKeySession.prototype[ fnname ].apply( this._session, arguments ); + } + } ); + + MediaKeySession.prototype._onKeyStatusesChange = _proxyKeyStatusesChange; + + // MediaKeyStatusMap proxy + // + // We need a proxy class to replace the broken MediaKeyStatusMap one. We cannot use a + // regular Map directly because we need get and has methods to compare by value not + // as references. + function MediaKeyStatusMap() { this._map = new Map(); } + + Object.defineProperties( MediaKeyStatusMap.prototype, { + size: { get: function() { return this._map.size; } }, + forEach: { get: function() { return function( f ) { return this._map.forEach( f ); } } }, + entries: { get: function() { return function() { return this._map.entries(); } } }, + values: { get: function() { return function() { return this._map.values(); } } }, + keys: { get: function() { return function() { return this._map.keys(); } } }, + clear: { get: function() { return function() { return this._map.clear(); } } } } ); + + MediaKeyStatusMap.prototype[ Symbol.iterator ] = function() { return this._map[ Symbol.iterator ]() }; + + MediaKeyStatusMap.prototype.has = function has( keyId ) { + for ( var k of this._map.keys() ) { if ( arrayBufferEqual( k, keyId ) ) return true; } + return false; + }; + + MediaKeyStatusMap.prototype.get = function get( keyId ) { + for ( var k of this._map.entries() ) { if ( arrayBufferEqual( k[ 0 ], keyId ) ) return k[ 1 ]; } + }; + + MediaKeyStatusMap.prototype._set = function _set( keyId, status ) { + this._map.set( new Uint8Array( keyId ), status ); + }; + + function arrayBufferEqual(buf1, buf2) + { + if (buf1.byteLength !== buf2.byteLength) return false; + var a1 = Array.from( new Int8Array(buf1) ), a2 = Array.from( new Int8Array(buf2) ); + return a1.every( function( x, i ) { return x === a2[i]; } ); + } + + // EventTarget + function EventTarget(){ + this.listeners = {}; + }; + + EventTarget.prototype.listeners = null; + + EventTarget.prototype.addEventListener = function(type, callback){ + if(!(type in this.listeners)) { + this.listeners[type] = []; + } + this.listeners[type].push(callback); + }; + + EventTarget.prototype.removeEventListener = function(type, callback){ + if(!(type in this.listeners)) { + return; + } + var stack = this.listeners[type]; + for(var i = 0, l = stack.length; i < l; i++){ + if(stack[i] === callback){ + stack.splice(i, 1); + return this.removeEventListener(type, callback); + } + } + }; + + EventTarget.prototype.dispatchEvent = function(event){ + if(!(event.type in this.listeners)) { + return; + } + var stack = this.listeners[event.type]; + event.target = this; + for(var i = 0, l = stack.length; i < l; i++) { + stack[i].call(this, event); + } + }; + } +})(); diff --git a/tests/wpt/web-platform-tests/encrypted-media/polyfill/edge-polyfill.js b/tests/wpt/web-platform-tests/encrypted-media/polyfill/edge-persistent-usage-record.js similarity index 100% rename from tests/wpt/web-platform-tests/encrypted-media/polyfill/edge-polyfill.js rename to tests/wpt/web-platform-tests/encrypted-media/polyfill/edge-persistent-usage-record.js diff --git a/tests/wpt/web-platform-tests/encrypted-media/polyfill/firefox-polyfill.js b/tests/wpt/web-platform-tests/encrypted-media/polyfill/firefox-polyfill.js index 0e42187971f..ce241af362a 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/polyfill/firefox-polyfill.js +++ b/tests/wpt/web-platform-tests/encrypted-media/polyfill/firefox-polyfill.js @@ -20,4 +20,4 @@ return _requestMediaKeySystemAccess( keysystem, supported_configurations ); } } -}()) \ No newline at end of file +}()); \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encrypted-media/polyfill/make-polyfill-tests.py b/tests/wpt/web-platform-tests/encrypted-media/polyfill/make-polyfill-tests.py index 7e7dc496e80..b4248569a92 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/polyfill/make-polyfill-tests.py +++ b/tests/wpt/web-platform-tests/encrypted-media/polyfill/make-polyfill-tests.py @@ -8,7 +8,8 @@ scripts = ''' - + + ''' def process_file( infile, outfile ) : diff --git a/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-destroy-persistent-license.html b/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-destroy-persistent-license.html index 21a05e87943..39798fe43ef 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-destroy-persistent-license.html +++ b/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-destroy-persistent-license.html @@ -24,44 +24,44 @@ + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/conditional-get.html b/tests/wpt/web-platform-tests/fetch/api/basic/conditional-get.html new file mode 100644 index 00000000000..b80e929fe6b --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/basic/conditional-get.html @@ -0,0 +1,51 @@ + + + + + Request ETag + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/error-after-response.html b/tests/wpt/web-platform-tests/fetch/api/basic/error-after-response.html new file mode 100644 index 00000000000..5701d6d7866 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/basic/error-after-response.html @@ -0,0 +1,34 @@ + + + + Fetch: network timeout after receiving the HTTP response headers + + + + + +
                                                                                        + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/integrity-sharedworker.html b/tests/wpt/web-platform-tests/fetch/api/basic/integrity-sharedworker.html new file mode 100644 index 00000000000..fa90a60ce98 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/basic/integrity-sharedworker.html @@ -0,0 +1,15 @@ + + + + + Fetch in sharedworker: integrity handling + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/request-headers.js b/tests/wpt/web-platform-tests/fetch/api/basic/request-headers.js index 4c78ff0dc1c..7b0eee489a7 100644 --- a/tests/wpt/web-platform-tests/fetch/api/basic/request-headers.js +++ b/tests/wpt/web-platform-tests/fetch/api/basic/request-headers.js @@ -15,6 +15,8 @@ function checkContentType(contentType, body) expectedContentType = null; else if (body instanceof Blob) expectedContentType = body.type ? body.type : null; + else if (body instanceof URLSearchParams) + expectedContentType = "application/x-www-form-urlencoded;charset=UTF-8"; assert_equals(contentType , expectedContentType, "Request should have header content-type: " + expectedContentType); } @@ -49,6 +51,7 @@ requestHeaders("Fetch with PUT with body", url, "PUT", "Request's body", locatio requestHeaders("Fetch with POST without body", url, "POST", null, location.origin, "0"); requestHeaders("Fetch with POST with text body", url, "POST", "Request's body", location.origin, "14"); requestHeaders("Fetch with POST with FormData body", url, "POST", function() { return new FormData(); }, location.origin); +requestHeaders("Fetch with POST with URLSearchParams body", url, "POST", function() { return new URLSearchParams("name=value"); }, location.origin, "10"); requestHeaders("Fetch with POST with Blob body", url, "POST", new Blob(["Test"]), location.origin, "4"); requestHeaders("Fetch with POST with ArrayBuffer body", url, "POST", new ArrayBuffer(4), location.origin, "4"); requestHeaders("Fetch with POST with Uint8Array body", url, "POST", new Uint8Array(4), location.origin, "4"); diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/request-upload-worker.html b/tests/wpt/web-platform-tests/fetch/api/basic/request-upload-worker.html new file mode 100644 index 00000000000..914de6f37f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/basic/request-upload-worker.html @@ -0,0 +1,14 @@ + + + + + Fetch in worker: Upload + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/request-upload.html b/tests/wpt/web-platform-tests/fetch/api/basic/request-upload.html new file mode 100644 index 00000000000..1b5b8e76bf5 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/basic/request-upload.html @@ -0,0 +1,13 @@ + + + + + Fetch: Uploading content + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/request-upload.js b/tests/wpt/web-platform-tests/fetch/api/basic/request-upload.js new file mode 100644 index 00000000000..b5d79c4c185 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/basic/request-upload.js @@ -0,0 +1,35 @@ +if (this.document === undefined) { + importScripts("/resources/testharness.js"); + importScripts("../resources/utils.js"); +} + +function testUpload(desc, url, method, body, expectedBody) { + var requestInit = {"method": method} + promise_test(function(test){ + if (typeof body === "function") + body = body(); + if (body) + requestInit["body"] = body; + return fetch(url, requestInit).then(function(resp) { + return resp.text().then((text)=> { + assert_equals(text, expectedBody); + }); + }); + }, desc); +} + +var url = RESOURCES_DIR + "echo-content.py" + +testUpload("Fetch with PUT with body", url, "PUT", "Request's body", "Request's body"); +testUpload("Fetch with POST with text body", url, "POST", "Request's body", "Request's body"); +testUpload("Fetch with POST with URLSearchParams body", url, "POST", function() { return new URLSearchParams("name=value"); }, "name=value"); +testUpload("Fetch with POST with Blob body", url, "POST", new Blob(["Test"]), "Test"); +testUpload("Fetch with POST with ArrayBuffer body", url, "POST", new ArrayBuffer(4), "\0\0\0\0"); +testUpload("Fetch with POST with Uint8Array body", url, "POST", new Uint8Array(4), "\0\0\0\0"); +testUpload("Fetch with POST with Int8Array body", url, "POST", new Int8Array(4), "\0\0\0\0"); +testUpload("Fetch with POST with Float32Array body", url, "POST", new Float32Array(1), "\0\0\0\0"); +testUpload("Fetch with POST with Float64Array body", url, "POST", new Float64Array(1), "\0\0\0\0\0\0\0\0"); +testUpload("Fetch with POST with DataView body", url, "POST", new DataView(new ArrayBuffer(8), 0, 4), "\0\0\0\0"); +testUpload("Fetch with POST with Blob body with mime type", url, "POST", new Blob(["Test"], { type: "text/maybe" }), "Test"); + +done(); diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/scheme-data.js b/tests/wpt/web-platform-tests/fetch/api/basic/scheme-data.js index e7904d04751..3e2504a0b87 100644 --- a/tests/wpt/web-platform-tests/fetch/api/basic/scheme-data.js +++ b/tests/wpt/web-platform-tests/fetch/api/basic/scheme-data.js @@ -3,10 +3,10 @@ if (this.document === undefined) { importScripts("../resources/utils.js"); } -function checkFetchResponse(url, data, mime, fetchMode) { +function checkFetchResponse(url, data, mime, fetchMode, method) { var cut = (url.length >= 40) ? "[...]" : ""; - desc = "Fetching " + url.substring(0, 40) + cut + " is OK"; - var init = { }; + desc = "Fetching " + (method ? "[" + method + "] " : "") + url.substring(0, 40) + cut + " is OK"; + var init = {"method": method || "GET"}; if (fetchMode) { init.mode = fetchMode; desc += " (" + fetchMode + ")"; @@ -31,6 +31,8 @@ checkFetchResponse("data:text/plain;base64,cmVzcG9uc2UncyBib2R5", "response's bo checkFetchResponse("data:image/png;base64,cmVzcG9uc2UncyBib2R5", "response's body", "image/png"); +checkFetchResponse("data:,response%27s%20body", "response's body", "text/plain;charset=US-ASCII", null, "POST"); +checkFetchResponse("data:,response%27s%20body", "response's body", "text/plain;charset=US-ASCII", null, "HEAD"); function checkKoUrl(url, method, desc) { var cut = (url.length >= 40) ? "[...]" : ""; @@ -41,7 +43,5 @@ function checkKoUrl(url, method, desc) { } checkKoUrl("data:notAdataUrl.com", "GET"); -checkKoUrl("data:,response%27s%20body", "POST"); -checkKoUrl("data:,response%27s%20body", "HEAD"); done(); diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/text-utf8.html b/tests/wpt/web-platform-tests/fetch/api/basic/text-utf8.html index 7499a474a85..e5c567b9c45 100644 --- a/tests/wpt/web-platform-tests/fetch/api/basic/text-utf8.html +++ b/tests/wpt/web-platform-tests/fetch/api/basic/text-utf8.html @@ -41,6 +41,19 @@ function testTextDecoding(body, expectedText, urlParameter, title) }); }); }, title + " with fetched data (UTF-16 charset)"); + + promise_test(function(test) { + return new Response(body).arrayBuffer().then(function(buffer) { + assert_array_equals(new Uint8Array(buffer), encode_utf8(body), "Response.arrayBuffer() should contain data encoded as UTF-8"); + }); + }, title + " (Response object)"); + + promise_test(function(test) { + return new Request("", {method: "POST", body: body}).arrayBuffer().then(function(buffer) { + assert_array_equals(new Uint8Array(buffer), encode_utf8(body), "Request.arrayBuffer() should contain data encoded as UTF-8"); + }); + }, title + " (Request object)"); + } var utf8WithBOM = "\xef\xbb\xbf\xe4\xb8\x89\xe6\x9d\x91\xe3\x81\x8b\xe3\x81\xaa\xe5\xad\x90"; diff --git a/tests/wpt/web-platform-tests/fetch/api/cors/cors-redirect.js b/tests/wpt/web-platform-tests/fetch/api/cors/cors-redirect.js index 75f67e7ee31..99f5a11f354 100644 --- a/tests/wpt/web-platform-tests/fetch/api/cors/cors-redirect.js +++ b/tests/wpt/web-platform-tests/fetch/api/cors/cors-redirect.js @@ -15,7 +15,7 @@ function corsRedirect(desc, redirectUrl, redirectLocation, redirectStatus, expec var requestInit = {"mode": "cors", "redirect": "follow"}; return promise_test(function(test) { - fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(resp) { + return fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(resp) { return fetch(url + urlParameters, requestInit).then(function(resp) { assert_equals(resp.status, 200, "Response's status is 200"); assert_equals(resp.headers.get("x-did-preflight"), "0", "No preflight request has been made"); diff --git a/tests/wpt/web-platform-tests/fetch/api/headers/headers-basic.html b/tests/wpt/web-platform-tests/fetch/api/headers/headers-basic.html index 90ba2b2a908..98d71acad9f 100644 --- a/tests/wpt/web-platform-tests/fetch/api/headers/headers-basic.html +++ b/tests/wpt/web-platform-tests/fetch/api/headers/headers-basic.html @@ -127,7 +127,7 @@ return value.toLowerCase(); }).sort(); - var iteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([].values())); + var iteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); function checkIteratorProperties(iterator) { var prototype = Object.getPrototypeOf(iterator); assert_equals(Object.getPrototypeOf(prototype), iteratorPrototype); diff --git a/tests/wpt/web-platform-tests/fetch/api/headers/headers-normalize.html b/tests/wpt/web-platform-tests/fetch/api/headers/headers-normalize.html index 384c4f4c26f..6dfcf9d8194 100644 --- a/tests/wpt/web-platform-tests/fetch/api/headers/headers-normalize.html +++ b/tests/wpt/web-platform-tests/fetch/api/headers/headers-normalize.html @@ -32,7 +32,7 @@ assert_equals(headers.get(name), headerDictWS[name].trim(), "name: " + name + " has value: " + headerDictWS[name].trim()); } - }, "Check append method whith not normalized values"); + }, "Check append method with not normalized values"); test(function() { var headers = new Headers(); @@ -41,7 +41,7 @@ assert_equals(headers.get(name), headerDictWS[name].trim(), "name: " + name + " has value: " + headerDictWS[name].trim()); } - }, "Check set method whith not normalized values"); + }, "Check set method with not normalized values"); diff --git a/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-count.js b/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-count.js index ffa521a5c0f..0103280f6e2 100644 --- a/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-count.js +++ b/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-count.js @@ -17,7 +17,7 @@ function redirectCount(desc, redirectUrl, redirectLocation, redirectStatus, maxC var requestInit = {"redirect": "follow"}; promise_test(function(test) { - fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(resp) { + return fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(resp) { assert_equals(resp.status, 200, "Clean stash response's status is 200"); if (!shouldPass) @@ -25,9 +25,10 @@ function redirectCount(desc, redirectUrl, redirectLocation, redirectStatus, maxC return fetch(url + urlParameters, requestInit).then(function(resp) { assert_equals(resp.status, 200, "Response's status is 200"); + return resp.text(); + }).then(function(body) { + assert_equals(body, maxCount.toString(), "Redirected " + maxCount + " times"); }); - }).then(function(body) { - assert_equals(body, maxCount.toString(), "Redirected " + maxCount + "times"); }); }, desc); } diff --git a/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/current/current.html b/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/current/current.html new file mode 100644 index 00000000000..82a48d40990 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/current/current.html @@ -0,0 +1,2 @@ + +Current page used as a test helper diff --git a/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/incumbent/incumbent.html b/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/incumbent/incumbent.html new file mode 100644 index 00000000000..8edc71cfb12 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/incumbent/incumbent.html @@ -0,0 +1,15 @@ + +Incumbent page used as a test helper + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/url-parsing.html b/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/url-parsing.html new file mode 100644 index 00000000000..f20298ad628 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/url-parsing.html @@ -0,0 +1,27 @@ + +Request constructor URL parsing, with multiple globals in play + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-cache-default-conditional.html b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-default-conditional.html new file mode 100644 index 00000000000..7b2a7bd31ae --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-default-conditional.html @@ -0,0 +1,180 @@ + + + + + Request cache - default with conditional requests + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-cache-default.html b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-default.html new file mode 100644 index 00000000000..c0e37b2d0c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-default.html @@ -0,0 +1,50 @@ + + + + + Request cache - default + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-cache-force-cache.html b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-force-cache.html new file mode 100644 index 00000000000..ed45726f55e --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-force-cache.html @@ -0,0 +1,78 @@ + + + + + Request cache - force-cache + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-cache-no-cache.html b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-no-cache.html new file mode 100644 index 00000000000..d30ed162696 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-no-cache.html @@ -0,0 +1,36 @@ + + + + + Request cache : no-cache + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-cache-no-store.html b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-no-store.html new file mode 100644 index 00000000000..396b6a65090 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-no-store.html @@ -0,0 +1,48 @@ + + + + + Request cache - no store + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-cache-only-if-cached.html b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-only-if-cached.html new file mode 100644 index 00000000000..adb31a397a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-only-if-cached.html @@ -0,0 +1,76 @@ + + + + + Request cache - only-if-cached + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-cache-reload.html b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-reload.html new file mode 100644 index 00000000000..45ff5832482 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-cache-reload.html @@ -0,0 +1,62 @@ + + + + + Request cache - reload + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-cache.html b/tests/wpt/web-platform-tests/fetch/api/request/request-cache.html deleted file mode 100644 index f2c442a5409..00000000000 --- a/tests/wpt/web-platform-tests/fetch/api/request/request-cache.html +++ /dev/null @@ -1,626 +0,0 @@ - - - - - Request cache - - - - - - - - - - - diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-cache.js b/tests/wpt/web-platform-tests/fetch/api/request/request-cache.js new file mode 100644 index 00000000000..deeb17d1b50 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-cache.js @@ -0,0 +1,223 @@ +/** + * Each test is run twice: once using etag/If-None-Match and once with + * date/If-Modified-Since. Each test run gets its own URL and randomized + * content and operates independently. + * + * The test steps are run with request_cache.length fetch requests issued + * and their immediate results sanity-checked. The cache.py server script + * stashes an entry containing any If-None-Match, If-Modified-Since, Pragma, + * and Cache-Control observed headers for each request it receives. When + * the test fetches have run, this state is retrieved from cache.py and the + * expected_* lists are checked, including their length. + * + * This means that if a request_* fetch is expected to hit the cache and not + * touch the network, then there will be no entry for it in the expect_* + * lists. AKA (request_cache.length - expected_validation_headers.length) + * should equal the number of cache hits that didn't touch the network. + * + * Test dictionary keys: + * - state: required string that determines whether the Expires response for + * the fetched document should be set in the future ("fresh") or past + * ("stale"). + * - vary: optional string to be passed to the server for it to quote back + * in a Vary header on the response to us. + * - cache_control: optional string to be passed to the server for it to + * quote back in a Cache-Control header on the response to us. + * - redirect: optional string "same-origin" or "cross-origin". If + * provided, the server will issue an absolute redirect to the script on + * the same or a different origin, as appropriate. The redirected + * location is the script with the redirect parameter removed, so the + * content/state/etc. will be as if you hadn't specified a redirect. + * - request_cache: required array of cache modes to use (via `cache`). + * - request_headers: optional array of explicit fetch `headers` arguments. + * If provided, the server will log an empty dictionary for each request + * instead of the request headers it would normally log. + * - response: optional array of specialized response handling. Right now, + * "error" array entries indicate a network error response is expected + * which will reject with a TypeError. + * - expected_validation_headers: required boolean array indicating whether + * the server should have seen an If-None-Match/If-Modified-Since header + * in the request. + * - expected_no_cache_headers: required boolean array indicating whether + * the server should have seen Pragma/Cache-control:no-cache headers in + * the request. + * - expected_max_age_headers: optional boolean array indicating whether + * the server should have seen a Cache-Control:max-age=0 header in the + * request. + */ + +var now = new Date(); + +function base_path() { + return location.pathname.replace(/\/[^\/]*$/, '/'); +} +function make_url(uuid, id, value, content, info) { + var dates = { + fresh: new Date(now.getFullYear() + 1, now.getMonth(), now.getDay()).toGMTString(), + stale: new Date(now.getFullYear() - 1, now.getMonth(), now.getDay()).toGMTString(), + }; + var vary = ""; + if ("vary" in info) { + vary = "&vary=" + info.vary; + } + var cache_control = ""; + if ("cache_control" in info) { + cache_control = "&cache_control=" + info.cache_control; + } + var redirect = ""; + + var ignore_request_headers = ""; + if ("request_headers" in info) { + // Ignore the request headers that we send since they may be synthesized by the test. + ignore_request_headers = "&ignore"; + } + var url_sans_redirect = "resources/cache.py?token=" + uuid + + "&content=" + content + + "&" + id + "=" + value + + "&expires=" + dates[info.state] + + vary + cache_control + ignore_request_headers; + // If there's a redirect, the target is the script without any redirect at + // either the same domain or a different domain. + if ("redirect" in info) { + var host_info = get_host_info(); + var origin; + switch (info.redirect) { + case "same-origin": + origin = host_info['HTTP_ORIGIN']; + break; + case "cross-origin": + origin = host_info['HTTP_REMOTE_ORIGIN']; + break; + } + var redirected_url = origin + base_path() + url_sans_redirect; + return url_sans_redirect + "&redirect=" + encodeURIComponent(redirected_url); + } else { + return url_sans_redirect; + } +} +function expected_status(type, identifier, init) { + if (type == "date" && + init.headers && + init.headers["If-Modified-Since"] == identifier) { + // The server will respond with a 304 in this case. + return [304, "Not Modified"]; + } + return [200, "OK"]; +} +function expected_response_text(type, identifier, init, content) { + if (type == "date" && + init.headers && + init.headers["If-Modified-Since"] == identifier) { + // The server will respond with a 304 in this case. + return ""; + } + return content; +} +function server_state(uuid) { + return fetch("resources/cache.py?querystate&token=" + uuid) + .then(function(response) { + return response.text(); + }).then(function(text) { + // null will be returned if the server never received any requests + // for the given uuid. Normalize that to an empty list consistent + // with our representation. + return JSON.parse(text) || []; + }); +} +function make_test(type, info) { + return function(test) { + var uuid = token(); + var identifier = (type == "tag" ? Math.random() : now.toGMTString()); + var content = Math.random().toString(); + var url = make_url(uuid, type, identifier, content, info); + var fetch_functions = []; + for (var i = 0; i < info.request_cache.length; ++i) { + fetch_functions.push(function(idx) { + var init = {cache: info.request_cache[idx]}; + if ("request_headers" in info) { + init.headers = info.request_headers[idx]; + } + if (init.cache === "only-if-cached") { + // only-if-cached requires we use same-origin mode. + init.mode = "same-origin"; + } + return fetch(url, init) + .then(function(response) { + if ("response" in info && info.response[idx] === "error") { + assert_true(false, "fetch should have been an error"); + return; + } + assert_array_equals([response.status, response.statusText], + expected_status(type, identifier, init)); + return response.text(); + }).then(function(text) { + assert_equals(text, expected_response_text(type, identifier, init, content)); + }, function(reason) { + if ("response" in info && info.response[idx] === "error") { + assert_throws(new TypeError(), function() { throw reason; }); + } else { + throw reason; + } + }); + }); + } + var i = 0; + function run_next_step() { + if (fetch_functions.length) { + return fetch_functions.shift()(i++) + .then(run_next_step); + } else { + return Promise.resolve(); + } + } + return run_next_step() + .then(function() { + // Now, query the server state + return server_state(uuid); + }).then(function(state) { + var expectedState = []; + info.expected_validation_headers.forEach(function (validate) { + if (validate) { + if (type == "tag") { + expectedState.push({"If-None-Match": '"' + identifier + '"'}); + } else { + expectedState.push({"If-Modified-Since": identifier}); + } + } else { + expectedState.push({}); + } + }); + for (var i = 0; i < info.expected_no_cache_headers.length; ++i) { + if (info.expected_no_cache_headers[i]) { + expectedState[i]["Pragma"] = "no-cache"; + expectedState[i]["Cache-Control"] = "no-cache"; + } + } + if ("expected_max_age_headers" in info) { + for (var i = 0; i < info.expected_max_age_headers.length; ++i) { + if (info.expected_max_age_headers[i]) { + expectedState[i]["Cache-Control"] = "max-age=0"; + } + } + } + assert_equals(state.length, expectedState.length); + for (var i = 0; i < state.length; ++i) { + for (var header in state[i]) { + assert_equals(state[i][header], expectedState[i][header]); + delete expectedState[i][header]; + } + for (var header in expectedState[i]) { + assert_false(header in state[i]); + } + } + }); + }; +} + +function run_tests(tests) +{ + tests.forEach(function(info) { + promise_test(make_test("tag", info), info.name + " with Etag and " + info.state + " response"); + promise_test(make_test("date", info), info.name + " with date and " + info.state + " response"); + }); +} 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 a2bb3e2a9bd..c3ca8383a95 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 @@ -98,6 +98,10 @@ checkRequestWithEmptyBody("text", "", false); checkRequestWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), true); checkRequestWithEmptyBody("text", "", true); + checkRequestWithEmptyBody("URLSearchParams", new URLSearchParams(""), true); + // FIXME: This test assumes that the empty string be returned but it is not clear whether that is right. See https://github.com/w3c/web-platform-tests/pull/3950. + checkRequestWithEmptyBody("FormData", new FormData(), true); + checkRequestWithEmptyBody("ArrayBuffer", new ArrayBuffer(), true); diff --git a/tests/wpt/web-platform-tests/fetch/api/resources/bad-chunk-encoding.py b/tests/wpt/web-platform-tests/fetch/api/resources/bad-chunk-encoding.py new file mode 100644 index 00000000000..3135403863b --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/resources/bad-chunk-encoding.py @@ -0,0 +1,13 @@ +import time + +def main(request, response): + delay = float(request.GET.first("ms", 1000)) / 1E3 + count = int(request.GET.first("count", 50)) + time.sleep(delay) + response.headers.set("Transfer-Encoding", "chunked") + response.write_status_headers() + time.sleep(delay); + for i in xrange(count): + response.writer.write_content("a\r\nTEST_CHUNK\r\n") + time.sleep(delay) + response.writer.write_content("garbage") diff --git a/tests/wpt/web-platform-tests/fetch/api/resources/cache.py b/tests/wpt/web-platform-tests/fetch/api/resources/cache.py new file mode 100644 index 00000000000..899638716a1 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/resources/cache.py @@ -0,0 +1,18 @@ +ETAG = '"123abc"' +CONTENT_TYPE = "text/plain" +CONTENT = "lorem ipsum dolor sit amet" + + +def main(request, response): + # let caching kick in if possible (conditional GET) + etag = request.headers.get("If-None-Match", None) + if etag == ETAG: + response.headers.set("X-HTTP-STATUS", 304) + response.status = (304, "Not Modified") + return "" + + # cache miss, so respond with the actual content + response.status = (200, "OK") + response.headers.set("ETag", ETAG) + response.headers.set("Content-Type", CONTENT_TYPE) + return CONTENT diff --git a/tests/wpt/web-platform-tests/fetch/api/resources/echo-content.py b/tests/wpt/web-platform-tests/fetch/api/resources/echo-content.py new file mode 100644 index 00000000000..5c39e838181 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/resources/echo-content.py @@ -0,0 +1,9 @@ +def main(request, response): + + headers = [("X-Request-Method", request.method), + ("X-Request-Content-Length", request.headers.get("Content-Length", "NO")), + ("X-Request-Content-Type", request.headers.get("Content-Type", "NO"))] + + content = request.body + + return headers, content diff --git a/tests/wpt/web-platform-tests/fetch/api/resources/utils.js b/tests/wpt/web-platform-tests/fetch/api/resources/utils.js index 86542c7bc8f..f290c22ee7f 100644 --- a/tests/wpt/web-platform-tests/fetch/api/resources/utils.js +++ b/tests/wpt/web-platform-tests/fetch/api/resources/utils.js @@ -51,6 +51,13 @@ function stringToArray(str) { return array; } +function encode_utf8(str) +{ + if (self.TextEncoder) + return (new TextEncoder).encode(str); + return stringToArray(unescape(encodeURIComponent(str))); +} + function validateBufferFromString(buffer, expectedValue, message) { return assert_array_equals(new Uint8Array(buffer !== undefined ? buffer : []), stringToArray(expectedValue), message); diff --git a/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/current/current.html b/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/current/current.html new file mode 100644 index 00000000000..82a48d40990 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/current/current.html @@ -0,0 +1,2 @@ + +Current page used as a test helper diff --git a/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/incumbent/incumbent.html b/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/incumbent/incumbent.html new file mode 100644 index 00000000000..4d1ee085440 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/incumbent/incumbent.html @@ -0,0 +1,17 @@ + +Incumbent page used as a test helper + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/relevant/relevant.html b/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/relevant/relevant.html new file mode 100644 index 00000000000..44f42eda493 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/relevant/relevant.html @@ -0,0 +1,2 @@ + +Relevant page used as a test helper diff --git a/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/url-parsing.html b/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/url-parsing.html new file mode 100644 index 00000000000..73bf9cfd0ad --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/response/multi-globals/url-parsing.html @@ -0,0 +1,27 @@ + +Response.redirect URL parsing, with multiple globals in play + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/fetch/api/response/response-clone.html b/tests/wpt/web-platform-tests/fetch/api/response/response-clone.html index 1efb4da5eef..2eeb78c4c24 100644 --- a/tests/wpt/web-platform-tests/fetch/api/response/response-clone.html +++ b/tests/wpt/web-platform-tests/fetch/api/response/response-clone.html @@ -93,6 +93,44 @@ }); }, 'Cancelling stream should not affect cloned one'); +function testReadableStreamClone(initialBuffer, bufferType) +{ + promise_test(function(test) { + var response = new Response(new ReadableStream({start : function(controller) { + controller.enqueue(initialBuffer); + controller.close(); + }})); + + var clone = response.clone(); + var stream1 = response.body; + var stream2 = clone.body; + + var buffer; + return stream1.getReader().read().then(function(data) { + assert_false(data.done); + assert_true(data.value === initialBuffer, "Buffer of being-cloned response stream is the same as the original buffer"); + return stream2.getReader().read(); + }).then(function(data) { + assert_false(data.done); + assert_array_equals(data.value, initialBuffer, "Cloned buffer chunks have the same content"); + assert_equals(Object.getPrototypeOf(data.value), Object.getPrototypeOf(initialBuffer), "Cloned buffers have the same type"); + assert_true(data.value !== initialBuffer, "Buffer of cloned response stream is a clone of the original buffer"); + }); + }, "Check response clone use structureClone for teed ReadableStreams (" + bufferType + "chunk)"); +} + +var arrayBuffer = new ArrayBuffer(16); +testReadableStreamClone(new Int8Array(arrayBuffer, 1), "Int8Array"); +testReadableStreamClone(new Int16Array(arrayBuffer, 2, 2), "Int16Array"); +testReadableStreamClone(new Int32Array(arrayBuffer), "Int32Array"); +testReadableStreamClone(arrayBuffer, "ArrayBuffer"); +testReadableStreamClone(new Uint8Array(arrayBuffer), "Uint8Array"); +testReadableStreamClone(new Uint8ClampedArray(arrayBuffer), "Uint8ClampedArray"); +testReadableStreamClone(new Uint16Array(arrayBuffer, 2), "Uint16Array"); +testReadableStreamClone(new Uint32Array(arrayBuffer), "Uint32Array"); +testReadableStreamClone(new Float32Array(arrayBuffer), "Float32Array"); +testReadableStreamClone(new Float64Array(arrayBuffer), "Float64Array"); +testReadableStreamClone(new DataView(arrayBuffer, 2, 8), "DataView"); diff --git a/tests/wpt/web-platform-tests/fetch/api/response/response-consume-empty.html b/tests/wpt/web-platform-tests/fetch/api/response/response-consume-empty.html index 78838469933..faa443b5e30 100644 --- a/tests/wpt/web-platform-tests/fetch/api/response/response-consume-empty.html +++ b/tests/wpt/web-platform-tests/fetch/api/response/response-consume-empty.html @@ -93,11 +93,13 @@ }, "Consume empty " + bodyType + " response body as " + (asText ? "text" : "arrayBuffer")); } - // FIXME: Add BufferSource, FormData and URLSearchParams. checkResponseWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), false); checkResponseWithEmptyBody("text", "", false); checkResponseWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), true); checkResponseWithEmptyBody("text", "", true); + checkResponseWithEmptyBody("URLSearchParams", new URLSearchParams(""), true); + checkResponseWithEmptyBody("FormData", new FormData(), true); + checkResponseWithEmptyBody("ArrayBuffer", new ArrayBuffer(), true); diff --git a/tests/wpt/web-platform-tests/fetch/api/response/response-consume-stream.html b/tests/wpt/web-platform-tests/fetch/api/response/response-consume-stream.html index f96192fa980..54d55fcb45f 100644 --- a/tests/wpt/web-platform-tests/fetch/api/response/response-consume-stream.html +++ b/tests/wpt/web-platform-tests/fetch/api/response/response-consume-stream.html @@ -28,6 +28,8 @@ var formData = new FormData(); formData.append("name", "value"); var textData = JSON.stringify("This is response's body"); var blob = new Blob([textData], { "type" : "text/plain" }); +var urlSearchParamsData = "name=value"; +var urlSearchParams = new URLSearchParams(urlSearchParamsData); promise_test(function(test) { var response = new Response(blob); @@ -39,6 +41,11 @@ promise_test(function(test) { return validateStreamFromString(response.body.getReader(), textData); }, "Read text response's body as readableStream"); +promise_test(function(test) { + var response = new Response(urlSearchParams); + return validateStreamFromString(response.body.getReader(), urlSearchParamsData); +}, "Read URLSearchParams response's body as readableStream"); + promise_test(function(test) { var arrayBuffer = new ArrayBuffer(textData.length); var int8Array = new Int8Array(arrayBuffer); diff --git a/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html b/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html index 56e234248c3..dc7239424db 100644 --- a/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html +++ b/tests/wpt/web-platform-tests/fetch/api/response/response-consume.html @@ -12,17 +12,49 @@ diff --git a/tests/wpt/web-platform-tests/fonts/math/axisheight5000-verticalarrow14000.woff b/tests/wpt/web-platform-tests/fonts/math/axisheight5000-verticalarrow14000.woff new file mode 100644 index 0000000000000000000000000000000000000000..9f5d59ae6a7fbf221fd14126645f1cbc7c25d286 GIT binary patch literal 1336 zcmZWpeN>ZG7{6m5jPVi!=X?hU6O@pgZsQ}$j7@Z*47PA&lFB>WCPEO(#3>Wmhk#=O z8|i_Zh66+sQ;-xbbL!H8f*cf)!V?-tzzUUl_$Y`j+3BC|xxaIt=XZY3^W1x$^W0q` zfj}gYhyWl)0e1kGn+@P*&;PF&fq)4BUJL*(6vDbLWF$@?ki-K(P(!s3gkN3;|3N%o z5(~LX=pTeS?Z+Pm2Z`1#<3f8Qd4!1UD_rQ!3eYv$c|*%z@hO|eIG0E6eSYk~w)Okz zlmznRj;GN*pyj$dn(*^{x`~mjI%ugrQ09o}J74eE*=$w}kiM=+8gOrlt}u5m8y=&6 z7pkbdE=b5O8Fxgy*L1|OQ`q~-07=zVrq*mr#7H_;DQ$HP&&{(mlB*p0jn7MsZPr_( z7aeuK9N(YDNF2s`?7o=d!Uv~Ix}3QW9nprH}ilnZx(384c`Q|zw@`A2SSywvlCvV6YYZ3)du{uPh&Q7Ce zeck9NyLf5qJ2#tWQvO<8YA=4pRqgfg$vOWrXG@7?{Ia%e^6WvgpfquDS9;&z7r%$v zx4(R}`$dIxRsGnxwlg&spRROdB@I+j{v_ZhYnikC!!Shw#vlnu)NI@+dQD9yc`(~a zwG2ijN~5ixn(-Xa4bON!U(N5vFIXZ-~Z;wNJ<2EGrfU}L{G?3lpsSl5ap;{hUV$fDBd0wLyy`SwWy3? zLCuV0o8U0Lc3{!mdivIn>U^~1n%XJzeS`Pll(sFfJct% z>5WAEkW^kWF*Zyaj}c-d$0$@Mo6L!2J02_NuBs#Je02f%IpvFhV?PEewnx8WT9XxhXI(Fb4o-&M`1BO8xdTQE_t%@dfGy ziZe(7u}pQ`#$CRSAs#?68z4U)s4jwuP5YsLu)Yz94HN^3CkWjT;7ZO-EC8AZQ*1LT9$a0SF5^woEh1fg*%uS1eMwMF)%>Y)*U=>U;?w6 zW5Yy7Q3FN>dmScsplJ+1>zN>G66+3HG&W9cY@FGCv$?S`k+mhQC}BgI3G*eMHFJ0j z4xDJqYg({kZI%ANhT|IieJm_kI%%{~i{)xt+BqS-$*7 z$(=)!zdzW~+j_tFPUDC9vgJGf_i1vyDNGXUH7yDec%hiOmPt@Wq-}|%(7Y#e(qnuB zibQ%YmBmjkKd|M-{GPbyQ(r7?>{uezRT=d3^UN7jQYXGza*6eD*cY!Awy&Mm^*x#N zbMt#Gw=e75PrP8>X0!6IX{mIUQFLRGVZ=<8wUgUV22QUGyKXQksO{N?v#Vm3&yEe7 z)@A);_x1B)8~28#raO0^*|y1l-AB>Cg( zFvBojC)LBh6!rgRd1vu%?cKhiDmD66jQr^{Q+!mHg#6w0gIoL$YgE?BPEcGXB&0PY zNV2)H32b2eByq4tjEz;{EK`fZzC-{23w-+Tyuypk&5TV#SY1KI{t6>QWFp&Ta2iNs zX#Rhe$IYQ@A|o#YgGMOhPH?=ZBqSy#q@-N&()RMvJ9*~(W#2U?bk2F4^*OI$Xl`I| zL09Xnr|!uUKIhJP>*|@YbQu^J85$U6{C|-CL-Fhn=eC#aI-mJDr^(43%Tq|0npkm8 z|L_3?g~K1b0@@m#+X6j08YP!F_8y$S@Q~&H1)DfhwlukITGlkNapBCS{3Oq|_5DrB zg@tuRX-X$pU3Rxrs53JvGYcy(o>cVxp8WD}M(^(aE1e3ctEmt=8&cV=%B|afRoD z2T2tNRvZ^NkZ`!FosnmWvP1{7`hqQLf?3NA4GfM6X6gwT>_3pl)+{KZy!oQRVh!fQ z_g6b?<7H-VmY5L6c&R5rSmL0-)a6V^Yh6)Em P(`Ftn2Id#QTnoeiE}h6- literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/fraction-denominatordisplaystylegapmin5000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/fraction-denominatordisplaystylegapmin5000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..e4d381edaf259a15b24c55a0100ce9cd05444967 GIT binary patch literal 1264 zcmXT-cXRU(3GruOVEMqn%>V>kHy9W}G$wF%b5meoV6FkmJYryA4DJwd|L^7&;tSN9 z02Gq~Vwvi=jk|muLp*?DAayxFbrDQ#DuVvO`bHo&P|OC16NGLEa3$v^768rD0rJg( za!w4q%*QfP6H|a}4xpG85Sy`QoYv0(3IfGUfP9c0DlDPQuQPH>Du8yp0P;a?zzT7X-L}@Bjbx-{s9J z4Cy}_d5%AqncZT%=7ae|&S^Kdw-n#;Z);f|@$`0!{|C$e^FC;XUDi)YyX=2v-?4Rq z=@ti6Z4TPaR-N-W{hReeO}@$Yobw%?oadbXXu|(Px;j-nA%-h1DmXk~5>4yj_RxqC z%ndABmUzctcjNO7DKjI?kH{8e|2{Z#7w4lzvpQQt!jq!g(sm1)-@AQk%E5?B-(ps$ zy!Vc8lr>p=R9QPVWXqE`Gb*dHBPBbS_Uq0x{cKmL|FS@a^{0PfSxM%Ke+MFEYgZjP zcyH>}jDWkk7nit>NlF?Gk~bHTA5E1x}%ufJmdm)+4;8kk_f@t%;7){r2{=Ef$l zf$@{X!5T3(R)w=nEeiV%{r@lU>A&*|FE%$bHVI*M1r_@%j0};9Y?s0M(iocmpXG6L z=$gpL%fO%!%D5A3UP?k@VnRyF7GG^IAH9=j&R_QRJbU{5*)!fcC-uEf>gb*DT%)76 z@{FgizYas!EGY?z7h+SNEt!^*qL%)AshGGlldFWpObH3eE%hIa|4c~xqj>m>^R%Ds zEZ+S5$>stZP8n!@IBj6Sal$~0`;U5w;yzfIr7$#|R(kbQ;aAtH z)mlAl3At`Iq3o_ml~abU%9fddJLtJ)h)3YfgIg%*}cF*7I2d~`G3-*DlO?20r4 z2}eUCXF(mNw7%>A&3J?YWk$&Wf literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/fraction-denominatordisplaystyleshiftdown6000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/fraction-denominatordisplaystyleshiftdown6000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..3d90e64302a7d0d9708329ef41ae62d441c53e04 GIT binary patch literal 1276 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 XXIncCWvFm46ujnf1Lij77Z3~ppUlZV literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/fraction-denominatorshiftdown3000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/fraction-denominatorshiftdown3000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..0b7efbaf70647351f336fa5bc416fed4dc856593 GIT binary patch literal 1236 zcmZWodrVVT96q-#SI`2LXJJSx7{^M50$tHL9vxCCl(m!sVludwUZAq_P#BPbKnq$# zFtC-EBP99!Wj=B-}YMWdI&%!UI_CLG34kDNMewMXQo0;1EGTc z?@E6&QFF3$^WfZVpA!Vbd>#Z8w#YC7!@x5K?}eKyZ@I}Xx0{neIK8{0x6@->tkdf# zSHT>L8ezk~-V(h|S4%#~E2~2s*$4<>k&eS6fU%_a9=t?q+B~$Eep@sBGO}nT;#mf$q?h3=)sfGs^s_)j)n0h53eWMl<@^ZujqI#!ZI5rg%0g zZI~AwUxSxafNFxMJO!tMIxjDlxA`fxML} zU?`~3&H<|@LF(I9@vWYZ)&0491RGDaH6!yAxw`~^@>_XJs{8_<&KKYab9BFZdH0;9 zul~n5r`6@5+z(j2tB-l^LD=q^pwBhocn!&k8br*0>!u3Bj{OuG*`Rvfl5bBxdHIfJ z-20hb)8f1DB}@G`k|xr_eE5pG=@h?ods$waq>H0{w6EP^%h6e8A&|(9Umi;}J(qQ~ zdSplC*LWt{Ew(55CE89(G+za~aEbbE@26*L6HdiDS0~&s9gS;?PiPZszgUnp=NM-f zd+KkAr`j|FmSZ#7pKJ=q0fBZ)M7XoZ?;lgWtnW4bZFWhDjS>rA=B=#9>V%E?ZCy8s zdq}$M^+mr}O+<=*_RWQs^`aA!hTb#dF1gJWKVM1{o){h$O9r%b)A6HAv&AF@vIcL~ z_CLn3v@*;E<)gG7WRs06js1p=u=5LQ)|#zVgS-1c76Yrti9Z@~ zj8=<3r)lt+TAV{m!O&A;StT)l+UVQC8WxUv#XO9dkh1;RoY>`P*3j}_F*z(BqsSt?MP@bae+Qpu|)TeGI5fxe>Btf`SZ2`?Le74?T*_r5#5IM)!;KDoJ3 z@~ATJV*XkV0@k+Dul;vc1W=85EN(L1RCRVSt5LuXri8z*!FM&2QmE^=Pt#%dzE&$a zIi$!h?XKjzlF2f+tW&S{bripFo-|-=RSLm%O>;=aHi{evZ{af-jXcH-y}VaJ@}yr~ pm6kQBd6hgB&!&Bi!3-~BN_DK@9xW|~UPD1HHBwKK=i#e{_y;_W)v5ph literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/fraction-numeratordisplaystylegapmin8000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/fraction-numeratordisplaystylegapmin8000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..2e910bbf42147fa041e79f80a12e3bd1b375ecff GIT binary patch literal 1256 zcmXT-cXRU(3GruOV0pp7%>V>kTNoHYG$wF%b5meoU@id4JY-;C^xe7Txrv)wh%ZoY z2vAH4h-IqdHtzCu4DkSpfz;&!)kQF|>7Vou);9vNfnqj5oFH^VfGasS5vYb)0mwH8 z$~iIcG9SxGO-uo@Ie=nXKy1dIaaunEC^xw}=6;!v8h~~)yjfu=D4t!IL$Nvu0)(bzb(v2kYm&F03&MAnwHqJ#};Cd`+3*398C zIB=qYPf9{WLS#lfL!_ldR)Y~w4?{*R8_@i#L56;Z4Mb`)xrDfr(l@qDNbpD%=L|4! zxx%-WUYik`?S(T{R{m#%kwH7_C@I(=`GGpEXt3%G%rFs{f(a9ASWzwd=W?_415^`6qriuBzN&BOiA9l$FhmmYXcn zzJE@d=4)%mOjzr5W?id6zO;RQ?#iPjN=JSE{Be|6qi3YLdEw!IiPmeIOvImdO$cah zza6I-cFXFSSkS7I1^51!AIsk$CJan%ptw#*NNY%tWOHK^*ueNn;$V#!8>_-urWS>L zhyMQ;`1Id-g%_Kf8JmQ#x`K-R6-I{0M7GOdeQ6BM|IhNcIdn~A!ov2-|M7~-U-h&I(jS5c>4P5oH%=Cvw?xZ1zoMP zp1LPb_?$cEt*d9o(q&*^WN2WN@&7^k55==ToZDWu>wMX>~P@3fg>kYEV;Ay`|*`~d#bAt`Iq3 zK6{W19@!Cf+EVBFB&Y?U_N|* zwZk@EX7*-@31N(vdJ=>s4hl?N&UD0v$B9RXr^sS1OQ0rG$U>&HkBw(rI}T;2a4=XY NbAJQ6h4}>p0{~@*;7I@g literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/fraction-numeratordisplaystyleshiftup2000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/fraction-numeratordisplaystyleshiftup2000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..920c81eb1bf7bf82a613c4aa27972a09765f2ee5 GIT binary patch literal 1260 zcmZWoYfw{H5I%Wuc?2X7!0=FlV39z=1u2T-RFN8aKT4QFi{)MjF^Y*aD1uTXgn|Z! zf(3<=QF&CsQVJAi+6p$o06|Hh1;#ko8Z|x;PzsC)Skr@c`lmbd&Ds6-JG*D*>>iKd zaALUJ7y!sKfC8Xdr~qN@{J({8I1B(tM`7jx0EE~&%jqHxhZ_a&CPK~$!sX;=9lt~c zb3-AwrV~P4A`zh{#l-viulbPM34z(_s1|8LJQLRQfblk%+XJjf1A=s%2YoZhF(Cp? z1-EmKy9C;eX!!Yn*!!8TgfrZJubUi==R);ZDb=yo+JASsA`sKDQ{3<$nJVEu`+QPB@km;RJ*3Im)~ zHa)dA`mTsq1-eC4A+IkwKvldd$^W!Xh5OEcJtP)2Idn`Psp zC)Qx!s}l0+3r~ki+VGrHZqd$VT2TM&)8hs|{#3ewLa(%um!;>?|+ZVx_VKImd=aiD3l#R+CP zMa$OfoH(`EHUlejqO14)x|^k6i#Lf|w5raz39%bno)I3OGlm}4bXz>W{v>^7!}EIS zA7lKEhLO0BqatGFU*9gv9LExsTN|xbiqH8qQu1A2Z+@N_Z(7Y9z=Wk@YK8FHNg?H) zuKIJ~{zdIlcXoBsYMbWUs@mB@v)=K43cIsp4teE$UzydFxG&;eJ-auw32%ytPi9iG zbgSL=(T?Bm(XPh#_1sy>P22W~A>K>de=3>sUm&V3@IX&s> zF6uhw!*1e^;kWLI>y8|qq*t!}H-_;GFh_)gP}>RfbY-3cV#3f6ix}7Yj7I9bF{C*h z;RGUdnkU0!*Ej(r;mFwAIpG7TQDe#3EvqD00k9>3@blZ*;9)q9@pxTf-r749?S8$RU2R)@9vuv>=1SXyBJbQn-QJ@UxaurDUl~^z9I?3?wucB;{dQ UZVjlDIT6$^Sc>3AlAgZ9KSn#~Y5)KL literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/fraction-numeratorgapmin9000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/fraction-numeratorgapmin9000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..1b5d60bb14457cf9ee639f7d248ae57268ec0b44 GIT binary patch literal 1216 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 RAr^+*XI&6 zGJvY3fLNwF`(=%NtR6dO&Q(9Vb?q0Tcv^SpfMUJ5)GqnO|q*mQ(=U4ARR3!t56q z7;+OUfaWoV0QqcS%o4zmmzbLh6q^IYX+XR7a{P43D#$M`0kU0yYQ%t8;eQ*0amAeE zgp`B?hNNYFn-5gf&0f!Q=Zt=X5>NOR`Av$K&*-;UH;Aw^3wN+Hu!wL1O^2$lJ9yy0 z1ZFkI95=R*11t;y3z&hvWMBvYdLN=DvF@NnW8>7u#+mImn;RPwSzFSI5;mlnFkj+X zGl$3E0LKwNo)Zfi9UWiWf96)uX7}V}(O^(iW|)-2?pZNs@1%`chYbYU>McDNdcVBK zCl%zu#%?)5U{kAufokOD*+-5v9WmM_zP`3`pVRyW{uiddyw$GpS5;fqTT@l+TCLUH zxqjtL19ewE)MayNUO+}!D@ zjS@?rGZ^owe)quhj7_;C+&nR??7@sF?N>w|#)Tg>%=DQ!%`^AZE*U zX$=XIY;J4<1&p604%UdV@hY5UTOuhrLqcTBzyJUFpESSx&%fTt`6@G`vNUs3Gqb=X z`B%UcxQt5>lorw$n*X2WadYUJ$jHmUpb^Tr6KrluLSkYoi;GwIAQQda7v=Ui)t8IdV1dW$nxm) z^mv_G_U>+V{hV8;ca*h?2N{#10TL?O~^fb;GhEAlF$YdB$Oj$g!JVv literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/limits-lowerlimitbaselinedropmin3000.woff b/tests/wpt/web-platform-tests/fonts/math/limits-lowerlimitbaselinedropmin3000.woff new file mode 100644 index 0000000000000000000000000000000000000000..76395db141ced4560ed7164c6f09bf50fe771d3d GIT binary patch literal 1256 zcmXT-cXRU(3GruOV0pp7%>V?P84Qdd8WT9XxhXI(FvkF8J~J>dT1(h3y5r^+;tSLp z02Gr1Vwvh3IX_>=5D%bO4v?P*R2RX-CeiI5tZxKj1H~MGI6+v#@ON@fkC0b(=mIP29JKtZ6G36L)Z#3~%N%&#+YODceN+yU~rK$!gk z14C|N1<*W3kXzWmm^pwUFEKY2C^iF#(}8v!P+dH=q9DJx1ju#)su2TXh5u~~#uamt z6H*cq7#_)gJU{vI&)j`R1;+asx(s42{+rwH17vm=8yGZJFr=1ozlN%G&(wZPWZ_>VQTXdHYSmV34#n|ZEV36bM{U;o5f@(aQuIy{etP2#082r zENGwV;&^19i$LbrSG8A<^1jKN=IgNMo8T|5z27;xYNy#b++R3Z;#RcgmK}*R@B5^w zO`gfH;~2NZx%;|djgq@6cx4tIwrZ4~v2ptW-;%}c2Xyba_&458`LE!AZI9C1d+wHL z5sUa_61%=1;I-Mb`+%>Gve*t*xlo{z`eQOuqJC3cA2#ra$=JTRpl;dHaAZbCZ%dic zB<)LS23t%jHS@!ds2W_qx-zW&%%^+n&bK@D{j}P6v+8L2u@`f_)?9irZF0Ti{-rX8 znNsdcO8#xH^^WAdIcKTL&gHS;sSm#jhCUT53f0Jd6eEB6)@L)r%yp+q;$N={cgFi zta#HkMm+vMQzax=QY7LyPZ@NaG+4!DxS?T7f#C~d7UL=6)1N(4o0jtIx#e^55V6!{ z=~FZ^RI;@sBqe5P{s2n+_@!YXCjMMKy-8H?vC^U#UY4Gow>)Qhdc008yIWm9=ho>R z@;bmEZlFa^KIlUu5t1_s*y1BG&Tq7xa4^&fGc6^y$ieDYJd?rb>4g z-L;9?pViRO{yd!5e8MAE2LIFfEzs~xVQ4z7^y;U=udZ+T7Q77B|JVY7IRlz+9wb#9 zSaDq7K*Hgw_C}KeCa>&8T*dDXEGm;?W=@t7Op|iF(v&G79V<6Cx1~$cRZ`+#9P6fB z2@8oM4O_S-q_M0{VQ~(b$0hLDfWy$k;KaicQJ1A00j*p!jl literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/limits-lowerlimitgapmin11000.woff b/tests/wpt/web-platform-tests/fonts/math/limits-lowerlimitgapmin11000.woff new file mode 100644 index 0000000000000000000000000000000000000000..df67de52bd034d880b87b06a159396239c3e33d9 GIT binary patch literal 1228 zcmXT-cXRU(3GruOU^&CU%>V=(Hy9W}G$wF%b5meoVD=5TF{C03bgPs4jwu&HS`~u)Yz94HR<#;sjv{!{5odi3JP{OmBdE zXP}&yi`c{G8L5dWKsEX8;9(Vjw%DfLMjYmicu?Zb=2ujsrkG7YMUo zU|`5itN@zF2(p(AjF|%%@)C1Xfnqa&I2h!1*2TeV3-XIgfNTSx8ZjVN_}|80Trnp( zAtfP!;n8u!w=+NfF^iYnF*BaQRbpMn|8wrkX2v%hwUn6QV8al&n!6IJw(j780~46l z9CO^*LJqJn1T0_%`jCMEXgxCn14vC`-9d}S#;J{sGuv-AH#R1+wxks$Y)CU!4-41PTZSy*g)X;|Drh#np1S{ z+GJ>|u(F?YF4)}a&^Bq!&0fQ82R8QTa7cQ^uPAx1{H4z{8`(4be4Kat|79tN8>s@}GC^X+H9qBk+UEJe@sCZ!fxjJu~4@ z1z$mb`FUoEvbUBlr|#MCA8g+ET<}sttEfqojApk}CzqIv@RJ#nd=wN6)o&>&d%G4n z-x89|^^H4qSNjoL#LI6PA(4@GCzsm@7M_Hi$M;&dW1{_0Y#pG>JLbIrhUl8}(rkRZwC#wJj}_(|emjTjrR!dbQ@ zl9DqdM5eI(|IhyE;FtgH<@QcjnHiO(nVXuK1t!TW9B|QXW_VY?DGN3ujiLGfSspis zu8EAi3=A5fj61>cosy84n2?e(nX{G)jKi*w)4b{21b{^auS>u1HAt})_C|CuTw!IC1O$9c-2OY;X%;>Rxy3o-HM>gi3Q z4~seD!kHMAldYMJl^0Lil==Oh{PJ%`@9zFCJ{|XLZ_<91x>tWEC*1!1y#Gaiu>JNw zmPgMWXD_i<7BDW~++g!@eOvGQ@LrGY8Rq=g*GnlpdiXQ+Fz=EIMhT^qOi0>JNJwF5 zI<55Tr^2tUZ}}Fy4A%eH0)eR?nl~OKRUBAxT;M>$;i~pVlL98MY^9bhbq@lpdm9@K z`#6ky6|xSR^z`cWpEGkh+OvplzlK=n! literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/limits-upperlimitbaselinerisemin5000.woff b/tests/wpt/web-platform-tests/fonts/math/limits-upperlimitbaselinerisemin5000.woff new file mode 100644 index 0000000000000000000000000000000000000000..f5d7b9c84e6226776879c5c6ec9af5f78572e396 GIT binary patch literal 1256 zcmZWoe=yr;7=QDlA@xNJktmZYUD{O}qI6A*NMx!bx(4gj>iez4&uScQQjA1;iH2Gz zigPQ@`Bisp>u$6&F=mvUw%2L3aieP`>rQo8{V26J=D)pnpL?F?^L*atd4JrKEfffZ zB9RaPq6t_5xX4KWXSV-eJb{1#03jA;76HI<*q#Fe0)Z$T?u~>T9l|B|!ut{7Tu~_G zF2MLA)P060G0qB4AM!E#kPCu9?P=a`Wnc-f{CGT3AqChepcr= zHQLe(BjiP$#ggy<|zy839 zlF?PKuH;7!e$A&O|MT+8%4w28Up}aO6c8NOupGc`7=K`4;$-=$-aHO2-c_}p;Irsi zLzbuhD4$uMI`3H1Q2c0^e6+*9M?udmHt_u~6&ZdGUvTINe`l)^>p%SV6)#$koP0b? zZkByz(CxWXY#8*x%Fa%oaD#gQK&*|7NAxPORHn&C5oG4R<2Qg#=Q@T|+%{&PhtJ1Ut zkB}-x+8oz^KbRAJty-(`;B2HI)aE6t_+^c)MWJw28WxOYl!ui~xZaj={J6Sb{0DgL zNC+p+ahJrk*Z$yTmxnFAOXNVDw6s4N{+9WlP&7e~(n$gmB^|dw>(8T-tQmSz6P;d7 zbEqJ0Zdxq#FKw!`1A~7f;P&hy6eI5?Y-jDnLdl37W+WUUi`!wL1?rZ8jYS+@S44@ z#nyL^F7ZlN)x?vww(;4^owad?JA4q~s)R-(ifQM_cUeUvtoEJWUGiJ$-X=DYUEy?n zc6M)-c-Hul(Md#=G$&RtlRQ%Q)9AF?eJe1rvc^0@buxaCSm^{{vbu6|oMP8&f##sAnpX~tAlhUi(?o-O zO`n(PT7RYJ(19Ga!Z#fsmKw~Qu{oB~;>}_W*V=(Cm0w(G$wF%b5meoV0Hn@ykuZtRA6}eFwM;^#22X7 z04OF2#4^=6a(=#!As#?6A0R&us4jwuO+(v1SlXUMeO18jMT&wAe#dyrUS%g+;P^cGk}6XF%uwP3W!xWY?)tYzNrCKxz`}4q7xePHk+Q*?zORu`!XgC9No7Lz)TmC7v~N zcnl739O2_Rv7ph>(R0F2)(KOam#{I3G)xd=C~IR2u9&lR;@+&o1|qHfGRrS4EqO7` z)!W<1;)LX!3A!vsQ&P_6HEm?=RLyCf6#gpUmq_ijzSZ&beXP`QBL_@ju$F^4_u?;e{~an!Urro7O6l>JU_@2ccR9^VHX z&U;wj9qg)mAThIo_fC7yqXXe57HLj1*kEDU<<`l?H>t2p;-cSz2}aFF*evt4Zkd*I zZ<*5;cWZuj5wA|Kt?8~cb7bDR6)n2tlUEd;d#&i=wzTEN%X#m9`(j^UdCa3ArL4Q@ z=l=8FZd>PN`$RgMZ@kX__STb(+=~@@#nl(ShG@q9vpjYF)71O}mA3;Tempxa;&Eo@ zzwl3yvyPt|_;{5o6<3ILo#~QgVib z$P||U|Jgqs{PMrO+}`ObGo!LJb5k?3z$AHv11`GF4DSj!Wx;Wp#?bu#ERUN**F;8M z1_q5##+~4}PDw~iOh`$Ya`NPvvpSmBbagd6beT3^7UnK8{(Od)hetwUri6rKN&N@o zKNAxFD4zb}-1oDc#haf$x%~V3S@EW8jChv+NR^OaNs&0meafKYq(Kp<;f97S1%@w- zD-4&2O@H=GZCc8+=a$dKL&Q>-rBBhwP|4Pkkd&CE`2#5N167HqxfA;7@%o*QT(GqB_UVGsZSk1oi9 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/lineheight5000-typolineheight2300.woff b/tests/wpt/web-platform-tests/fonts/math/lineheight5000-typolineheight2300.woff new file mode 100644 index 0000000000000000000000000000000000000000..09076604c3a1989956adb083108d2878bfb32c4b GIT binary patch literal 1108 zcmXT-cXRU(3GruOU61!(`@_8L5dWK>imX zHUMHX?wAeA89+gxyb6#n1H>x4Yk#R{M{1qO!P#0sE!j1E9P8yGVO zFytlXrUJ!!fH)TD&L?l0S3fMsFD?PHO@L~|fLP&w8-sDhoaBU*gan49)Bkpve*9w= zFS%o8JcFymx{O?Hw+sJuXT%$5GwhV%@lgn5aAD+Dhp2yG^XY6`W8+U&X66|wDGsbY z45<#xw-^`#fW|X0fYc<`9kgg{oZ8s9vOANXnc11YC9UQ_!if_sBB=>aQyLiE*h(%O zSa9IM`86NzH-)x*=6EjHB9+FS$|L<*v zbsxC+-X6vRe z`@7=E^v8Vj_TDHIpIHBT2m8bQ7W*FjVV`!vVnNyz8BHSz4xSB1C)9FqwrXk~Ytxqe z-LaTe%gi@4?|E?%qt4fbdY?^D^ z{^0`(3Wq=V1hh5!w*`82G)gXU?>*SQ@Py_51)DfhrZu^3TGlkNapBCS{3Oq|_5DrB zg@tuRX-S@Gb#jGzikJ2}95|71;J}#^E0(OezW00k>$qcktLyV_p57DwX8Mu-ssB}O zeEX*<{`cXp;?wfsWp?}S8|nZpzxro&;^W_;%9nJb?EXKWmbWcWPLH9VH8~m@eklx1 frS_O90><2Y3On z$gcrxzuNyU=W#eR06=O1fNK>1PPdf{XDH)vcIM#RLeN_b1R3G?HNnzWQ3U|ltU!$e z!3#H{JqdnpfdIh12I@+1jFvFV5$^5bMg;XHh$@Ks5iH-bH)sUMWk8Jrk>p>2c6$xCW|C%N-GCIg0)0)^=N<< zo$m_ppE;4OEiGy7;T$F^ffnv~q8?{IU_8X$0Y(PE?fL-!_{~lB)>6sYWO5$$&sZ|q zjWfY71{sAR`(a8g-3;KUK07~*_wW$RTN8};(c{=qU-pCX>UHw~W$RGuUvcQ^ z13qnf@c1Ey4E(}hqf5TL4JNrfh*0U6B-(KH{?2{7fo>xF7FoxX<#K~b{aB_rtnra= zQ&N=I<+V(%;8%^1Z`$>`fd3jVd9}WMyjt&=;$3a$1!fTckNJ`6)KXH2a~FLlY*LT; zNyTR85>`9Qk&{nGqzkn*BhFfjQ|!{oB853q;V15jSv^WUskW_YE!A-xDkpg*_p$jz z(aku8t1-Ec;==lwfR^jP)7m$dJ)%lu`xclS8P=313uXDuXJwUkJ#nH>`^CDb0F2P&~+=C-Y z^?Zk;2rOESTTq4VDknvTQg(RQDrZb#93CF(9z?Aj`aks-oMp@W%?ibLS&AceOp`qb zE*RT?fn#14o#TdolMi8RkbPAPRn)m87pfoz-(hC`auvRxkq?|Fv2Si2u*Vp*ouawV zAI-2C6$}@3)C%V`lJY>bL1WPZ5 zqv^P3TIYRwvXG8NX{r%Xu1pTE&U~!2-dk0s(=5lmklrE#?=-R8liZ1ga9KRB8TE>H zG_~kRPOA?I`To3^FNIzu9@bXA_WNdwjwX-sEc^jwW0+63#bXB%89Os4u*2uyCjT08 z3Wh)JNkFMwreuHY@Oco6)k!(0H0;t?_55vmXS|vMEvOnP=Hp#a5~Q9I;{D(vK|Ezk zO?|j~q?@T((8;N06A4+;umY=)tRZV1<6Y$c>uh8V+3HyCVwe7B=U~3`?!B4ql$Zm@k%K=VBwER>i)VoHu~Fq1W9nFOJGe9)hV#f zgX$oVke0Ki*!UB3T|3ao#Dcl2*jTUi5G>VoHvHhI;_M~Tk=XGh*9DCo`AF(a`$n)$ zM0a3VYrzf=8Ahz=`#7*ke47(~=9=mIgo;+^kQvYY$trXK>Y79HgDsX#>gDTKzSnH1FS>LO4bEgm)wfs=TL(T%lb^IF zJ$_o|Z99^8s)*ztWV~MQPJZT5r|gv%^?7UCf8TQZXGTNDU`CSEp_YTz-QT}vDadO( z-1M?pD28Mf*C0H+dTE18gA#*LefP4z$u}>{hS5VFhE7%B&wMx&Ss@atc!PWL(iuKk zmILZ;&X2g_Gbds3j6fMx;yrA7o^>h)o}w~}P)0Vn4>sKsJIbg!NL{4a3*xwYB#1(; z+#}L^BCkqxKYPf^kA5K+wn3V2*BJS}yyPe;0A2My9@@&OxM0f8DtEfGmxmEjesK1k z=2p8f?z-OdH@G&($IH`wW*5uO8TvPTbVskcy@|np{gIwD$KrQd)aPD^P>NkwW%BpG z6E*$wCiCfs*T}7Luj5kp`}gI7?`1pxt$FUL>Bi=!)}1qV=#T--^4mJu($LX3(^qus zD!gUoOjjYXl)rjU#03wl-W@mG=R7?nq|0tm*(5-B{g9%aGf4hfHS!20285sb5~kzH z)AP`IWAX(KA$85rx`rYob&Y6U^Glgo*Ki@E_6rj;&Q{1crWifbKrkC#9`DHt4JgN% zNz$FlPSz9ina%eT3Ct9`;&51QGDck(6EM2C(ev~Pyfs+Mrwte5Q>u2#zAq=EY^xlV zP0jLoQW|&xMO`lDCQkY8rC;O8F(;@nXbolq#>V*`3g%w3L2^ZV>l)e;B47IFT{xMq zCs+*FL+D=`64j|pQn}gKEz(EcI8DnjIduB&Uz9N!eVn{I)@T~SIG4{(9G5wIa(?n6 z;V=kQQnJ9XD1LcZ9r-v#a78v>>_vmI?g#14Fsuy$dPzP(%==;I>--bcc z)g7Fm9X4hk=y9o=r|7hYJS zKO$i@AbTBZwpy@2E6XigRZ!mEiVK~1q^8*6u#_6ko4_HVkLysj8JSB}D|aN?@MpNf zq^~o^;yAh@`JOyvuAq^Kp^Jzj_h3vvG|vuUD`u+w^5u2YD_FS_(d{y=90%*3R7Z^5 z>qH4mLC{wxsV3u>`>Vz*N59K4S(ENIR6*k)&qJHZOD%CX_mJA9sQX4$JnHxH2wyFW zK!iS
                                                                                        nJ&-B6aK;>tx$e%0MH2kNM)cTsI^XM7I+ovk zoQn)j+A|&9rWyrjMwzQQF1_OHb|Dq!NwQ2r1lWeT7BRa>j7C}kDs;Gut@5KpWnG4U zdu@=_owLbol$+8iS3D|ujzcrb$0NAJYl=s*3d4EKi#yUFtv?+`Cyg0B8B1*40Rjv) zo;c&_P2KMXYH|PmPvP-IAg1rs>MnXOac}`8GsOpB1-SnB^)?=~wX__>kjWc7u}5yB P3CP=M;Ib0>6af4SJ&WC> literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-bold-italic.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-bold-italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..9651fc8fe05881af509b7ff66e47a1ee76ee3935 GIT binary patch literal 4648 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-bold-script.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-bold-script.woff new file mode 100644 index 0000000000000000000000000000000000000000..3cea72111021dbcd955d29df35b14343d4780bd1 GIT binary patch literal 2736 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 PJS8J#07n%WSpfJK)Vbk$ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-bold.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..f35194ef6286ace97806873ae43b06dcdfc3334b GIT binary patch literal 5004 zcmaJ_cQo8h+g`n`E_z)-h!QPYbXM=(B1A8{O7ztUqJ>qW3$hX+qJm$gx&3!+BJ zYSH7}=Q-c^*LS{m&biK9*ERP&_spC#zjJ;QWB>*mn3@^@0JJFpQUJC&C;@Q(>Hlw2 z1%o*O0DMaTfZ_%KuzddJ3vntKY^sONHN{4=V8IH99vT{$h=>6IIEGlQg@rvMoD=2< zb?^ZIaObeT7q%}O&nrN?IXgIE$4{{k$Ko;d6S9wPSQ8ub0IS)txKF-KGUNvJ560HO z=KoUz=NN{0Y6x`*#%df*tVj4S{ulya4p3*TSBQliw#Ew){wV_=@8|y5HLGD`XtChD ziwB4W7dqNI+1mr2Rhn&wtY1Pq#C*g%0ZET+CPE6ykjYFbj49H5qTYCZGK{%OWdQLd z(h|V`zkQD`dG(ObVwc6Deh0n}L_xH{<0>^1nNu5y{|K#x&6iBKxL=2c> zB4xtP7+hGCZs36{N;lBC^WdN&IL?c-HJ8hmYp0AeCbnf5j=$gM60<6^z}>hQ zI3<2+bIVI><8ShatL+Co7Y&>Siu*pQz1!c%>ydJVWmUF3QC<^4={&V_!=4W7x5!E zc+4Vj`mcOgv1f-&moZRLrhD=GXZ-^K&>_pZiLa`Td@W{($&QNab%z|!x1 z2&vhe@h6bXq-Mgi8q$ItKTq#v-IRVOJ*qC8EMUYpYU#=)*D}J>MwrZ}$xi)7^TBTmDANO^;k-MM{u^B3)tUngK(Thc z1&1o`M{K+jV+02?j?smxn@x0DsaAT7Vzi4A{R){-6zGP(5q|`u05U=v?(+Sj+ewMT zhvoWom1L%e0zxiaX(qin3GWEPiQF%|1-~2je!GBJ)LEC$NJ{QOA|k8C#$o%90s;fh zPyd`z0x8G~Gz81n=Pu%moAveezM&Sjwix!4b<#GoXFdmP4{Uw^gNDVT&u}RfV_0u~ zCR*PB6ho}z{<#}2fY`e+AQ*`KI6P3p`GP(F_Ck_i6Eph3-z}dS#|d^2G;f3mjPq+G zb`d%4S__l(Z%Gq%TqTsCCt8sBrn1#7dYZrW_b}vq-n$b;n1$zby54-e@N17T!AQs;p4N6pD_1U!CmupQMt&_2wzxw5UWrm)?y zR=D)a#+x_}Ma)mkFJ#xygm$TMZ_1wkwFea<|5LbB)`s}3_eV07+@h{oCm%ZcYwmMf z-MqOwmQA@feZ&rsh{9wCdl*VBs@A3eR^*FQC%{W5I_@rJl~TA^n@erSOF+Bee+ zRHJ8@UplCEdSe|VSLOL#V$tKm;4h+mxT9eCFr53xwDoms z>i}<%387#CR7mKF3$!TQtf;6RR{g1R)1B~7F;1ie=dj0`h*Ht)h|Xl8YW0qE8$?3=uDl{Z<$}$Xz$)% zk3VW0^`63UClD{4X!5`n z;%o+7;+g^z;_?Q3O!qS@Lm%g9`6WhI!i9&qFW*Mx=As!yktKSlK9y?S1D(7Tk^7sv zCl7}~^|>}Zjh#t0Bd3x4R^Xh>(P2_Qf@A`Vj4B82#-0NoqN&{6#pDaQJm1(t1$P?|4!YfO9vz7UrX!*py;W>Ft?$fb+h;oQ}h;K=#xqB;dx4-7}v^@!QjRoxlc#y|$rsc$kQlG2<- z-JYaYh)U!P)Va|a@EHmfY4X*5$x@{?d3l?mfBD z;6O!cd%*s%Z^Iyz<$UY{`LiUEox_&l))*C+Tan9McQtobr?D=!{&=8he8UqqQf%do7zWxV&Ki%Ox zzwIoO;RZxAPf4*yUg+;>w7br`gJO2k+l5_tfJ3Wiz_szZv4?SS3AJRo%RtBU`{`fP z7N^YNMJpNfnN70Lr&k-N6{n6&R!p5^()oFa`P|EA=BD4jH3YgAjS8bzif?aGh`b>5 z%>!33nq1}+%K(e8q?crvo9^QpiNi<5BSNU4UytR;j>#fy zeY)s81f-x+;YPVngH6`{_K>L~)uHNqF1s!>-xd@ha`3Z#hV8g-Rtno0GOpX!Td;h% zo83hl&q>o5JSbx626+;MzVlE%jHw`i(--oiA9mDTY_2Pu2%d~>QIORM)_T>pIj1(( z)UG(n+tEP$LWaY6_;lXo)Cew{Em-B4eK-8Gp;ABI<}=#Ey=k=hI?G$=?hOc8R`bk2 z-PPG;Gk>H#`yGR`u!m)%>%?w`*jg*W{0^6#Oe}J^KMw`xT(egX8fYUQ~n}n~j zR}=}U@>1W|_J8?A;=zp${3+;!*&?wE;<4Se-Ob;?tfZNaP5W4EUj{~VSYKO9PW611 zRjHu7dtu4F4{@PgJ~)y!Y6M+FOeFc0#lm*>R_8esx!bB_6XmDNQw_*@Z8#cN3})V5 ziY|3`Y@kQpDira~>;m`nTt#q?0M5N(%2iqn1Mr3PxN{WiYkjXPAbtI+zR{hrQ?oeW z+}NZ2>2KpX0Gwytc4Q5-f~@|nUR2eYzHi4KYEf{1+gNr8=ORa2YU;x<@w&~}>1d8z zYJH59M!?a0w^+g1wQeBEk#~C!p`Ym?drFJ#%yt!S;q_!2<8E~l7;2?jD{g1ozFk`V zE*5n5WVwEX&=H<}z-D{ojVVK5glzL!AU{E0t;tbzpQk?HP#Z}ie@VR# zXtZRB+uRIt0 zYw(v@Ay9eVrN`7 zB!@5!L_%ouIS=QN1R3gIjG^$o%F2Oo!=Wa?&twFt0tp=0R76y3{_|rLm$Cbk_x~L3-Id19s`gzP7VMH2X+hUD93SVl$nSg`Wa=wR>c-T~kUEp*hS>=83Ms}Gcd)bGigIz=F z{v3tF*fM51Cf2^Hn)ukAH;H3ZqnjlcYaL;cyX~X=dzNNEX;c5!2&yJbLNTe{-IO>U zWo2DA!(943$57o-MvT7Gq9d~(l*sMUsJ!PYb3`~RczfSJ8Ad`n z!^2aglEVjO74H#-@W_hk`X&u6q|@50U9DJeU4t>qdr!D=kIU_&m(wf|ystRlo8tr| zCaRGu=F=6kM-=nsh@+l)-0!VcCPyf)#EitA-KH7msNl8vS?|(c++)z9Q`RC;QYhjU z6K`3g*CIXP-L`LfKLiXoejAZ>d_$~EdIF+UjZlynZ%I1ljL0=ZM_%cfREOC zWQv>*NpnSIZAh^F^|Q`l92E%GhxX&T7us4p9SNR_uvO;kN@j4}+yJY1)k1ooDPQ}bmz zG49Dmq6L!qxJ{Hm3itLsvP*b?#%&ZKNJwdB1{?5W4W~F`Qby4|;BHc&3{!XQ6`~<} zjg6m=mQe-syiB0n!r2AT0Y%)qO-QYq9#Zu3a#Fi>fPo~}DWNv7#`AtE>Qt_;(<@Ye z^CF|=Lq$?tU#&>>!ny4}koUgg@ou>Wp|(~+f?A*aEoJ5Gj}A?*rP-1%Lux}~0vB?ax^jM@ z{3FJ?TU69O)gl`BCcNZMH5T|VYxCZ1I9Gi((*q?t7t!(Tdhz7HT3pT?;b6N@ipUq0wm{`S-bD-f)ccS8jfLl1A=(hTCGa*5ocqYy;X_3u-N7CLI< zi8QIGFkPP4#=pA`IgoM=s48Fi3Fg5H_JfLXy^J-qkE_#L@g63oY$e1qEs3sNH>gLT zmf684@5r4>JPm{Jpqj5E2QM6`g^S>?9!Zo{jm<9(2(xWh&6#4_;L3aZ6Y+IH@Og`; z55S(@hBd=YQDV-U$#h3i@@)d6k6zY4gAq2#{SNn0{T`h+-kVkkDn Omzxq7Fe$4s1o#h!Yj^Dc literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-double-struck.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-double-struck.woff new file mode 100644 index 0000000000000000000000000000000000000000..ed35ee6d6421c94cc7a69344f4e912626ae6dce5 GIT binary patch literal 3988 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-fraktur.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-fraktur.woff new file mode 100644 index 0000000000000000000000000000000000000000..40adf0d96558fd271f5bf52b2387400715ef7e67 GIT binary patch literal 2844 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 X<8b@TG2ES!u3`$3)caH73IO~M`PK<9 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-initial.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-initial.woff new file mode 100644 index 0000000000000000000000000000000000000000..db0ca9b2272784650cbd7c584860d3757fc2b0b6 GIT binary patch literal 2100 zcmZXUc|6o#7stP77-ol2dfgHiF=##Z^|`SyD~|2_Bhdf)T<+L}8vuZ60(<~C zPCf=We%t>aMp&#g0B}7AfMX^AaGd5DeF}obUbO-Mo`~>P=(CP{c25S2Idij8Q2SgL(f^aMBy+61J#wvpP4-gdp3NOQ- z7)}D~69=^fh}&tjU@_5)1m@!~1vU3SDA@u*UPNDTEgQrLJfpGf)O)Fr;IMG8=3>xC z7)1Ig2~a0J#^Zc&IDnZCbAr5KPsRFvBgAotc(u~ltper~8sci=H?6&AxtBr@k9bZ% zfFMu)!T-g?bw5PYald^te3p z<@KKP;)xldXFbi4s>S8VQ-Ni0vJZ?5mviNsxo(*ZsT1`PVtk^0`9S^hxeotzaYrax zITc=FguK8!3g4OIn4Xv79E_wo`jGW!Wm-ZKhZ#ggwX|u2Yp*ctOs81Py4_L9(=Q(E zTc>H)#l-2xL5c1BEnCSA3@P{>)B8Dvj0jfhuK7^SdzL)=?T7#9uyjY-GfS2( zBXjih6>Y-tUyxz)XK#C(FIr)@23E>cjd=83`gC5D{LKE_Vu19^xoK-WZ`)Yof({X| zaQ{&r@v=_xsrk^-=^4B6QA|x);bEiNMM?V2-a&7d{^6XcY z)2eqX<1T}DIG&-#*Nr}Id?X=-!32sl+Y4Dz%FY{@)!IYsqof5{Qg6(apR+ml+~YdriFSi<>1|jpDC|Eg=L`>5+BKybIDfj zQ(BTRo+PjQLn`u^G_c#c^=fD;#V;Asj{@?H>S{JxYcDyahat z03;j@!m)4{08qqmw1T}g=UN0J97U3bxA1|(d1d6Z)%L(}&i6}~mIk+~edVj0k)5#PHG&@1AJ?Fzsz^!~dTuMud7(ZvIthUs~zop^%D z!p%=G8#Etb{tQWswGibJ?+_w3)CFlhX0fRg%c~v>abA!(gkI@s2;urg=`4XB(S& zpdKV+E7R=}Pj4wSrd2N1FS5P-~J0yFPf@ zb6sJ^dAh(a*RPAsb%lOGJAytbB0HM#MGj9T*RG$>N%Xs4{=Vbk+NM?iPw{%cjGBccL#Ew!bFTstns| zO(Pxo73^fI3oV5o&F&mbj@0kA0QqH_dYyIs0i;m(hfT8@F+I;xo->_OAyx}PRIx19 zL>o(|`9;7)Vq<}pP2h(-v1P3Q>zd~*{_E+VHa8eaUbmmTGiVy^`SwCf$3WSStQkvZ zM+8@yc#*NBk?#K&Ih3M%Y6GT{Uc>)QCHDZ5V(}UZTNfdu$xXlq>#yMXoAqq QOtt&kPyin-zzG2V1wnGDF8}}l literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-italic.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..9687f377b32b9f07319bce26d9df5aa92e953383 GIT binary patch literal 4756 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 JHTLKL@E@!7@y`GN literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-looped.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-looped.woff new file mode 100644 index 0000000000000000000000000000000000000000..ada1b9e6dec6967236f3489cb37cf118209c13d0 GIT binary patch literal 2292 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-sans-serif-italic.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-sans-serif-italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..dc139bf32ab0793e46f0d0b24a2091640c6ce853 GIT binary patch literal 2748 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 IA>;ty-?WhC`Tzg` literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-sans-serif.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-sans-serif.woff new file mode 100644 index 0000000000000000000000000000000000000000..8ef41f51081e74a386e3a17b03fabfdf9a0422b4 GIT binary patch literal 3060 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 E5Am6*3IG5A literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-script.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-script.woff new file mode 100644 index 0000000000000000000000000000000000000000..d5c457aae0b2b5d67f6bc2d354e464b67fcee74d GIT binary patch literal 2964 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-stretched.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-stretched.woff new file mode 100644 index 0000000000000000000000000000000000000000..470c879ed974e4173e66f69865923f7de0279a34 GIT binary patch literal 2256 zcmZXUc{J4D8^=F`u`5DqM#$HeB3nw9FU5pp>?vaG1~b+&h>S7Bu?(`W70DLLFl8NU z%DyHvGfYh>QeQNv?|eUXe*gXMIj?)~`?=5a+~?kN&y7SP5J(3HBmnSF0D=J6V4?uz z_xS(qA_5@?0Niu{;AsPZLoYXu7)~P)4p+d~0?-={A{~R-h(+3;)&c;C4X8~(P+AL8 z=6o<|>MrTY7Lc!PQiLm&UmUz{~)6TnzyD?ZRv9i@rYId&bRwC_A*ULGC#+-dVu?m3vQxPw8FBy6@W0V)7qPb` z^Rp%iI@pAFp$x>(b!EOuQV7jB!6l+ZBR(eWju(VrnDOO7vzY*2%JHx?e|r^$0@B>e zf)nVgTOS_p!ko~u^GreKf?tzsm`_X%*cec;gBahRqS#jN%fCz^S3Afv4md?kviS)67w2F5*n|_$ z1ja9Q!>LmaSoD`x61tvgRaScMn>S2RHQ-jL00Zu;_8BRZFa7AK@=j}3@)eIj^=qoR z{gx-9@R#oZ?ewIkKleGC*=?C%E1g8k*|}J0qH$`Hs@B{@9lc`8(?~TjxdwPCV&t1n{=Ldmh@byR8*YRD2Qp;C8B20#3h9lPe^M!JY{dxr3 z6H$Pi zE`@-iIUUUNZLX>%!76BiyYY3jtZ0IYK|GEQIi4uGVu!9XikQzgEioKAm+|>Le7?D% za66i{$SEmY2v0*b1M<;3{o)UiL&`%dt0|-QDZ|StS(D3|kRsr|eIVC*+)R?yTW;Uc zz$}IGRp(oeseXcIcY(QGEA3IE&AlSOU_40%m8`Vc6D?XH-a8@mqxZlYXr{3+f^LBm z-02J7JS2@54-p)rMp1asY(Z}}?+3;u_R%=v-*j0D*SuV&Qp-cQ%cky@mp-;Pc{B93 zFOBUSsne1E+~~tzAsmI(4=2oQZ)r$*U{8kIelY!Tq`o>|Z!j&fKuCK?MeMMQ2jh1K zvAxyZHPJOeN8MY{Ad3Z<1+>{NUdG6hxo5D|w@7dIBTnA3zpN+!{_efMuvNO2YCfs= zlua%r#_IMk-M_uwYLY1{8s#&~t z7l}M0jbSfFw{26lk&6cw(Z#-B+hkigE27fl`dus@?7<&Z(;K&Eq9&sT6koW7#4dis z-llx>UiFE5QyOx4cY8WpSNXm|%~S6@gCf$WS3*uF%2{MR$FcE+rTL}o2e0<{hE1$& zU!|MA`;bR77O6FPH~yXp+)=K+;btz??cG`CWc@9OuGPkZ8da#Yx{{=Sa{hrW%MA;i ze2}7PK9^nADjCXqjaku|F{On@R>V!cdt4VZdtJNj?x2_i4Y+d4z%z4G>m^1qQpLd|NEx2ea1b z&S3#{8gbU(jF0{UA8A6Vm3UmAq0PEQV7u7B8;RUs>oqAh-@o>=*e?_pN09C3i1x1P z12q&_EWJ~5?)dp4{fz}l+WyM@!e>&x-TR+tBTX=uBdvO8OfET>M&|@@QLDKEG?ZDM zOs<7B2cNK0tQ=EEYo}osDX*K^*bKEwNyCWA!0^1}M;NG#fM*FYLLJdduvD+=d#YgG zZD6)Rl4otf)r50e)n8exu?R&KeUiVvcNmY^o`FPb*Cq{W9-Hg65zJ!F7g)EP=WtKI zMOOX!%TOq9AmO$A+OFJQ>e#BT%JKm~f120s_u9|io}Qlxc>F*71hEq&%?t^CfCD>7 H27vznw|)v5 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/mathvariant-tailed.woff b/tests/wpt/web-platform-tests/fonts/math/mathvariant-tailed.woff new file mode 100644 index 0000000000000000000000000000000000000000..d612b1e06dbefef308a30ea8eccf0a3397ee5469 GIT binary patch literal 2024 zcmZXVdpOhm8^^yaV~)jg3QbmOPD90$!{ii6bN*pHBFDwd99QJAF^A=_O3F_~S4uTG zZV0iMr#(-Gh>(~=rTNsJ7ax(umB)E z56A+b!TkY=pZ@>N!PyxB0FW;r9RQ#pAJ4=!J3IThgSmC!={+D?se~m5thb3707!U% z`Z!3i*_c{kC?O;c03;_sy#@M)1NT1IM}>!kfqDhxFvwAr7P*QjFbL)z1hozbQsE$4#tW>oWLIU)^;hS#1Rt`!TbK~ zs{(=$X9H&BTcN>W!NI`H{vXK;`5&9t{(jBhlswoK=k$?upt$cG`W$-Z7Pno2_g*Ac zLdpV{sfwZh%SnIE;V`-{>~JxQJAE!V%ucEoIMFZJ16BsWaS;IU^W5~UUP}t)I)zf2 zGnPrAgh*vY#0S?!9EJ?aSNF<$RB(9Q45+3$d|MouE)n+L&PjbbUe=B$1LQ_aGr>ya zTlX3KlMqul4ZAK)&0T>tJRC5N=uPyDO1VEkV+kI+>At?J^6=VK7|oVS6j;G0oUBfWhvX1^7DrJpa_YbwR%CgVi zg@^IWsL98Pbb4oaF|1Yh2B&vPu`fo}WJ5^NdK`niF|PKKcFXVj?|T*t!bcsd*;Pq* z?Oid`uU49Pq<+MKCAN9%O5U4@GVcx5FNgXZhzeqSb(edRn$O+MvL#C-eWd+)eHA~^^-E0f%{B{ zpWq3?z*rmMTTb>-lRX~dDi<$`GB8medQ6RJ%4^JDa#Vj(n1I3?LVY5k& ztY7no21fvyV!phyygvXObd+cT{}#K%Jx1jOJY%Zy_B*o0POk<7rrC9hlyqAba`e%J z&Nu*5mMnH7cKG9mTTrl*@-nd10k<0uk`B3x=l8OFQ~!ajdH4phDsmkvgHXOR)M5h< zJW_FCv@P$LxzG|x<37Lq<{~lq1K)x;nQGN0b43O*^WB>^C>rbXsYiQ`pGCo^Qa6k^ zI}w$5{Q<4Pe>tqM(FIP120G8qSdFN@h`vqAAdt??(;WX~dkU=!? z8yQmAfBPnWU)sQ{pdZ^SR~Sx(W6=%FDToZu`Qx z(nU3|(MWT9dO(1wfk8xgPxS(C`mdpnRrJsKHA#@U zyh!mg;$45(D~>9CbvXQWUwW3g$TXcAz6m#(jwEYfUIc7Pc5-XKL~lZC1g{Bq#^pX-R6rqtW^`L~IH;dt*grJi9-8`XdE^AnXl8V? zsQQY2*b|u)lZ{oCPUf4l zp2;536OvsNwu#xiVAq~{J)8Xb(wB>?9CzX-iPeE6Enh@Mq1&(+=?^smNF97AXfoq` zeRRU;C%1O@+=U1JOW&n^>m8Yqmyzsu&mAnPX^}e`Q8;~4(yJK89-pfAr|K3GRR>yxY#Aj(jY!VZ{rjR&ruZ+sJ)>;z37UZEeT>+PKl2jpTXz{N&a4^aix;+IEjy z=R1+GFZ0B(r+%j;iuqb_*5>Lb4L8&C=%C;JsXX(RZw|qEX_v7H{b6^WHgy{>^*0<5 zEFdXADLknJsJ1OWd5;|PzN literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/radical-degreebottomraisepercent25-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/radical-degreebottomraisepercent25-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..6401070d44fed8d27c688a931d277bce2ef71517 GIT binary patch literal 1400 zcmZXUdo+}39LJyWnim;0nAOOfnuyb?OfC_va;Z@?E^CNN-WklyX5EH$?bw-=%NQD$ z*+U^oQ5$DdiiDX`MkrCO*_Kj5oMSVbTsQl$mw)zm&gZ<(_xpa&@Ai^=o? z0G|l70W572z^xqrU#@gI6#yg?02~d{;*)1BpwpQQ0Mr{`dIN-#67IrgI5Q7I?*-I_ zFekD%F;4dKrCGuCap*ZgFnzL>dPoE-8ur@`wJSX5zJKe`ATNv+3fG#@vw+xY2Zbl_ zpb5R*P_OKaofP@}7$-XM|{5eB^yNG_bI=Db;6 zSaeiu9NZUXfdPcNoDQrLOG2u=oGMVng>zFv!( z5!V5oB&|pQ{>i7xWikn3=KMV!Wy;incR2#D5&-Yj305+!RQYb9P%0D_XDHKzLKglE zhmZZju|awXH%bUQWtwek35s%|v-2U*JYFJAt3=gE0*Nk2$VQJRmUQQPoiwr}J#HfR`f7fDCI zVb7%I5AJhx1e-qTYvsN%HOSK!PwnB0ygF?8>FqNXD)4@0m&$N2XI)+fncG@jOnBP3 zK)I3Z*&{pPIc3_ISu*6Na#R7v!VZ-o^C!2B6&)>XG#fcF_6T#0+PLOObqpi0Lh!io z_Wnl&>3sQ1M~Af@JM=&6G~zj*KfUX^IyHX1#Xsy))ycqlPNVm15I5X6DdgG+@77fY zqtVsVfF56h-pv8qxo>l8Qsa2N?GN>x zzt+VVZ<}ZyXnGRICm!*b=sYx8mhjHVH|p3&hal4J1@6cDw49{sYwLO~H*5W2Sz&Va z*q7y>MeV!|b}uGpRd;J;zu!rX9H2Ap&0o|kTuAOa{AT!`Vlm!+elT&3{9gYj^M>9b zpWG`C3L0`5wIY{u3$IHTa=rj&%i{3g&m6-z0?ZJlqr_;OiYz~6fa*}Y(Mm(ZA~LD4 z^2@S@NW6Dw z>0K&m^;B~vKIXnvH_@otFJbF@MN|qXV}VMtwowx3obH#Q!-@fRg>rD;sH=Ct93a^) zsxkLIt=rtz)E3}vRXlGtZ(0z=ArcVcbDd_3>1NhtkCe? zL|awff3_sgr2BNnP-FzEjTApll$QFq1^QXb^&MYXVy$)t$Kbx+--ba!-wR)BCB^(N`^^3K@4JSI#S_ zvAbuZ)wcfBBfC=>ly_5EDY15$SI&DB@+}Jj17Fr3i1q92_)u3dlC9*I(WLoq*tg35 z9+zyXLVESwvS9efSBHjDN(1@|c{ev5VaK{)^X+Jze>sZ!sd$YwmPjcl!g)^y+WEqK>eLYzZcL_|ZJmT^HS#z7sX0dVuPq8Wt80 zWe;R+OZmd$KaCOXSx?me%h_mqBBu5P32JXfh7XRc@1ph71RsjZ$(p!jvEC>$2LCva Gf9o$Y;4wJ> literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/radical-displaystyleverticalgap7000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/radical-displaystyleverticalgap7000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..0e8b1e0a434e3da52f54c0f64a273ade855b8f23 GIT binary patch literal 1392 zcmZXUdr(tH6vj8)5F!Q%V8ad2no&fG0g+%pT7(#gfI(10DFez)xDd)isaTQ{CME%l z&{%oMb10P>Q43mpf?v;e` zcwquT7yzbeU^#%X+z}8K$NvYH$72A1WC1{Mh3KQO85WNx2nB#x53}tc4zlE}qELra3uR8j}uc5N@33!)YL`H`T$53O5uJ40o0@=Na0|gFf|@}RgfIm z(-q40m&IxO(+|SBunwR>7{};JFLkh(Bb4jCmC6#OvO;|~ zTd5S9<|G`zzDe*z`YH8Q6n7oDZ3U(Cgp$Jv&Yw3eD9P56OjaritbpV*QjE0fR#Eeg zR(EQLG5B5x^N7-HS|vCv$T%hMJLfW~xR+al@OLJy-FMQdX)xqdYqnEDwK`8cJW_53 zmTBAbf1h|hIG?ozlu5TKUjCr(PFGlM@l_wm?oQ9?m>x(0#UWq;!nx zU=sJ$ChL1$!3~L<)HOScN)BWOW&v7!L~_Z4(ib)Bql{0LD*a6)C) zg|XryCiOk`aW3a^WoLhk|42Yf#`WkP&A7Qu_gVVJCvShTr#Le1+tUu(9=_E6Azs(7 zJ#w*I5V*@e+IGhA`_$u6yF$Gu8n@8;$6W?jX*a4o=Xx~q@~-}f+dgL>z5i%$yni8@ zFl&r;{pC5a7I&@sSt7xr-kEB;S%J3_#H^QfUl)H_-mdBh{k4i)oN~Xb-ODe%F-KN; zA!Z;b^~^ARLev*CO>ui+nv}ahT|7e!OHg2R5|2bpBg~-sEE>sz(M!_O>E-Ck3LWL#T{<4)pi~Y$l!_%QZMsMzIZd%iSCrbTJ56sUgIC^rMVUXF9B)_##Cmf9qC)pMVTNG|rn~^;^ zhX_Gqkw=3rCVE-kId8`p8J>@5wa`ilsioB)!B_S7S>Qm`vwCu#@j5?a|5^PBjb literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/radical-extraascender3000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/radical-extraascender3000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..6c0ca282e9597c2eb5d3093ca05e7a1357784226 GIT binary patch literal 1372 zcmZWoX;4#F7`@?z2NJLWBRm!{vKbXZNLUpHBK9dHKtvV`C@*9Y*^GiffdXMIh-Fa` zM>>OwOL3`KM$xKy0R&Wn!YGxgvbGczvV!=6&b9Gv7UTzPV{ZI35%d z5(I#D6rcfEdI~^U{QkduahwSNq5yzm3vuR#B5-fVe*=j|e@|aS2qPRa_sT6A$ z$PW-#<<3a2epjtNhtzFbuHRXwDzg@}b3+{GY zJLuu3qLQ||4Too*Gies5%HNYtSI&GS9Xz*mkcl&+$H`Su_f{)^9lya1#wTfJULP8Y ztpDIBCH1rV&s&mb7|n-0@6w)A4h?Fht;=b%aJlX-I&QRqp&-Wj!_^~n3oXfMZ5s`P z!86kkFE9Ire#r8RqD*IGa{g>kTsoiBUvbDOa$C4P*Y%g{VP{ih0bE}fLBn>2+qSyK z^OgZ&!Qo$zmX5i|@TTl(yS7ceajN2T2Lj9{)7IpnI9p)rRx+^3`fTW}h&bLz?OOSb zo-3@Uw|e{Z9t{25H{TQSQ(DJdY^P-M$5kS))}wb9rbeGc5}V_O8b!lb)0LTIEuGM4gal$AUd%cb7nqdqXQLX&+I!bkz@rG8-FvijP&kH*5)H4gkY0*AU5sI}rl9!Lrt5#EU zON=yN_Q*23r5SRNzo5~_eM&1S1^}=^DL0p9O9`=Dd^B3M126puXTxP-6J}^)t z@N?k0ayXA2)@%G6?sp2iy9EwxS86GT!*$|t$3G42nO*Z})>rwm*lPN#W!09J?Qh;h zyKv`eJ7w71tPI1bQp{FchP6qt%tGuLKf@hMH!Z;0OcStPQ#*d5efK4Q7pfu7YE=?SJ)GwfFgFbF;Yva%#+2 zQgyV8D(>^st5XiFd|Kz#Xdjc|0VTUd1#I43#OouQP8PooH=s}bJ>M{l2HytTS5>_J zvI8l|dua7)j`^W9b)Rh+3fwkomwb79Low;(g$_DNv}P15ofTUC@kXao%@9OlVfd_f)&pdhPO3R?nl@%KVL~1diu4OW R#?BR$Ff%g#FJQY={{T#K1d{*& literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/radical-kernafterdegreeminus5000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/radical-kernafterdegreeminus5000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..24aa4c525a1ed14af7fff5134962851e28dfbd62 GIT binary patch literal 1388 zcmZWpdoA8P0wM{s6Cr9gT$Ia5)+P$iP;&C1}ThA zc9U%*^b&Du24Ov#R!L85h}jAitw!4HcWTf6v-h0O`QH2a-t)Qld+xd4lpq={h{+5B zK$ipb0kox)KudG}-!{=`Bmhw90BAWvG*yoVH`8cLIsiHsVYV5BMOv(XIGxJe3b_s# zpN4s2FB^j=LAzbnLO&F86bP1)$y%KVE;|A0kzl+D-fa)CQw~QTWJf|@4|2{Bp8ES^ zQ=%aWx%DvC)UeU>L%oUSCh=g;8a5**vJH#e^~XE6@xO$L1b{Tm=Ll_H@#b z@g_7O{zww63+n)52-0E>aN|`(up(J3FslA;p@)|ttw)~sxnx=+d#|TC6vj*}|E!-$ zz@UtN!~k=`l3M`$o1Y<<$s{OSDu;$<%5(su5(Qrg0OM;1njCh9d_A9E!snL>p9uJT zw(g0jL{>wTJ8A%_tw6{!y$%DUyOK|(ZWGVzN=gJ(Xl+8K1P@Yj(V@JG{vyTpcCtm+ z9qvuO-ss&l=Qe^*QCrfa=LxH;%FV53JR8~jd*$7tiwq&-a6lANwk`2DXCL~yaw`_Az_}M6bQEdo3Z>~Vu{O;o+7{>4Yc<<5} z@TyhePRg&S^y1|;D$AL7caIRQy=Q$XmM@gX9*vJ5W| zqI?j+ZlODk&0(9hz@11 zYnoE4>kE$D)4ee9m~pMG;C*LbwYh6h^7V(#=kF=RW>3efS`9emQpf#W4&0g#&4Zpp z*@LMOm-f4z4(?38`G^~HHROVnb{KP~xI4(Ow8gtI@O$*5X)G;iC3$>td5KRza4BP- zm-MZ(thMgxF|NK-Q6XXX`&qLGTj}Ae#_GJj9A53)Jdz*JQCir4#0d?R+n(k0J618z zPajzP=p3eJG4%ybQZqvqD=L#^il(7)30gBI@^oV~meh}~GBqtVA)KoEvWS_He^?Zz zgi!`jS}V;_SppQUh^Uh(GVBNH;w83UHKKrEu^*vP#D!W|0PI4vnl;*IC5pf{3a;}| zWme(98vM%!QHXPDr9IB~n5$)LH;TvUS!&);+E^MrH+}9CE?*&&_udApiHBOOIy_x1 zn_fjuNMD}WdAp2y-<{HNV8ozI75L1^Og+sF5Lm6yJvHol+;VP3R}5y>KEJb1s&+?w zOyTNgIngCTyUSU=YkI2Z>LM&00{bF!S-m!(MQ6%S8=FP+uv57`V`Q6I$h_2&&nCi2 zQF7v|iGh}i7aP$W_kvoZw+~-?pLL5Jp^eFJ9L49joovQS=a2s}Puv^DSLeB?#qkV( z-?+c(<7}@;cJTeH^mh@kgFB~=UbER#b1Squckn95)0AfUpuLTBqs?Ugy2f7kqm^5?4+Cqj2i}_p*j3)zG!|G%57mY+Iadb vQu|q7nMji9oWk5HNW*j&_PLaXHH3j)SE?&c8;p?&@E<_^`3;&ML1X^_8ZaKG literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/radical-kernbeforedegree4000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/radical-kernbeforedegree4000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..1fca6f6d85a20c14c7d95ac2563a94a1bfd44e47 GIT binary patch literal 1376 zcmZWpX;70#7~YRBe1uDaQ22rd0s#st5Kd7CB^)UUhGUFK@!$&yDI!r6DhM?uL5(14 z9X@pPix^xhWU(T9J@pw28FzpO{ z7hv8LJ3!@FUIO6Xe5qEWQK8m)9wWO5}2Z z`F`;(qFEe*KCro1Z^P7(yB65=G{{*jPMN`6Rb8US%p7GZdr)u~+f-PutGJTg$)p_I z_dAE%Sap=va?P{kh+`CaD2g7vsHrj9sXHa-1z|qq`#SbBPW!TWZ|Ul9ic<#L4>)DG zk5}d!hYg)X71E0|LqFv?uZy|@SdU{nL z-D4~{#b1SqS{-{;x~xBHJlXu%RZ(efaqbeYOTT$mUuz-1K`TW|c)JC@yq4n|B_i)U z#>k;O*OQ$IVF$SV+{Y~qv>D07Y46Q?Y3O4Yu9u{VVWnlBF`TBY%%s$+TANS)wefb; z23^#tO;-h7LshevPk2%)lioMCPX}Kgspf6DuI$U92o_1REmIy0PKHz8cw`$#Zj2et zK8-$wuQ&g81R<6YRE&*La*+vK`-2l^OV?p)Dzz4OtWwVzEhe;+MrA>Ii(s@ym)Hv>D3c^n)Cssr;Ci9`cHEP#^+aqcm4Jy zT>1C`iMUJd8W>*Iku7~Rb3yQGV-n`95_HJ?Z?>bG_wPgEUT-)O*P6B5?n#pi{pAb8 z`c7MQA<}A9r8NB?f)D{kzsHz?{<&=T4zF?yEMI9}`rrS1o>8bd*G`+j|~742LQzdB7S_{?8M^?wr;aKDrufC`IlZ7xB#SUtI zkae^@X_Ea=gjyi<=jQOV3r2?bi?gJ#W>^Pc%t5^mfLJJn`6vSDWAk8f;Gj^P3^fJh z3s^hLwMku;aVRqj_UG~~g0QWHAV8`}!U-G)qG%3HE6uIFLbn+GWghfhEjcSI5A?gv z(qt}F#JQLX#$&4NJ_B;sp98Kb*hfb z=-9j=uihncBNkK~#&L5e7IFw0NpB}(%wl&OJX9bG;fQ^r1GdCFS~N4Y*f_Sf2N0Qk|Q|EbSpTkG|;(YMrp$VM~?#EdRma z*2Y3q#JWd$Gdk2(!2G`MMsa)fz$eP7QOh=Wi-=r6RkW6NEJA%e3k}?cvU3b!*q5AS zWqtIZX-B3&aNw8AcXRL^OJaD3Xe*1%5gp#&8Fr?Y?(`TqvL`v{>h%UAcb`rnzqTd9 z8c}=WeQnQ@KRbKvfdSWm8qablQ6P)<;~vFjF${>xH#f3xA(%Qa;*t z`HySI8Z+bHl1l!A))oCm^cdwyLZxEvTyQ)^hPz=rjFCYZXK9Zu!W`HpOzGxU!*V&P z{9vVyYbUHllEjc6gtF{oB)qK%eQW=!r|wJ1<_$zB1~ojI)~*F}l|&Y@A5n zH-e84BO*MB5b)O>DL1}(I`i_ky&bo5@(!B2Ztfa6qmR9n$4t+$&N{t6JT!26^Z6&! zQ?k7xTT%bP(}`=MmG=nNJ#I^4!>33TVJjXBblwY;f77g!mV2q8+4awQ5+BNbr0xJoWJD}r^tRD|^iz(YbVw>#x1M)fEv1sv8)^V06>s7|}1r7Y; z+H#JZv^Oxp#m8i67gxpQu2K_tirS#LeXE*0mB&eNw5^ei(~bVE5@0qO{c93ciJ)s$ U=qiQ{C~jhgA%pODfc$HJ0kfwEHvj+t literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/radical-verticalgap6000-rulethickness1000.woff b/tests/wpt/web-platform-tests/fonts/math/radical-verticalgap6000-rulethickness1000.woff new file mode 100644 index 0000000000000000000000000000000000000000..9808112c7aa934f49db078637fb082d1f0f24df5 GIT binary patch literal 1360 zcmZWoYfO_@7(O2@9|&KOo6sUcTLdbz8vuo z^7)AZK_UQ_Nx&Asu!#qVdHsJx@cDEANI3u?42ZT}vE)5`zTf}=WCFU~Al%R7hi4q% z38JCa1$h(nDR+DA9!Wg-NdU|bLyZf8J5dA3nFT@#tcO7!0rz4fS+8H^WC=wuw}#rs z5W%)-`O+LHLX88t`HZdB`$&K06ciT2p1F|Qn_)E!K!LCr)P%dO<6ts%(KtV_@Ox?2gjj|+3%f7BJajfb zP&<(hG#qLRcQ1$ux9I`kU%yPR)76uFct`oDKt~2i?Id_h0AOj@f!QOJ={a(FlU&|f z^P*BN7g|<{PvYN;gGkS?8*0p7XZ^Ds_OM;fJiMZE)%s?fv5>i!08 z-hF@j2Vo)Q?Qws2bwx0IIME$d^=wKp%h15+IZ?%SWO{9r$Ct@_qnktd&As6Rp6a^K;8%nY2ZcR5y7~mv*~ch}OC7-xJjlX=zpMVe_a- zXl*BV7_rzrD+n6O-TB3p4ny4O9_A|~FwL{h@1uc|sJ`mM#IH>0SjN-N=WoKN5^_%l zI^XGRQB1Rw-RXwu4{YzU{NyQ_=I%Y;>+hE9hN|yshPY(UmeQNb(yu)>4QjAVEoKarIZAt4PiKBYSF%B{1VcfdoVWG zT@ozJPF0omb2jZQC^uM(Wa>ZH4 zL0~$+!DqdO7*wteVtlUh96|wrm4f`R{ue~JP>72}qkggRhWLahBkVY~AF|__lkF1> z!wOZgr;_6W0?yxANLHyRawbN^V+2+bW}?X+27XAwmpdM=L@2J*)ZFU%E42<=v-p(8 zx0BIO6ru5jJQ})#_MnJ?7S(&$p+`^#dIH^CEvOFdD(i1exmHc@vyP;O7+nP}S)JL9 ztema+epDLu;x?1d1(9i)#c^>p`ews?+UPJVm|P{331XJmLbMTS*inLrebo8(+>4iI z%GJL;?v~CCvCp(FDpwm!*A^2M1#_3eE{7$oj?WvNLp(i)9~0asHDIs9@0ZlbgCrKQ`Hme$ZX{BsyTcoTo~I8Y>O`oL z)5tyo&WUAmp_^4DwO)WcBk)i!>g9PsMN18@mZ#v^UA<2Ci=wVj`=~7y+mZIXE#2K1 z$(H1_5QmE2tFZ0kA+*nyT>GZD6&qL^3%4xV)qAz3`)hG6xR9yHpp!w$sFS&8(#$_F IPrW(*1~X9g@c;k- literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/scripts-spaceafterscript3000.woff b/tests/wpt/web-platform-tests/fonts/math/scripts-spaceafterscript3000.woff new file mode 100644 index 0000000000000000000000000000000000000000..44f9ece85703d6a94b51becf5620719618c7e90f GIT binary patch literal 1164 zcmXT-cXRU(3GruOVCiAtW&i??ISh;-8WT9XxhXI(Fk1j+4g&G#;=;t2Zf+sIK(RkS zz7!D4RA+A8=Ia>Z0W?nn$j@Y8V2og5lhpDL);9vNfnqj5oFH^VfGasSv4DYr=>?E) z4wQ3Z;AK9Rk(!tSWOD$;w1C)*z4*L#22c`-9|WqzHJTT%hEqXozZspVk5 zz`&53SOGMTF#yPC17oHDhP=ewRG`=tAPxe$({+nSmuo?OaS4#E08}Fe#0vl07>q0C zBqyXKBrrU(onJEf(a+p{Mg_+E8M+K&E?TYY@o{EkXBO^YVo=+~v7Uhes@hap~u+fbopg4F46=lA{AD^F*bUeW0A z`EG)2#Dezc2L#uB6x`8j{ZV8`@4O2BI|oBcq<3`3eev+WX!rc(!PQw}GZu2mEbQNY zKsV%(PJy)XN2wjmlCdoBlEm&NcQUE=^(1X@=VL!bHO31%J{CwH!|j5<&x z^2O-iy$SpWHfi)vz4_el+vP?XP1}jHk35~dH6|i@iCW>Z1+$l~`xouG)b&iHkylsG z>%MZywfAd}omnKeAv4u0Jvmw}bK0AjFjMp7rCG1%AO52e|5IwteeE)(&tLg9C(J1R zXa3r4t>IF)&ocF;qN^W02y@+f{z=A)Co%uRLC# zPyd})c(J*eu}KK4E2!9CVPuF*WV;O3m&VZi|16K2L)Sz`UIqq@P{y5L^HLHL6BANW zrs(?Vozl_Jyr!$?;p6A)qwT5N)FB})Az@%(WN2WN@&7^k55==ToZDWu>wM{h{z-;W%EY&RRJg2zMF*Pu)%B{1>ZPT)*iH!?q zHsvRIwyp1PN-iv{D@sf9OskW#JN?m$heJYghJ@tQDZ9V_v)DSl@cq5{(cg^Ti~d&q z82o-d%k6vi^)B^ue(ijEUbD<@U%aW(-9>k8VikIhhFEz=UogK7p%idz1x9hDL-5-Ji;3U+ZV3SwE|#Cqlt^K5Rx V){7nj3=v*D4nTJ>14{r91^^E?q-_8I literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/scripts-subscriptbaselinedropmin9000.woff b/tests/wpt/web-platform-tests/fonts/math/scripts-subscriptbaselinedropmin9000.woff new file mode 100644 index 0000000000000000000000000000000000000000..46880c1d0cebf8623e683a52ccbab8f84731a21e GIT binary patch literal 1192 zcmXT-cXRU(3GruOU|GSy%>V?PIt+{;8WT9XxhXI(F#7;yPBJhsa;v8NNpW)v@dfIY z0E$Tgu}pR5)@{CyAs#?66Cghes4jwu&0v;)u)Yz94HUBh;sl`^0$jU|caL zIUyw>f#FeX-0W*dKi{rNeUMhiD3Z8iQE80i%r+)IHZ=iO2AwjFYYYrfwRHy%9GJkY z=GZWiQPhBu!Cr^S9cUT@(0V3_n#8(;7LAQl8yjb~-)wGdOk{0ID@xdqX2N`lXU!ZQ zg99fT_@pF6Bt&M!GelZSWHlJ^^e|-9vH{KCJ86H`VFQ6<_LiOtyEx+iC&gxdZrBj5s3-?>!t)1q_RM47k zU~*qJY@Xzs>gqB{-t%V7-vg`hM8?SzT}|FwwrOHH?O_;w4iIHKCE(?1Fne)RlbCO<{(_(GAy zTHEyf-MpL|3M(i##Z+1%I! zHZXpYI9Mab#;S0ZsYPMmq5uB{KK*xI;l<`=#wH=GuApLng^?jLk?k@#{?izm|DWY? zbLg7L$jiW>5z4p|9Oo$siHQj*DIvOkdZ%nX`=faHi}SRf?JVB>{K@758%`PAc`!XOL104S4qc7I2NVyV z&^dB|=hA{>4~|ZFJ|{jPa>~qkfr}PQT(c6GWHXjMm>n_c;p@c@B4XyupEEOJ(#-kp zJ<1(L8UhAJ28Kpjn&t2R7G~)`zPHzY`sam+S7z9Sn<{BUb=ZF(hnK7@AHiz51!}tLs`}sst~CSqCeyq=2UX2T2tNRvZ^N zkZ`!Fol!mD+5ug6kr~Gh9FTBtu~P1cGT=>Cp4q6B*CK1&Wn}PYFIUQKg93vN#!OL# zvm9oPf;@qhS`KFpD;!ZcsL*~nRA8!-gQ!-5nEZ{H4vikSCWZ(7+$Vs!^aTV10IMRp AtpET3 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/scripts-subscriptshiftdown6000.woff b/tests/wpt/web-platform-tests/fonts/math/scripts-subscriptshiftdown6000.woff new file mode 100644 index 0000000000000000000000000000000000000000..3565f7aaa8d3939933e17f3b8584c7d5421afe54 GIT binary patch literal 1172 zcmXT-cXRU(3GruOV41?e%>V=(2N)PZG$wF%b5meoV0Hk?90KB>>n|^|aB~as1?pu1 z@}+=SraE)$HebgO51^O=ke|iCz!<^Art-)?Sll=*c=Zb=2ujvgQ%q?UvI z0s}*CVg=AV#sDCn4UCxr81fQxQ-NYrfH)H9_T&#iGuR69i%WoP4WJq^AXfO_#$a4A zCpjS{A%WqM@g&jrkACLvGb%9N&(LKMbJ1#DkB>7WJF{>H6NCC)j=c;FP_=aj4;+}l ztmfD-kx|ruk-=Vv$sK4K1JHUVh?>N@gBFdAQyUv+w%=@SY)oWrNh?a&kY>VsiD%6m z9)klX8u+9nL?lFJ#4|)%N@O({@$@ic)UpB1-#YQE7qg*A>v^C01HC&0rmIRXWL>Tj z>$9*dm`ilYU9s(Nzoc)&U;zsb=UsXHCs9?zDLyE z_Vtv$)OCtI>-Zi|!-UB(>F3hHl?+JM;Z#PL)?HLV&RYio1k_w1xypHa9kb4UC^84%UdVu_~Np zYEjsC=>LC#Pyd})c(J*eu}KK4E2!9CVPuF*WV;O3m&VZi|16K2L)Sz`UIqq@P{y5L z^HLHL6BANWrs(_Wozl_Jyr!$?+hk;HblEHD)9KG=czAduBxXuTNN%bBVEku7+8@Qk zU!14?Y-jQ2=T9~l*l@}~=JE8z1c3>O7MdD|4=5h~5ZKWuxx}&eV5{Ou%l!*BX&Bos zc5zgW3_f_`zy+U!<{MQGUw1#aafgMyrSV1;V|)JnUs+_>S$cSUdV0K0-L0;lbL;eu z^7rR;t7m@i`a9{z%J2S7x$o!OFS7Uhd*{=05o`JT>!l{=5YypHsCPyFgWqBMAT&| dM?fprjHB#k;!0eLCn_*#hw%VQ5at&U3;?Eird9v| literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/scripts-subscripttopmax4000.woff b/tests/wpt/web-platform-tests/fonts/math/scripts-subscripttopmax4000.woff new file mode 100644 index 0000000000000000000000000000000000000000..69cd23de8b5a0259109c9e40b3b4664a632d9528 GIT binary patch literal 1160 zcmXT-cXRU(3GruOVCi7sW&i??4hBXLjR~CH+!PoXm@R-Z2Y~p4i06A%H@6U9px6%} zUkZq2sx!B4^K}gI0GcNPl=aCKrtI2P7t~wz?GbvSir!*^a98? z2g*4y@G>9ENKH%uvN?caT0m^ZUVL6V11Ja-GXe5JcBrs~GQZBqEvW$7(E#Lw)N-(2 zU|`5itN@zF7y#t6fiY76LtbKTDo|_+5C;O?X|^lp_veEA;u0WR0jNd{h!y^~F&J0O zNlr*fNMLxhM_$V8;~%ql$sIG}8C)gSWyprREnC>o+{o#|$RO0l0dzf7ZQa2G2PQD9 zIW|mW6g6OEu-9R72b#tJw4Mo~Cb90IMPuXC#>ScLH=7$96Iol*iV`-YnJ{1CSu=;n z;J}FnJ}C(i36UA`43U-+Sq(-!Jq#JOY(Vq3PCTE*WGHZK{}KBO-kM)ts0KuR*)XYN z&C%H$axUxdT~94!zN+KNQoGdYw?ysaxZgZ;&$c-&oDyW9ct-zZ&E%P!4cU8|7D|4P za7}yh(9-C*uAS2M4<~A#m{q;8En+wSqgNzu`_EB@u2-Kewvs<_N%-_;IVK4u+ApWj^pA-JDF5B{Ndj8_j z855i?+WmZ`Cid)s__23fhEiUJqWeSKwr5S!n0e*y9-r4{Asd!ToK^2y5U}viGM*f+ z*DoHoOv#E^UNX_dj*(e$_B3FufZ{A6A*~@nlFf}xU<2bPiGwv_Y^(}rnOYR~9s2)Y z;M0HS6<%y^W^59|>Iy3MR~Q*06WK0<^`$X1|3Ay)=Fl~fk(Yr%Bb0F`*u0d4#KeS@ zlqs5idZ%Zii5u4{#< z61)s%9jw5T0GhrZBvl+(aa`a)!r`iRM(qdj4Y6}n40;Fh<Px# literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/scripts-subsuperscriptgapmin11000-superscriptbottommaxwithsubscript3000.woff b/tests/wpt/web-platform-tests/fonts/math/scripts-subsuperscriptgapmin11000-superscriptbottommaxwithsubscript3000.woff new file mode 100644 index 0000000000000000000000000000000000000000..2f9da79063b371acdec4f7d8ed6a66758920c732 GIT binary patch literal 1252 zcmXT-cXRU(3GruOV0ps8%>V@43m6zdG$wF%b5meoU@id4++|>3ESYI>JJZcA#22VH z04OE}#4^>HTetZ-hIjzQa)A6?pt=YqHWwxTV0|MH8z^Q2#0f$-1h|rO6M<$iD**ZC zKshG{Ugl#Nsfj5-HV05l6Nt^&i_dFk00n_!CO|&O4i%PA=GPgyB^5wB?g059wH)jh zfR-gz0L^0rxrGgknF1K{5_405VpD*)n}LD#lz;M7!Giqa5}>^xw}=6;!v8h~ zOk@-_U}Uh@VR8pbG5}RDLDVGH9kgg{oZ8qpv;AgsV`Cy~OIlIFhBOoAOFV1l@E9C8 z(ZDAqAtE6%Bc37BQX;Fth^L1kqm~V5{@q|hzrzM1wVupEJRErsSUKB5%Cs9_G-(BB zFD!dIZ<^M}307UPfnt3Z78md(JagD%;kLn`kwt0R+wXt>*Vk>_&nWXiQ1I4!iOCJh zJ&P?KNKC)zeL(ikvGt7V66N!l?;T9M#9tx)_{r3Xft%c4A4@m2I3!kjz))_{>;~(K zuJ6o#8{WpS>|vfL!@8$Cx2RWJB4mepw_6_*ACr2-gDJ)QLR{%C!6{!v=BRIJ+mO>1 zcx!$3BhiA?RllR2w+gFw2Vb20%E!kz+($hrV{PP%Gnt1CPVY(E-ZfK9^S4y7eOSb$ z&o}2!-tXj@?W)>UHEUX(pzU(L<7qPjjf$JCtEBF}udX@rjamH7qH9w(uZ%tac30H3 zwR6)$SB86eYF_p~UHo{C=INZ`<*^r2eq6O%{NeTgkFkH1>$}gLHx<>dWi2_WYmo3i z`unx4APe=?pYFWB+BGq9=fsttm%b=nD$yaoE754>=a7?IR=)WkeQfiB<+WE1ZPt!w zd%H2&P0TJuap^0wx6`~h6G7AH#UI{jGrV9)`+pODx76%QP_9r z|9^o`|D9KOvALPCNeHVesMud&WQa^;yA0Ns#?bu#ERUN**F;8M1_q5##+~4Fk&=*@ zn2?h4MZ-_;l#YhxHC;VlEj?Wi-KGzhg}IB2KlAYN^6->QY?=JY+v`(tv9R_jV{an| zs{@OUIfU}``0(`b+_L{6S?6K=Z$jcP#nXSBo0hh>ZnibRp*HjC%tA!4b^(x+%-sAOwNNJ`Ao{Gm22<;O1#3o-HM>ghoCv*&>) z=U(}wCtzS?U}&VJS^oZSVV3^mdwcD-ze&BP{muK)@_Y82+xFJ~>-cB!wfOY>;5Rij z`?Fkjx$dsq!Ep0o({^ayNJvOwXgaO*>Zii5u4{#<61)s%9jw3-2AXdkBvl+(aa`a) z!r`j+MwJC$fmx%PePY*gLj!|jf(y@aEE4lMe8VGcL5FnW@t#FIJoW3DZkqAP@FY1z zv3eLc`6jS9hs@&=_-w#o=wWc;VTq{AQjUODt{F$!&BT?s7Ee@QnE8-53FsE)7Z3~p D=Y-Iq literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/scripts-subsuperscriptgapmin11000.woff b/tests/wpt/web-platform-tests/fonts/math/scripts-subsuperscriptgapmin11000.woff new file mode 100644 index 0000000000000000000000000000000000000000..d85dfee15e32c02906cd32c892d436ba0f6a875b GIT binary patch literal 1180 zcmXT-cXRU(3GruOV41_f%>V=(Ull=*c=Zb=2ujwwJsNG%8Z z1qO!P#0sE!i~&GC8yGVMFytlXrUJ!)>KJ2zZl9pE%2TxJFfs55a40h{K-JbAJaAwF zvzlYWL`G2qMh1HwCU>A|3_$CdAZilp4q7xePHk+Q*?zORu`!XgC9No7Lz)TmC7v~N zcnl7lXyB8Q5Rnj>5zi25DUsD+#M8r&QOgE2fA6IIS%(b-j@et*F9`6uo_FeknWT&g zKWB=DN~44KrnK^&jjo-lI_Vrw3a!fD+&TW@p7={ov8CRcTLQQv_fLLjeSa?N1E%u{ z8S}H(FdOrH5VANVYR!M=plmhQoudl7c<&re{UWi$|M&VQCwHZ%*j7wUZex9QKu~B8 z>$?X>@|emuCcJN~esHn&ft}bzPVWo}8O<)IMj>8{wi5=6OdA`Hv}80-@$-tho^m!Z zGviZGUA$oUfuPyRYr8f*Je+exSW&%Zvf0zLv(K-+@>$w@=}DUB^L=R^nSz&X5}w~@ zvz%LFtFN)|;Jh_mMiZy>OK*r=>yw;ZedA{H$=BEPf;NXwo#JFMJ>KQ7-K|sMH-2nY zt9`fISWWbJ&$Ij4S&uz@Jl}qMbpBoP($#58Un@O78Sz2#|Hi6M6E8<}-T2%5KkJ9t zkt}`Y?^Z9PuS{##J^6yEK=H{9)t~;IwG4eco0b7%2o!$_326-pl5B2l0vi}VNgS*Z zV`Eh~%haN<@6iAM0-ydnukd1XGh>qwR##B5zrx56naFk-tS^nB`TtoSH;1l?jJymC z8lj9k!RDnTBqk=Lq=abs>7CNi(7dLr=c}cs>!I89;j%Dyk@069US1v^35l5!5|Uf$ zKN$a+koHIM@E7N4KigTn`T3L01vZ>AnDcykVuHYg#2qRchYu(o{@~rwD7nP3_uyQ` z!D>iIPLtF?z4$w6JAgSWOisJ$Y5)N0jH>xc7+RSqF zvV?@h47(%d|xDpqfFGqLx2vN2NrI ngo?zIf?ZsTf>>5Kv7ULvJeymv^`eIW!?6=Q^MUch`~rdjaT2sJ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/scripts-superscriptbaselinedropmax10000.woff b/tests/wpt/web-platform-tests/fonts/math/scripts-superscriptbaselinedropmax10000.woff new file mode 100644 index 0000000000000000000000000000000000000000..3f528edfe040de60067bc58da4128678700946a9 GIT binary patch literal 1196 zcmXT-cXRU(3GruOU|GY!%>V?P2@H%N8WT9XxhXI(Fb4o-PBSntiriD()!^n9;tSL( z0~C`2Vwvj9t=oJZLp*?D7C?R$P+bHQn@N*@u)Yz94HUBh;sl`^0$jKv2Uyn_7V5+EDoJ~1Fx_}|80Trnp( zAtfP!;gN3AtMErZbN3k)81HB3GKjfowXVm1|1K->S=trxssE}TAZmUkexb|*V4 zKkLQ{fv+!WW5vxEq}^PzApb&k{F3SW9A7Gb(flRyx7>Wny{L?XEe7{}($pqQP zlv`EUy)v2KcaPP#!pC>t)Rq{-_^M-?BfErCG#1?P7$oBVVJK(iY9#69QgLOyk%&Ilylv zZ=xmd-jdAgPh<^@UK(D0ts=g5h3>APuSaywOuiYyv(|JXUvch>G|BKe(~K@DJ-9VF z`PRPoIx}xx+O=@s;+VqaD@we7H->teCoc9`zLWQjUGHYE$TqWkFJkwc^4Z19?^X2R z{PRCk>SM|j^;3_<9ZO}m?h%zJ`1^kE>N#AsXK3ir5wX(T$381_YKAV?_?@z}j%niA(|5penUIjykRZwC z#wM_V@sq^C8ZkCjg|kd83i}TI|1a?Azw-(&Ha9ai31M{w75giU43UX!m%;kd7@Gf| z<#BW9n#jn@z@QPzxDy=jDG7;*2`MR8H2m~V>1b$P)78`U&}}N1B-9;TZ1g!Oxa$*l zk+3!oZ$m@l#LmWvj=$OM5A$aplQ;6QPnlWovEj=HgED5u)jWrt>m=FO7$w`(n~Zp5 zjCyRGc+M#BX7TLfQ9bvQb*k&kmy)VnQYU9|xv{mSaqa6=mE32?)pzvh&yzDdRcHRJ zblKG$@tlcKnORtQ@uZ^f_vDvpqc=a{r4>W927@AHiz51!}tLs`}sst~CSqCeyw1DP;2T2tNRvZ^N zkZ`!Fy)k2fp2MCfgBiyT9FTBtu~P1cGT=>Cp4q6B*CK1&Wn}PYFIUQKg93vN#!OL# zvm9oPf;@qhS`KFpD;!ZcsL*~nRA8!-gQ!-5nEZ{H4vikSCWfQ)xwimw>I(=4091^% A#{d8T literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/scripts-superscriptbottommin8000.woff b/tests/wpt/web-platform-tests/fonts/math/scripts-superscriptbottommin8000.woff new file mode 100644 index 0000000000000000000000000000000000000000..f3937e869bcf9e98d8b71cfd78c2111289f8e73c GIT binary patch literal 1176 zcmXT-cXRU(3GruOV41V=(PZ$_MG$wF%b5meoV0Hk?90lV4FK&IQb#n{x1?uGh z@}+=SraE)$HebgO51^O|ke|iCz!<^ArnAXESlAvBLj02IGo3 z$q6Y52@FX~+qbhk`kA}WsK9tXLzh9!MXPl^KF*Bn%)%W^3=-@d@eB-5wRHy%9GJkY z=GZWiQPhBu!Cr^S9cUT@(0V3_n#8(;7LAQl8yjb~-)wGdOk{0ID@xdqX2N`lXU!ZQ zg99fT_@pF6Bt&M!GelZSWHlJ^^e|-9vH{KCJ86H`VFQ6<_LlWt(=TmwX4h>^DVSiS zqA1|Ok-~9u)>f5cN2G)#y(KTDzcen&qZ7%_Hp>-Y?mGzC4|I$3bqE zSI-$&A7B#7Z&be1x%vRF&ynH>YAGf1J6dnQFf5q;e0`6|+3c#*TB}nUHM_k{bWAF($uuTinT+#b$=l`8tPXKA+nD^h`;|PQNEp((mV& zUHM|t&3rbX{z#Trvp3h|YVqB{^Tf7p-hA)&;e#^nUQ-3@r~L`c3jF$P_1*_9m$LM1 z)jWH4{=4nFc9CJqx@Ge9zOvlaU$~>+1mAqGX*q5G*Ruk)JzKj@UyM&VH(Me6Kf@-k z%U26tUE7eTWWOuK>-#A#{lKg0|Bh@72F4C3?h+Ex8WJSg+}H#*Fn*FaSR=;9s&JO6 zMPc8e|NjL({dZpB#pY(lCLye@pkjZ8ks&gX?J`(j8bkB{vpjANT@x9385lG|8Fzxs zOG!vfOh`!y(ecwerK6#FO;=CXL$|45(kE}PPsPQ?pLKY6cqAldN=Qg4^yf6A~@-H4Yz8Jp3WHqfv5+WADLU#j}?C7i`in zwq5Mvs2mx5@Wg=&J_pS=svN%VesJRs3wulBjVi|W{S%lutOPhDBxguSPMxy*`#+1V z(+l6i~6F}vR3uuc<6P54nQdSYARg9HKQOIi-I1ap{_B^G@OX_(RO*x}gZ$hUm8 ff|hH8R>%PzyA3-90wsD`7(dVEz5~paFCZ8IhLW$z literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/scripts-superscriptshiftup7000.woff b/tests/wpt/web-platform-tests/fonts/math/scripts-superscriptshiftup7000.woff new file mode 100644 index 0000000000000000000000000000000000000000..845afdf2ff3f5653a893e1d4c06b3ef800856224 GIT binary patch literal 1164 zcmXT-cXRU(3GruOVCiAtW&i??0}PBH8WT9XxhXI(Fk1j+4gvAcv*$OtySat<0>%CS z`BFeEQ=PeWo3CSt2hcnTAU}(NfiZ%KP2-e*u)Yz94HUBh;sl`^0$j#2Q9W6jUNG%8Z z1qO!P#0sE!i~&GC8yGVMFytlXrUJ#L0C5n|oyo#6Z=4JAi%WoP1)v%+AXfO_#$a4A zCpjS{A%P)Df1YUW$3JHAk~?O`Gq_5u%a9FsTeh&FxslU_k%5(g{Tl-VRBheC0|zEB zt2s7IWE3@EWU$v^atE5m0JNS7q9(EKphaWj)W*h{?Khhn8xvVu(uxu`q?s^Z;#o6? z$Kb$;20keX5ebnQ@eGlc5?KvKJUt814os?%&es#>M0ls@ES*sP;?8l6+Mc}HMNaiMUtL((8kD3s_kGOTVwML&`W*rF zv1^#zUpz1^=#j2r$$Owz#dXI;J&!%_p;jDQ-sOL1POPYOe7o<|Cz-@9qk^93J?wc8 z40rL}Ibu@9eW$5ocjN6D$M|O)UT~l@)a2WVhYA;*yX>9{2yrQ2l8UY>IwiVQQfGSN zlyz@r)i69;W-+yDzV$`#-$@!*J=Sd3i(h}_Ow{C8YcIDYPOJQv&uXkI^iJ7w@!Q?% z>Tf;nSwHjr)8y+NYccyq^2Di*C%>MP?cO-$-v8xE_9BrXe|LCIo8uLBHtB#!Bj@*e zs}fre$GA>F{3$pM$!DvhYnqxKlX;RttecS@`%0m*~&bpg})ZMPF=F9@rrKZ zVH3M`6M}gE+&x!4-=9Tnr4S@O5)#rH5+vE&*aS8(ev&v?BgV$6aF(e>Vc((u{{=q% zcV6Me=4QqwA*`;TVt<8^Au^HeGB~c&7@Gf|<#BW9n#jn@z@QPzxD#w%Nu!FpVzIP`MvA! zq#rB4`#0sjpKrg&-tX_7PtQfHsn!| z1TTYG2P?2NfTr;WNfifH92Yo{aJZ_SQGY_;0sVe)pX7vu9%ZMwf-br<+BQx+;~;2$ zs87;WQsQ46>!w@@3yC8QTev2qvCKZe(YC@yRN+~oK+=SS35Q>5b$AIb;1V_H=Fib{ V5ph#?WZ=ET{Q;O0fh7P40{}qhsonqp literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/scripts-superscriptshiftupcramped5000.woff b/tests/wpt/web-platform-tests/fonts/math/scripts-superscriptshiftupcramped5000.woff new file mode 100644 index 0000000000000000000000000000000000000000..c85e7f65135328f6bea5a9e35bf8c16c4f189ee6 GIT binary patch literal 1188 zcmXT-cXRU(3GruOU|GVz%>V?PHVlj)8WT9XxhXI(Fna)HPBJhs@?BuQ@X*aI#22Vn z1Slp2#4^>HTetZ-h5*&D7y$WMKy?vJYzn{pgY}I-Y@nD85GM%T5a3GAO)OwwVEO^% zn*-&X7Dc6g{NfTI+W@FW42Tu}w=o!3 z%t=m2Nl0LL^hmPZ^wH1UeMSYw`x&|nVlG;(>+x}BWM>xcU}BKG!jZwi099Le@W6oy z%xaDe6B$Jf7#Zw!nB0M;F#xS+f~ZNXJ803^IJL2HX8XPa}mb9XT4QVFKmw499 z;W0RHqJd9JLPSDjMm$5Lr9@VP5l;_8MlBoA{G*fhXB{>WIA(8M?=}6BxJCx2N^`S_ z2a_aMrh>D_GN7{bXtHoawt-eiG;)?ZJ*cvh8_uZH8N_Gi1 zXzx)t^zwCrq=nLcw!T8)&I7!6T=N@ezc})}F?vVee5UQ0{}-fR*|TKZhrmANB3X-L zEbkkoD|+&n%{O-FGi_IRl>ET#?fDrCU0RhlXXFGPa9YsKV|$8GMZ|51XwW;6Dc)JZ z66+?#-MVdB$$#e5tBBXRiLU0aI~zlkH+to6jOtoxn7S-@wf8Q`V>>Tvxk;(~;eRq` z+k0!)Oy{EA=jJ6n|9eehliv1(O;O?3RGtMqEe+t>yRlts_2t;9>)V5@w%gD7Q2cD? z{+(YprTs6uztv8eb-CidkL#A#a3!Y&UYWf9WkTG$w|mxX-zo8B>5Pu}($>1HIT|x} zSk6t>;8*YCSn*N-wU{+ZA+Wz~BwJLie>wd{^fhQv=oLRv$DB%2$Xzy`)o z5(jI<*jN?LGPNk|JM{m*z^DJtE4tZ3p?OVLPuD}YsmRFavX>Y4q;8>N?x0{FULGC^ ziJ1}-l3VIO82_1&_DAvX7w2g|+gZH%`IF5BHk>lJ^K5!zg205t9qJl~4=5f!p?2f| z&!q*&9-Iw$Feg4Ba>~qkfr}PQT(c6GTr-wEm>n_c;p@c@B4XyupEEOJ(#-kpQ?xsZ zwFC@|3=EC5G|S)rEzHt?d~dJ)_BW~bw7+>jT7J)-bKBnfe;xlUz80UJAN;1KW`CB; zF4x_aI~aa1k9Gv6U{Lx_NJwF5I<55Tr^2tUYlW#2ybNX?tiVzNn)V+gRUBAxT;M>$ z;i~pV1%Y=8YuL1B96NA8!o9^xxg*MeH(7aRqf%artZ|o-!JoZcDYp#@3_2JyMHS9+ ym^BLW1XgM}oH?v;MB$)9`{hu9sY(u_S_xwEH)1+8dfb{AERXR>0CVUI2nGN{aJ%3D literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/stack-axisheight7000.woff b/tests/wpt/web-platform-tests/fonts/math/stack-axisheight7000.woff new file mode 100644 index 0000000000000000000000000000000000000000..7a9dc5d4cb1bbc758d2ecf34641e331e9ac7acb0 GIT binary patch literal 1144 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 X1Tpy=F&!E`ZcPmOjXc2I_yU3f_5QOn literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/stack-displaystylegapmin4000.woff b/tests/wpt/web-platform-tests/fonts/math/stack-displaystylegapmin4000.woff new file mode 100644 index 0000000000000000000000000000000000000000..a94d6286eabf8dd95204ccbd72d404c752db6998 GIT binary patch literal 1176 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 literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/stack-topshiftup9000.woff b/tests/wpt/web-platform-tests/fonts/math/stack-topshiftup9000.woff new file mode 100644 index 0000000000000000000000000000000000000000..d036e893087cef4dc4ad62681b968f9ef75be9c8 GIT binary patch literal 1152 zcmXT-cXRU(3GruOU}<3BW&i>X0R~18jR~CH+!PoXm<@n3dx7}&JCikHZf+sIK(P-% zz7!D4RA=ss^K}gI0Gh`Gd>$ z4wQ3Z;AK9Rk(!tSWOD$;w1C)*z4-d&44@!T%ml~>*`dM`%KSPbx1<7S2M{xW)N-(2 zU|`5itN@zF7y#t6fiY76LtbKTDo|_+5PJgcx}0vESznM}Tmp2n1W=6_5G(v|V=%6m zlbn!}kihWh$hCc{AOD!eOYWE%&)_PtE@Q5q`?7@%&5fKcj0}1gIjtBNpla(59yl<8 zSh*7HBuGn-mdyE2)g)|`pZ zxFvZ|DIeW{VewtXT+!NC?x31S(=4JRR{gnSlqmpOMx|a9Nd`y>wBpv&|fA5v7Ue3~4b)WW1 z>%6_FpS$z^sfz(8XZ~56-S$=GqSnf3MIYJBWEQ7*?JbjBV#O1>z3c3@l9;U_Ui_dsVEiO;uttoHRpBgCi^9G`|Njeo`tQ8Li_Oi9 zO+r{*LB;+GBST~&+hwr6G=}E?XL;Nlx+XI6GB9X_GVTPMmy(c}n2?epqO0fWbMBh% zNqvoTCw#OubvKw87$hX5BqgL=_;>L92j^KI+j%bYM?RAm(y_Jax$AI1>+puA__jtz zhqlD63wW5@c@C#4vZYO6GiB3evw!}l>C~b#UwVXCdsBQ_m6@H5S??d2#1k*idi>F& zKTpmanRMolP0qBWQVszFBLhPtEzR=xe+#qpAK%++zx_?>J?(GakCxxF=iIip{$IyG zi?79}=Lf&3so9_9vdeXMV?P0t}2G8WT9XxhXI(Fh>AoJ~A*c8vH*#=c$`ph%ZpD z4^T`Bh-IpCP+bHQn?$#Nu)Yz94HR<#;sl`|hBe8#i3LFOfLxFm zqnESTqqL0F#1tT#11P2g#Ae)a*4s0Hfx|rz3ZNY~fP5|xX1~C| zkegTmG>B(#%CU*}T04`NbtbwgXU&7!WJ`Z(}g7n3J54 zl90ggsIq5`*~dR-@sc}c#xuA|tjqYX=elfWe8W*oi5U(y3=+j$W>B?t2M-*Wz^vw& z#&2svHeTx4>T|O!Bic1 z%lT9u_fnA-v4!lJ2ZP^d&N5rLCAv)9tCoHKq222D4{h#O{-GLa!^!1jtnzvG*)zw_ z=rnNeQF8ctC*hT4!-3h)1+M@25_35A!<(Iag7d2L9vIbpx%1>Fw{i0?$;IuPRy|-) zmN>7N_wnJ*w&f2_70WJuaJRVGO7^^O&moEL7j8WEm@1Q`vN}QnR40|E>tzYoAw>&g`B9YX&b?bY@jI8=y{QT^ zdfe}1f6ebyV$4h4@JZ9UUl_zEocO-~ZMYT}bC|}li{ED%UbHs9m^Qa7&%JBmkKBM| zD;$@kguMBs(mgl$UcjPVg@Myn7Fk}+n6doWr)jNIRt1+-bgkRRpt@!CS72;`;wd2^ ztsy~@&5cc@{d^u!#h5zJHDCr#!2woyTsZ#ao<@#am3a1o)z-izR#guGEI-!n4^V3X&z_f zzEe8lMrZAgosaSQr}^oT@4gRD|4cJvyTR15@onSM4F9NaCL0WYat3BEpL1*Rhue!8 z+C~2T5^)phXLr~(RnMTJ$u(+PO{CcSoiz`-*Z-dolNNrGclI6C%^}Y=AAb_ZF;8@* z&X1bwbLJM?3hY;Ou-QK&D_Ohw*cENz856r-zb?IF=4-qqbZ^!wKaropFGMpo)ou=Z zdt#-s?Ujf7g6Ac^2)TayAY1y2tl#jkOkrp`t@P@r!mqAx?}H?G8EmZBVja8-MwNdc2rw$Q>dDQ4zmnU<4#nftAjJE9DDlNX;}yty~PaIpsS;rpu{ zw(&BvH%m+iW4zRpFtsP4<5VzXk{p{N8z-CPoOMkrL>N~EFmC>F;F*(4qKOa-gMBvl NLSPnr0l}ag2>@Hl>>~gG literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/stretchstack-gapabovemin7000.woff b/tests/wpt/web-platform-tests/fonts/math/stretchstack-gapabovemin7000.woff new file mode 100644 index 0000000000000000000000000000000000000000..af61d8ed329316166bb3b56f595f41fa8d3025e3 GIT binary patch literal 1236 zcmXT-cXRU(3GruOV7bD;%>V=(Cm0w(G$wF%b5meoVD%#VNG&wVgUmK(-(*s zqnESTqqL0F#1x=94xpG05SwwwS#Qq(3IfGUfP9c0Djc@VuQPH>Du8yJ0P?v&nEe6+ zLvCUP&^*QfAfFA4nFAQ|5_405Vl#j^8t8Vjfa$E_1^LA#KsLxcF(6j>-^O5EF()}8 zB_V;~k*{VC`=g(^`-}>V_cL@E#9aIr+vNjfb{88MG*&P;z2nw}s;xVC;J^fCHOCw` zwvYoX3;_$6fj(ql09wz?zyMN{Sa;B(v2ki+8R}KpHdoBqI&p8-VFQuY{yFk5E`4Kkx)|ia z#;)o7D2=<3M>TS@_OTmkN4U0eJn7suWuLqJ;$-=S-Y++<^=lR5+PLA1r`7XUuec7F z#wlE=`yNp(Ch_2Aaf9@p>UR$uWo*g~1@h-r@8DhX+>Y(wJgP%b(jVa!BUvRz7#-xyQtVj!7L7%6-Bb89tuU67N!EuFug8 z*ciF$Q<|;1_<>7u=TqmU`SCrTI7h>Fs`TScXQT91ojSI&aOcuBix#^avP(NsmF7|1 zVsqa>yjk|~+!YoEMU9f1S4eAxtLdH7N`F*4W7guEH-n2#bk7XB^Y`!{=lxle%Faey znrk917p!gg{QrHE=i zz$oT-)259tmT|ld-QatwYrWdkOOLHqd#8S4HBy;12^=>G326-pl5B2l0tJkpBo5Yy zvGFRLWm_UCIYUB3ME&o7{wK{Z|MR~Wb-2pRs4UIg)XXd}N&XcBLwyeCY*5^$F*N@_ z%j4$IHIb2*fk7jbaVI#=QxXyr6H-#9=;~>D>3W{i(DU>;cg@#d$HV88zW3R)XN=7a z3=$Gjk`hub{5^R7gLB)*cAd-ome1scbZl*U?%v&>Rd;p6DT6tWrza)|Oi0|Jqj6Y4 z?eGcpBL|o+9XgwE;KAVu6C*;V#K%pUIWO?hocI9FG>r_EY%K{%iCLOI)TX8U_@!YX zCjMMK9msz6{9!RyTsjk@aRRQupfbP5 zpZCA$54PX_$MWd8CYRMMGpwLb2i^11U}>hVKE~fxs;H0)jy~5CBbP)p!5^ literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/stretchstack-gapbelowmin11000.woff b/tests/wpt/web-platform-tests/fonts/math/stretchstack-gapbelowmin11000.woff new file mode 100644 index 0000000000000000000000000000000000000000..8900a81419f25da6cea3ed8534dbb2a72ba73b0c GIT binary patch literal 1236 zcmXT-cXRU(3GruOV7bD;%>V=(cNiE!G$wF%b5meoVD0?6kAVfG6Q z47rIFK=T*_fP6MEW)5J;OUz9Lip>DxNTAzYD@>d=733F}0NEh(#DG}ge;b2w#hm1X zl!OF^NAEdLCq4R^yU(b=ct1mzLCnQ}v0XkuW_PiHL1P6&lmYj8sM@-N2M$bNR&&g8 zV+%RJ!Vs{48R$a>2B7uK3=AMOiFF4p8XKoJHqLCn+1%Ke$l8)tl&~Sqg!vNBnmIfM z2RM#!@tj!D=;&A|^qE^ho86O_MT0?6nW0{lZF9w(trIV19WoGU`yVEoBYs$1pvX8N zLiMB5k`3H~dnBq}*Xl0S%~H;6`w^7PzsX&)y7g_o)E-HoO14@0me1{f7BfANThDQ! zjz6N3&tS)!_7{&Y7qb_Bc(k+I@x#NN?R7t1{A6qXaOTW{>eE*@2b;<$w0)FudT_Ux zT`Ydy?lu3P?PM3cSGmto#x9YuSNYtUASHLlxd#L^-R7uI2$(VHnumm@#rhqy7C*ai zM(b{!=emYgyLrAd#lv_mPn_XlD*F0}*z2h?u5a}_ePr6KOjA)d$^V+#W~*DaI3M{e zTy@iETl!I9zBMry8yEGbE!d{EIWzFK%3asWqC08TwN_K61_c@YS^jT%%F8v;=F(y( z?rc5oBbKxFNBhmN^#;j#o5f>qbuL}^CTO;e@Z^mm8-IL_>RBDRB;|_9msxjj2V_QU zto40pa%$_My?kafSN?2r@-ofqiM@Ene4_6hHDC;Z;wB*>tsy~@&5cc+DJW^JmW(o0u3F zBqXFHC8S*Vd+_`R=eCdSI+yt^pUDg9*xK~my}LiF?&^k91~E^jCng9?NZg^Oaacj^ zu!hEw15B3=olQ9K;Piy45g}9JAWGjlrHvxtYMem&DoGaeb9B!?(g596j#qb5Zyf7Xsl ri53YJi6;fSV=(I~W*2G$wF%b5meoVD5gwy^nt8?lUSd-p|lw5OeWgY?lv^*T0QjWgSCHa9jVvbLlZC2UADVZOw(W)6?R z0gfYFJSP@3Iyx2#edbosX7}V}(O^(iW~f(X+gvec>%{$8hYbXd*<02x@P2tgS9S}_ zrGp2#j!Z~QIcaz3Q%9q-=dYOB*4 zMa&9X*!Qr%TX3lSfnLx@p&jg+`#$mp+1LmHYje>7@Gf| z<#BW9n#jn@z@QPzxDyoTwfzUZ4m*gr-p@Y9rM66KTZ*CAgt)+3wQS>T z5;js+I&<&n56ipf_>c6?Hw992pFA?KRzjZk%sxF zy|avtF;q7gY-8Ra^49nKJvKAN`+`|-rv$5u)Uk;?Xgc&>wN>!w2d)zjRaw})Z={r- zwSQFyWjlGV^ zx8`!5IidRYvfazs>!fcjyIXoTQ>MD)i+D!SjSb;{Z>-F=y>fA8@V&q%Auk^P;lI8- zr4bs2DGW`gm0tZ+_|^68eUJn%gN+qiEF|p%^U{N)iUTW-3mix|T-DxaQo!VuEwr#q zikUfChPkCy|6+ydF!_J=p-NVD;=87i!0S|WK+OY)$=)a6V^ sYo(TY0x!&r*F^W>e1HiFy(;%jAO7jShk5t4! zt`gcCVO$Cu70!{#=aDuYauE=;GwIlxs#h7{dN{NfL*FuR3B9IUqtZa#4svrLLhL^l z@7F;RazW6x^sfB|;m03r-?PSLxS4t_s2k_jIQ@ zF6gr1vyB-rFAV_TLkO(f!Tg-sR9ZvRKpppdjIfM{D2a2`O7J0mQfEzATwkp;Uitv9 zk}LpWvnN~ri_L8@naUCG$TSL7m^dJ@4uK~G0H)^vV2e@Zwixo6Jq%M__*((PsJL6T z8|YKoAmkQyqZSj@-7q>#!(FPUeHvU+W)>EhCXp|6yz<0QA9Ka6-M2fs z-4Cnhm-vn6L=jc5RnOf79czqf2#-vS{?z-Y?H;59@bns{?w-6B#E5 z$j&2`v45|qPl^cJU+;?GTbA%9&eXr3M7|sw__3*W_1O3Q@>sgvnwQ;JEmvJ#)$4k8 zm?M{8ICgrDKf1-2dbn>>r!-hvDSaw#6uW8v$ZQyzzBO4sQB|XFi@IARlf)bweMx3( zKT)RNW{GX@N7Gs(O`sI&IK+B}w`}I4h``L+DwTZ1sF2&GR;$x->r^Z6P1p9PY=jCy zH33PIm;+CYJEs11%`9nlVaJRKc18fN(kM{M-7_&?*(J(KHIpak2i_ z=EeEnikBuNnCHYUnVVpaF-tpzfq^2?P3|wAUi`0Zdl0SlwkJ6G$I8j_Eg6AG!IXN zHtkzKc>mzaSLC4Un3qL9c#w1Venj4)yxP(8y`8>U;o)^Mf~h*cpZmBsFE}k_QEu0c zjN+{4hBpnYSsn+J!S^IZZh#%U!|7dr(6k2RU!V2#wP3X9)nEob1&B|gk?(x47ayo| zOy68_G|_Ee6tWyf+(eG3PhF$8)4HSZS}r>s>ahEYFKz4AJ-a6^ze5U+ZBtWA(d|Dc zGimOq0~#ne!9GH?_z^9RdycZ(7hqACGqxdgHFv2mTXBf3wJ_#wJ6d&~cA!s>B?9D6 J_#;5rh8WT9XxhXI(FjoL&{xL8xR-3FSmv(at@nv9O z0f|Wgu}pQ2oSm;@hzC$?3Xop{R2RX-=AP{ztZxKj1I6rtI6>%_(4pkq!~&ps5aM@7rvol;A|I8Mz9_u))QG#B`$A90_pIB&@Q)8JE2uRo|0xX^9+;4 zQFWm$=ULMx3j1v6zH>13lZfR}=X9x^-JVr4KRMD@_T72>r*E3)_m;)KA6zYH;?gT( z?>|}jL`42%^%K2S=c1n|cYIMR;tzdQz}~GJC%N>96srx(uM>s~byXYN>=J$w4C>C@8AZ;3rv;NCrb zfw9|3%{Fa0@4l>}gXQxt&zNa4srI)?m|oFj$8&|Q*=H|ncxCrLKYPmJcT&u<&v$bE z1YKWd;5#WC|LXK+u2{o=%WwwgcB2%9#_WCnBTtvP zw`y0dda(aJzt7ua{%fP94W+yab?d@QtyZn}Ik_ftF7wODt{gGP;~iQOv|<9HjdXfe z-~8s}WtwxYLgM)^rdc7s^da$=kdW4pAj#&&Ch&prlf=OqF*as}vy3f14pEJX%$Ixr z{}){IpZ`Dm->Yq}n3&zn*i!Vu96aVdYv^=)X5_5F@Wz6t51bCt7@Gf|<#BW9n#jn@ zz@QPzxD#xCN{#kEN-BbGBx|e)?{QS;pdwS{ko%J~Db6&&H(7@mV>q!+= zF~*aV&OA9X=gSc$XXgbL%*w*d%FXZi>)PZm_1LG(s5@cwe?r2`hly|A{R{oPx-GOV zupz#!(b1tTFeaeQ(WlKYw4+gSiEFQ7TjHeRI>%JO6I`slDZZ@A%+AKF_m52CiI-!l{4Dn2NDif zwKMYl5H}EDQ(v$}O)zUYFj$TWEVMS{v16Q5jSN=2AwRP^~^7T JB?1tG0004z^G5&x literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/underover-accentbaseheight4000-underbarextradescender5000.woff b/tests/wpt/web-platform-tests/fonts/math/underover-accentbaseheight4000-underbarextradescender5000.woff new file mode 100644 index 0000000000000000000000000000000000000000..bb3e4658d8cd78230ab6b9f8564881ecc6ad02e5 GIT binary patch literal 1300 zcmZWoeNa@F4;+WyJStpbVO5D%D_UNP>hC zLyL+QMnpvf;}%9-nFL)=EVU3ObD)14^}Dbx8qVA2T$eOFP&GakGG=M{!ooSx~09eW$AE#sQIZc zD&Z~$`~{x%|M{vr&E{%KkZ31{WSFTS?Gy#R5CE8-3V_RpPk=PX_N}tC>eYPZRm#ZJ^>pWzb~Pr`uF3 zV}2oByS>Q&!35_=GhOdMt>)xOMpSoW8*05Rcukc*308ZT=n1>7VUxZ7jLI)lK^2=i zw0QyK9%a=SWevgc)8_an7CX=&btjcGH%gFHIma`~z5UP`@#C`fhUg(*b_ne+73y<_y4y0OaQXNGBs@zO|fT}S%x#Gzkz@GhTgv#%wN)i)L> zvK7*Mw3)VM;R;j0G;`}Td#GWr_;SANZo0~<=dF`J>K#83o_Oqe;mfSL%<}UaCz6)W z-<6w(O`N#*uy?3@{?&*ltt(~}F`G*t-rv#1skzy*a*u~`)afjG`SoU$b@DyGXJ46V z?7As(QQ-cq%dw}Arp%*7)lK21+!0gE>GA<-*BZKT+l$tVLLtAV?E~kt-u4{XyW5ct zTA|Iu+x34qp0B~#2!{B)CD~Y=B}|0EwU7=-;y%|Bl;J9;lYY@T*Xj0gME`{+;&2VO;?-_7L0HX;~oiY*q~;u(^pzISObJZ8~a{phon1tb?si zSoL=`@qS6)2eIyKMMc|$h6Sws$u1-d@}7t`GLhIem@SaU%1WkmGv?7&(4;|rzv zT#t_#@7iBM@^&l~_#n$pwFl7)TVPqb>8J0zH!>w%qvN)Oolm?2eoE`-^_t&K1y{?u z%$;1MDN_@%G}~<{tI?LBsjU!wE7FO)TP|>e<2Ath8WT9XxhXI(FjoL&{xUEyR(s#7E_QPZ@nv9O z0f|Wgu}pQ2oSm;@hzC$?3Xoq6R2RX-W`5c~Sl3i69ffc7Q;)rbMH!v8h~col&TPNg+}N1N+LBh3up!Na`4Z2X zIXngn&NT2zNr=qIGuY3tsc3;xPk|+?LJA8*OE}vdp#H1D2eX(A1!`YMW$G{89#^cX zQKG87=&1L^ruIe4o4!b0f1syxEN$_F^-d~J9;5()Fdc%2zN531QHIlp8C2}^TPh--4QXr6_?A*SMy>rSc*0g{- zCo`9SIkv)rC$cqOzvKFW=9_PFH=dfCkuH02@=J#^Q%nd- zmTt(>;@Ivt-kQSu_XbR32~SxSv-0eO*FUTs?I#<4oLYJ>YT2cKp}Txk3?BVCA0_AK zQ+WKumE-cinT0o(2`7g~ec2V%bL9Q1a|gcYd8P(!KiB!?1h-}gB4&TDS>q(7m+SOmpiLPA&N8<6I7Brj zGGFff|6g#;fBygMf3LQ^Vq$hPV@uHsbMTn=tfABGnUS*w!y5~pKCn4y49)+~^0+y4 zO=RR{V9*F<+zB>6B_S~}Atl8`|E#yC?kRn5-Alecetu`QJ-u}N&U&2nIj>=8Xkc)G z)mvRvj8Sw-ikkYfCF)``n2$SVZBgZc3N)ehTunc15q zCWJ9w>PeW|lhAQ0m@!F?O_7b0&2rAVrWGQLs{$A||2Xi>$tBT5h=pNuBCrHuegVOt G91H-3knrFD literal 0 HcmV?d00001 diff --git a/tests/wpt/web-platform-tests/fonts/math/xheight500.woff b/tests/wpt/web-platform-tests/fonts/math/xheight500.woff new file mode 100644 index 0000000000000000000000000000000000000000..76a37da9e4092a0054320574976216e87c7462a3 GIT binary patch literal 1048 zcmXT-cXRU(3GruOV3AXMp&Il$?f#n_Gx4Q0xPc zF9pOh)j8r8{=xc23=E7OK)wSICkWjT3QNvSEMQ<@Is)Xo0_D6I9*?lYK^iDYKb=X0q?f*;PH%>8M7};EM#C44ur`?KOnWDIo zTl{Xj&}4^~Q#`xA@!r|-Nic?MUxN9+nLWD%O`M~Equ6> zS2NG1Jfr>y6PvY6gsOWNkE+VAh-3#z2ghWmD5YiUi+fg_4g4VC_VnDm$=eScdc$Yt zzd7jJb!JHo+li-loS8Opj(BV2^TL_ZZMGZzKHbedBiD6IXQk2ct{VUHE?YC5yp?J% z>x6}!t}iROWTaH6+&4qd@bUlXhqo3R9-XlL(ci5iPMdX|lP|llDXXS`N@vlkvbvHL z@%BT1V|YpQK99eAmsm5*BW#(%I(2vK4)N+2dHp~3v#{u^s9m7=Nk~X*NRVW6V-qM~ z{3LO(MvRSD;Vjz{Ny!P56-hbw)0%(k9;OCq+@H-bNBB4th$m7rwqP)IBj6Sal*hyWJ=1X!+{e5 zCl8!Cv0_QioxR_WuiV>H{r%saP17sa-_Y-zU-e(*# +Document.exitFullscreen() + + + +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/document-fullscreen-element-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/document-fullscreen-element-manual.html new file mode 100644 index 00000000000..473bdbb0f61 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/document-fullscreen-element-manual.html @@ -0,0 +1,32 @@ + +Document.fullscreenElement + + + +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenchange-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenchange-manual.html new file mode 100644 index 00000000000..d77872ffb58 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenchange-manual.html @@ -0,0 +1,15 @@ + +Document.onfullscreenchange + + + +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html new file mode 100644 index 00000000000..a630fe2e8fa --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html @@ -0,0 +1,21 @@ + +Element ready check for containing iframe + + + +
                                                                                        + + + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-enabled-flag-not-set-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-enabled-flag-not-set-manual.html new file mode 100644 index 00000000000..501767dd629 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-enabled-flag-not-set-manual.html @@ -0,0 +1,19 @@ + +Element ready check with enabled flag not set + + + +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html new file mode 100644 index 00000000000..82672cbfd60 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html @@ -0,0 +1,23 @@ + +Element ready check for sibling of fullscreen element + + + +
                                                                                        +
                                                                                        +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-iframe-child-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-iframe-child-manual.html new file mode 100644 index 00000000000..598fcfecf95 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-iframe-child-manual.html @@ -0,0 +1,28 @@ + +Element ready check for child of a fullscreen iframe + + + +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-iframe-child-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-iframe-child-manual.html new file mode 100644 index 00000000000..0c1dd29a1e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-iframe-child-manual.html @@ -0,0 +1,17 @@ + +Element ready check for child of iframe + + + +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-not-in-document-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-not-in-document-manual.html new file mode 100644 index 00000000000..904d319908d --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-not-in-document-manual.html @@ -0,0 +1,15 @@ + +Element ready check for element not in a document + + + +
                                                                                        + 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 new file mode 100644 index 00000000000..81bd6a05e34 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-manual.html @@ -0,0 +1,22 @@ + +Element.requestFullscreen() + + + +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html new file mode 100644 index 00000000000..88eff090abe --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html @@ -0,0 +1,28 @@ + +Element.requestFullscreen() for non-top element in fullscreen element stack + + + +
                                                                                        +
                                                                                        +
                                                                                        +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-svg-rect-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-svg-rect-manual.html new file mode 100644 index 00000000000..5661bfef760 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-svg-rect-manual.html @@ -0,0 +1,17 @@ + +Element.requestFullscreen() for SVG rect element + + + +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-svg-svg-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-svg-svg-manual.html new file mode 100644 index 00000000000..553785d29b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-svg-svg-manual.html @@ -0,0 +1,17 @@ + +Element.requestFullscreen() for SVG svg element + + + +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-top-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-top-manual.html new file mode 100644 index 00000000000..3618344409b --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-top-manual.html @@ -0,0 +1,30 @@ + +Element.requestFullscreen() for top element in fullscreen element stack + + + +
                                                                                        +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/fullscreen/model/remove-child-manual.html b/tests/wpt/web-platform-tests/fullscreen/model/remove-child-manual.html new file mode 100644 index 00000000000..63cc727fb18 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/model/remove-child-manual.html @@ -0,0 +1,28 @@ + +Remove the child of the fullscreen element + + + +
                                                                                        +
                                                                                        +
                                                                                        +
                                                                                        + 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 new file mode 100644 index 00000000000..5873a1cfc62 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/model/remove-first-manual.html @@ -0,0 +1,32 @@ + +Remove the first element on the fullscreen element stack + + + +
                                                                                        +
                                                                                        +
                                                                                        +
                                                                                        + 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 new file mode 100644 index 00000000000..3e52049624d --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/model/remove-last-manual.html @@ -0,0 +1,32 @@ + +Remove the last element on the fullscreen element stack + + + +
                                                                                        +
                                                                                        +
                                                                                        +
                                                                                        + 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 new file mode 100644 index 00000000000..74327637ee9 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/model/remove-parent-manual.html @@ -0,0 +1,26 @@ + +Remove the parent of the fullscreen element + + + +
                                                                                        +
                                                                                        +
                                                                                        +
                                                                                        + 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 new file mode 100644 index 00000000000..53abb5e82fe --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/model/remove-single-manual.html @@ -0,0 +1,24 @@ + +Remove the single element on the fullscreen element stack + + + +
                                                                                        +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/fullscreen/trusted-click.js b/tests/wpt/web-platform-tests/fullscreen/trusted-click.js new file mode 100644 index 00000000000..6cd4020f6ed --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/trusted-click.js @@ -0,0 +1,24 @@ +// Invokes callback from a trusted click event, to satisfy +// https://html.spec.whatwg.org/#triggered-by-user-activation +function trusted_click(callback, container) +{ + var document = container.ownerDocument; + var button = document.createElement("button"); + button.textContent = "click to continue test"; + button.style.display = "block"; + button.style.fontSize = "20px"; + button.style.padding = "10px"; + button.onclick = function() + { + callback(); + container.removeChild(button); + }; + container.appendChild(button); +} + +// Invokes element.requestFullscreen() from a trusted click. +function trusted_request(element, container) +{ + var request = element.requestFullscreen.bind(element); + trusted_click(request, container || element.parentNode); +} diff --git a/tests/wpt/web-platform-tests/hr-time/idlharness.html b/tests/wpt/web-platform-tests/hr-time/idlharness.html index 0b1fd7d3260..729f7381f7b 100644 --- a/tests/wpt/web-platform-tests/hr-time/idlharness.html +++ b/tests/wpt/web-platform-tests/hr-time/idlharness.html @@ -19,20 +19,31 @@ interface Window { }; -interface Performance { +[Exposed=Worker] +interface WorkerGlobalScope { }; -partial interface Window { - [Replaceable] readonly attribute Performance performance; -};
                                                                                         typedef double DOMHighResTimeStamp;
                                                                                         
                                                                                        -partial interface Performance {
                                                                                        -  DOMHighResTimeStamp now();
                                                                                        +[Exposed=(Window,Worker)]
                                                                                        +interface Performance : EventTarget {
                                                                                        +    DOMHighResTimeStamp now();
                                                                                        +    serializer = {attribute};
                                                                                         };
                                                                                        +
                                                                                        +[NoInterfaceObject,
                                                                                        + Exposed=(Window,Worker)]
                                                                                        +interface GlobalPerformance {
                                                                                        +    [Replaceable]
                                                                                        +    readonly attribute Performance performance;
                                                                                        +};
                                                                                        +
                                                                                        +Window implements GlobalPerformance;
                                                                                        +
                                                                                        +WorkerGlobalScope implements GlobalPerformance;
                                                                                         
                                                                                        -
                                                                                        +
                                                                                        Test diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_to_uri-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_to_uri-1.html new file mode 100644 index 00000000000..46c744e95d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_to_uri-1.html @@ -0,0 +1,23 @@ + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_to_uri.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_to_uri.html new file mode 100644 index 00000000000..6b5ebf1bffa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_to_uri.html @@ -0,0 +1,32 @@ + +history.go() negative tests + + + + + +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html rename to tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1-manual.html diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-setting.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-setting.html new file mode 100644 index 00000000000..726aaea23ab --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-setting.html @@ -0,0 +1,18 @@ + + +[[SetPrototypeOf]] on a location object should return false + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_hash.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_hash.html index 91c3f8205d3..74d2d015430 100644 --- a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_hash.html +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_hash.html @@ -7,6 +7,8 @@
                                                                                        + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/security_location_0.sub.htm b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/security_location_0.htm similarity index 100% rename from tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/security_location_0.sub.htm rename to tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/security_location_0.htm diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html index abb5eae4a61..79440e212d5 100644 --- a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html +++ b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html @@ -55,7 +55,7 @@ function addTest(fun, desc) { testList.push([fun, desc]); } addTest(function() { // Note: we do not check location.host as its default port semantics are hard to reflect statically assert_equals(location.hostname, host_info.ORIGINAL_HOST, 'Need to run the top-level test from domain ' + host_info.ORIGINAL_HOST); - assert_equals(location.port, host_info.HTTP_PORT, 'Need to run the top-level test from port ' + host_info.HTTP_PORT); + assert_equals(get_port(location), host_info.HTTP_PORT, 'Need to run the top-level test from port ' + host_info.HTTP_PORT); assert_equals(B.parent, window, "window.parent works same-origin"); assert_equals(C.parent, window, "window.parent works cross-origin"); assert_equals(B.location.pathname, path, "location.href works same-origin"); diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/win-documentdomain.sub.html b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/win-documentdomain.sub.html index e05c4d9e5d4..3bfcd0cd1a5 100644 --- a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/win-documentdomain.sub.html +++ b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/win-documentdomain.sub.html @@ -10,9 +10,9 @@ var path = location.pathname.substring(0, location.pathname.lastIndexOf('/')) + '/frame.html'; A.location = 'frame.html'; - B.location = '//{{domains[www2]}}:' + location.port + path; - C.location = '//{{domains[www2]}}:' + location.port + path; - D.location = '//{{domains[www1]}}:' + location.port + path; + B.location = '//{{domains[www2]}}:' + get_port(location) + path; + C.location = '//{{domains[www2]}}:' + get_port(location) + path; + D.location = '//{{domains[www1]}}:' + get_port(location) + path; var loadCount = 0; function frameLoaded() { diff --git a/tests/wpt/web-platform-tests/html/browsers/sandboxing/inner-iframe.html b/tests/wpt/web-platform-tests/html/browsers/sandboxing/inner-iframe.html new file mode 100644 index 00000000000..229f6b3d852 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/sandboxing/inner-iframe.html @@ -0,0 +1,13 @@ + + + + + + +
                                                                                        foo
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-allow-same-origin.html b/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-allow-same-origin.html new file mode 100644 index 00000000000..d6b3b099f28 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-allow-same-origin.html @@ -0,0 +1,30 @@ + + + + DOM access in sandbox="allow-same-origin" iframe + + + + + + + +

                                                                                        DOM access in sandbox="allow-same-origin" iframe

                                                                                        + + + + +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-allow-scripts.html b/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-allow-scripts.html new file mode 100644 index 00000000000..6cf3f5a4a8c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-allow-scripts.html @@ -0,0 +1,29 @@ + + + + Script execution in sandbox="allow-scripts" iframe + + + + + + + +

                                                                                        Script execution in sandbox="allow-scripts" iframe

                                                                                        + + + + +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-disallow-same-origin.html b/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-disallow-same-origin.html new file mode 100644 index 00000000000..327a1f5e867 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-disallow-same-origin.html @@ -0,0 +1,30 @@ + + + + Access to sandbox iframe + + + + + + + +

                                                                                        Access to sandbox iframe

                                                                                        + + + + + +
                                                                                        + diff --git a/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-disallow-scripts.html b/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-disallow-scripts.html new file mode 100644 index 00000000000..1bc116ada46 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/sandboxing/sandbox-disallow-scripts.html @@ -0,0 +1,29 @@ + + + + Script execution in sandbox iframe + + + + + + + +

                                                                                        Script execution in sandbox iframe

                                                                                        + + + + +
                                                                                        + + diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html index 05a831e87a6..f020e0ecbe1 100644 --- a/tests/wpt/web-platform-tests/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html @@ -33,30 +33,28 @@ test(function() { }, "Check if the first nested browsing context is returned by window['c']"); test(function() { - assert_equals(window['a'].length, 7, "The length should be 7."); + assert_equals(window['a'].length, 5, "The length should be 5."); assert_true(window['a'] instanceof HTMLCollection); - assert_array_equals(window['a'], - [ document.getElementById('a1'), document.getElementById('app1'), - document.getElementById('area1'), document.getElementById('embed1'), - document.getElementById('form1'), document.getElementById('img1'), - document.getElementById('obj1') ], - "The elements are not in tree order."); - - document.getElementById('a1').setAttribute("name", ""); - document.getElementById('area1').setAttribute("name", ""); assert_array_equals(window['a'], [ document.getElementById('app1'), document.getElementById('embed1'), document.getElementById('form1'), document.getElementById('img1'), document.getElementById('obj1') ], - "Window['a'] should not contain the elements with empty name attribute."); -}, "Check if window['a'] contains all a, applet, area, embed, form, img, and object elements, and their order"); + "The elements are not in tree order."); -var t = async_test("Check if window['fs'] return the frameset element with name='fs'"); + document.getElementById('form1').setAttribute("name", ""); + document.getElementById('embed1').setAttribute("name", ""); + assert_array_equals(window['a'], + [ document.getElementById('app1'), document.getElementById('img1'), + document.getElementById('obj1') ], + "Window['a'] should not contain the elements with empty name attribute."); +}, "Check if window['a'] contains all applet, embed, form, img, and object elements, and their order"); + +var t = async_test("Check that window['fs'] does not return the frameset element with name='fs' (historical)"); function on_load () { t.step(function () { assert_equals(document.getElementById('fm2').contentWindow['fs'], - document.getElementById('fm2').contentDocument.getElementById('fs1'), - "The frameset element should be returned."); + undefined, + "The frameset element should not be returned."); }); t.done(); } diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/security-window/window-security.sub.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/security-window/window-security.html similarity index 100% rename from tests/wpt/web-platform-tests/html/browsers/the-window-object/security-window/window-security.sub.html rename to tests/wpt/web-platform-tests/html/browsers/the-window-object/security-window/window-security.html diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/support/noopener-target.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/support/noopener-target.html new file mode 100644 index 00000000000..d0d0360260c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/support/noopener-target.html @@ -0,0 +1,8 @@ + + diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-open-noopener.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-open-noopener.html new file mode 100644 index 00000000000..808f55e23a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-open-noopener.html @@ -0,0 +1,105 @@ + + +window.open() with "noopener" tests + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html b/tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/frameElement.html similarity index 100% rename from tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html rename to tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/frameElement.html diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/support-open-cross-origin.sub.html b/tests/wpt/web-platform-tests/html/browsers/windows/support-open-cross-origin.sub.html new file mode 100644 index 00000000000..06137ef7504 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/windows/support-open-cross-origin.sub.html @@ -0,0 +1,3 @@ + +

                                                                                        Follow this link to open a new browsing context in a separate origin. +link. diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.sub.html b/tests/wpt/web-platform-tests/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html similarity index 100% rename from tests/wpt/web-platform-tests/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.sub.html rename to tests/wpt/web-platform-tests/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/targeting-multiple-cross-origin-manual.sub.html b/tests/wpt/web-platform-tests/html/browsers/windows/targeting-multiple-cross-origin-manual.sub.html new file mode 100644 index 00000000000..c5cb03baf09 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/windows/targeting-multiple-cross-origin-manual.sub.html @@ -0,0 +1,9 @@ + +

                                                                                        Follow this link to open a new browsing context in a separate origin. Follow the instructions +in that new window, and then come back to this window. +link. + +

                                                                                        Once you come back to this page, follow this link. +link. + +

                                                                                        After clicking that link, you should have three additional windows open. diff --git a/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html b/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/Document.currentScript.html similarity index 100% rename from tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html rename to tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/Document.currentScript.html diff --git a/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms.html b/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms.html index 3bb89f498c1..e0689c7c799 100644 --- a/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms.html +++ b/tests/wpt/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms.html @@ -56,11 +56,11 @@ test(function() { // http://heycam.github.io/webidl/#property-enumeration // If the object supports indexed properties, then the object’s supported // property indices are enumerated first, in numerical order. - assert_array_equals(result.splice(0, 2), ["0", "1", "2"]); + assert_array_equals(result.splice(0, 3), ["0", "1", "2"]); // [...] // Finally, any enumerable own properties or properties from the object’s // prototype chain are then enumerated, in no defined order. - assert_array_equals(result.sort(), ["0", "1", "2", "item", "namedItem", "length"].sort()) + assert_array_equals(result.sort(), ["item", "namedItem", "length"].sort()) }, "document.forms iteration") test(function() { diff --git a/tests/wpt/web-platform-tests/html/dom/interfaces.html b/tests/wpt/web-platform-tests/html/dom/interfaces.html index 8e35f4175fa..d698f3bff26 100644 --- a/tests/wpt/web-platform-tests/html/dom/interfaces.html +++ b/tests/wpt/web-platform-tests/html/dom/interfaces.html @@ -726,7 +726,6 @@ interface CSSStyleDeclaration { attribute DOMString marginRight; attribute DOMString marginBottom; attribute DOMString marginLeft; - attribute DOMString markerOffset; attribute DOMString marks; attribute DOMString maxHeight; attribute DOMString maxWidth; @@ -883,7 +882,7 @@ interface HTMLAllCollection { interface HTMLFormControlsCollection : HTMLCollection { // inherits length and item() - legacycaller getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem() + getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem() }; interface RadioNodeList : NodeList { @@ -891,13 +890,12 @@ interface RadioNodeList : NodeList { }; interface HTMLOptionsCollection : HTMLCollection { - // inherits item() - attribute unsigned long length; // shadows inherited length - legacycaller HTMLOptionElement? (DOMString name); - setter creator void (unsigned long index, HTMLOptionElement? option); - void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null); - void remove(long index); - attribute long selectedIndex; + // inherits item(), namedItem() + attribute unsigned long length; // shadows inherited length + [CEReactions] setter void (unsigned long index, HTMLOptionElement? option); + [CEReactions] void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null); + [CEReactions] void remove(long index); + attribute long selectedIndex; }; typedef sequence PropertyValueArray; @@ -1179,7 +1177,6 @@ interface HTMLEmbedElement : HTMLElement { attribute DOMString width; attribute DOMString height; Document getSVGDocument(); - legacycaller any (any... arguments); // also has obsolete members }; @@ -1203,8 +1200,6 @@ interface HTMLObjectElement : HTMLElement { boolean reportValidity(); void setCustomValidity(DOMString error); - legacycaller any (any... arguments); - // also has obsolete members }; @@ -2628,9 +2623,9 @@ interface MessageEvent : Event { readonly attribute DOMString origin; readonly attribute DOMString lastEventId; readonly attribute (WindowProxy or MessagePort)? source; - readonly attribute MessagePort[]? ports; + readonly attribute FrozenArray ports; - void initMessageEvent(DOMString typeArg, boolean canBubbleArg, boolean cancelableArg, any dataArg, DOMString originArg, DOMString lastEventIdArg, (WindowProxy or MessagePort) sourceArg, MessagePort[]? portsArg); + void initMessageEvent(DOMString type, boolean bubbles, boolean cancelable, any data, DOMString origin, DOMString lastEventId, (WindowProxy or MessagePort) source, sequence ports); }; dictionary MessageEventInit : EventInit { diff --git a/tests/wpt/web-platform-tests/html/dom/new-harness.js b/tests/wpt/web-platform-tests/html/dom/new-harness.js index f7481996e12..11bf7623251 100644 --- a/tests/wpt/web-platform-tests/html/dom/new-harness.js +++ b/tests/wpt/web-platform-tests/html/dom/new-harness.js @@ -1,22 +1,11 @@ // We override only the things we need to -- the rest we'll just inherit from // original-harness.js. Polymorphism, kind of. -ReflectionHarness.catchUnexpectedExceptions = false; +ReflectionHarness.conformanceTesting = true; -ReflectionHarness.test = function(expected, actual, description) { - test(function() { - assert_equals(expected, actual); - }, this.getTypeDescription() + ": " + description); - // This is the test suite that will rate conformance, so we don't want to - // bail out early if a test fails -- we want all tests to always run. - return true; -} - -ReflectionHarness.run = function(fun, description) { +ReflectionHarness.test = function(fun, description) { test(fun, this.getTypeDescription() + ": " + description); } -ReflectionHarness.testException = function(exceptionName, fn, description) { - test(function() { - assert_throws(exceptionName, fn); - }, this.getTypeDescription() + ": " + description); -} +ReflectionHarness.assertEquals = assert_equals; + +ReflectionHarness.assertThrows = assert_throws; diff --git a/tests/wpt/web-platform-tests/html/dom/original-harness.js b/tests/wpt/web-platform-tests/html/dom/original-harness.js index 3cfa05bcb8d..113da5f9b28 100644 --- a/tests/wpt/web-platform-tests/html/dom/original-harness.js +++ b/tests/wpt/web-platform-tests/html/dom/original-harness.js @@ -5,13 +5,10 @@ ReflectionHarness.passed = document.getElementById("passed"); ReflectionHarness.failed = document.getElementById("failed"); /** - * Should we report a failure for unexpected exceptions, or just rethrow them? - * The original test framework reports an exception, but testharness.js doesn't - * want that. - * - * @public + * In conformance testing mode, all tests will be run. Otherwise, we'll skip + * tests for attributes that have an entirely incorrect type. */ -ReflectionHarness.catchUnexpectedExceptions = true; +ReflectionHarness.conformanceTesting = false; /** * Returns a string representing val. Basically just adds quotes for strings, @@ -86,12 +83,28 @@ ReflectionHarness.stringRep = function(val) { ReflectionHarness.currentTestInfo = {}; /** - * This is called when we want to test a single element/attribute combination. - * For the original harness, it does nothing special (just calls the function), - * but for testharness.js, it can wrap everything in a test() call. + * .test() sets this, and it's used by .assertEquals()/.assertThrows(). + * Calling .test() recursively is an error. */ -ReflectionHarness.testWrapper = function(fn) { - fn(); +ReflectionHarness.currentTestDescription = null; + +/** + * Run a group of one or more assertions. If any exceptions are thrown, catch + * them and report a failure. + */ +ReflectionHarness.test = function(fn, description) { + if (this.currentTestDescription) { + throw "TEST BUG: test() may not be called recursively!"; + } + this.currentTestDescription = description; + try { + fn(); + // Not throwing is a success + this.success(); + } catch(err) { + this.failure("Exception thrown during tests with " + description); + } + this.currentTestDescription = null; } /** @@ -102,37 +115,29 @@ ReflectionHarness.testWrapper = function(fn) { * * @public */ -ReflectionHarness.test = function(expected, actual, description) { +ReflectionHarness.assertEquals = function(expected, actual, description) { // Special-case -0 yay! if (expected === 0 && actual === 0 && 1/expected === 1/actual) { this.increment(this.passed); - return true; } else if (expected === actual) { this.increment(this.passed); - return true; } else { this.increment(this.failed); - this.reportFailure(description + ' (expected ' + this.stringRep(actual) + ', got ' + this.stringRep(expected) + ')'); - return false; - } -} - -ReflectionHarness.run = function(fun, description) { - try { - fun(); - } catch (err) { - ReflectionHarness.failure(description); + this.reportFailure(this.currentTestDescription + + (description ? " followed by " + description : "") + + ' (expected ' + this.stringRep(actual) + ', got ' + + this.stringRep(expected) + ')'); } } /** * If calling fn causes a DOMException of the type given by the string - * exceptionName (e.g., "INDEX_SIZE_ERR"), output a success. Otherwise, report - * a failure with the given description. + * exceptionName (e.g., "IndexSizeError"), output a success. Otherwise, report + * a failure. * * @public */ -ReflectionHarness.testException = function(exceptionName, fn, description) { +ReflectionHarness.assertThrows = function(exceptionName, fn) { try { fn(); } catch (e) { @@ -142,7 +147,8 @@ ReflectionHarness.testException = function(exceptionName, fn, description) { } } this.increment(this.failed); - this.reportFailure(description); + this.reportFailure(this.currentTestDescription + " must throw " + + exceptionName); return false; } @@ -248,9 +254,9 @@ ReflectionHarness.reportFailure = function(description) { } /** - * Shorthand function for when we have a failure outside of test(). Generally - * used when the failure is an exception thrown unexpectedly or such, something - * not equality-based. + * Shorthand function for when we have a failure outside of + * assertEquals()/assertThrows(). Generally used when the failure is an + * exception thrown unexpectedly or such, something not equality-based. * * @public */ @@ -260,8 +266,8 @@ ReflectionHarness.failure = function(message) { } /** - * Shorthand function for when we have a success outside of test(). Only - * called if catchUnexpectedExceptions is true. + * Shorthand function for when we have a success outside of + * assertEquals()/assertThrows(). * * @public */ diff --git a/tests/wpt/web-platform-tests/html/dom/reflection.js b/tests/wpt/web-platform-tests/html/dom/reflection.js index 72ed01ef7bf..b105a8b5ad6 100644 --- a/tests/wpt/web-platform-tests/html/dom/reflection.js +++ b/tests/wpt/web-platform-tests/html/dom/reflection.js @@ -567,15 +567,6 @@ ReflectionTests.reflects = function(data, idlName, idlObj, domName, domObj) { // probably safe enough. Just don't read stuff that will change. ReflectionHarness.currentTestInfo = {data: data, idlName: idlName, idlObj: idlObj, domName: domName, domObj: domObj}; - ReflectionHarness.testWrapper(function() { - ReflectionTests.doReflects(data, idlName, idlObj, domName, domObj); - }); -}; - -/** - * Actual implementation of the above. - */ -ReflectionTests.doReflects = function(data, idlName, idlObj, domName, domObj) { // If we don't recognize the type, testing is impossible. if (this.typeMap[data.type] === undefined) { if (unimplemented.indexOf(data.type) == -1) { @@ -591,9 +582,15 @@ ReflectionTests.doReflects = function(data, idlName, idlObj, domName, domObj) { } // Test that typeof idlObj[idlName] is correct. If not, further tests are - // probably pointless, so bail out. - var isDefaultValueNull = data.isNullable && data.defaultVal === null; - if (!ReflectionHarness.test(typeof idlObj[idlName], isDefaultValueNull ? "object" : typeInfo.jsType, "typeof IDL attribute")) { + // probably pointless, so bail out if we're not running conformance tests. + var expectedType = data.isNullable && data.defaultVal === null ? "object" + : typeInfo.jsType; + ReflectionHarness.test(function() { + ReflectionHarness.assertEquals(typeof idlObj[idlName], expectedType); + }, "typeof IDL attribute"); + + if (!ReflectionHarness.conformanceTesting && + typeof idlObj[idlName] !== expectedType) { return; } @@ -603,7 +600,9 @@ ReflectionTests.doReflects = function(data, idlName, idlObj, domName, domObj) { defaultVal = typeInfo.defaultVal; } if (defaultVal !== null || data.isNullable) { - ReflectionHarness.test(idlObj[idlName], defaultVal, "IDL get with DOM attribute unset"); + ReflectionHarness.test(function() { + ReflectionHarness.assertEquals(idlObj[idlName], defaultVal); + }, "IDL get with DOM attribute unset"); } var domTests = typeInfo.domTests.slice(0); @@ -704,50 +703,42 @@ ReflectionTests.doReflects = function(data, idlName, idlObj, domName, domObj) { // the test. continue; } - try { + ReflectionHarness.test(function() { domObj.setAttribute(domName, domTests[i]); - ReflectionHarness.test(domObj.getAttribute(domName), String(domTests[i]), "setAttribute() to " + ReflectionHarness.stringRep(domTests[i]) + " followed by getAttribute()"); - ReflectionHarness.test(idlObj[idlName], domExpected[i], "setAttribute() to " + ReflectionHarness.stringRep(domTests[i]) + " followed by IDL get"); - if (ReflectionHarness.catchUnexpectedExceptions) { - ReflectionHarness.success(); - } - } catch (err) { - if (ReflectionHarness.catchUnexpectedExceptions) { - ReflectionHarness.failure("Exception thrown during tests with setAttribute() to " + ReflectionHarness.stringRep(domTests[i])); - } else { - throw err; - } - } + ReflectionHarness.assertEquals(domObj.getAttribute(domName), + String(domTests[i]), "getAttribute()"); + ReflectionHarness.assertEquals(idlObj[idlName], domExpected[i], + "IDL get"); + }, "setAttribute() to " + ReflectionHarness.stringRep(domTests[i])); } } for (var i = 0; i < idlTests.length; i++) { - if ((data.type == "limited long" && idlTests[i] < 0) || - (data.type == "limited unsigned long" && idlTests[i] == 0)) { - ReflectionHarness.testException("INDEX_SIZE_ERR", function() { - idlObj[idlName] = idlTests[i]; - }, "IDL set to " + ReflectionHarness.stringRep(idlTests[i]) + " must throw INDEX_SIZE_ERR"); - } else { - ReflectionHarness.run(function() { + ReflectionHarness.test(function() { + if ((data.type == "limited long" && idlTests[i] < 0) || + (data.type == "limited unsigned long" && idlTests[i] == 0)) { + ReflectionHarness.assertThrows("IndexSizeError", function() { + idlObj[idlName] = idlTests[i]; + }); + } else { idlObj[idlName] = idlTests[i]; if (data.type == "boolean") { // Special case yay - ReflectionHarness.test(domObj.hasAttribute(domName), Boolean(idlTests[i]), "IDL set to " + ReflectionHarness.stringRep(idlTests[i]) + " followed by hasAttribute()"); + ReflectionHarness.assertEquals(domObj.hasAttribute(domName), + Boolean(idlTests[i]), "hasAttribute()"); } else if (idlDomExpected[i] !== null || data.isNullable) { var expected = idlDomExpected[i] + ""; if (data.isNullable && idlDomExpected[i] === null) { expected = null; } - ReflectionHarness.test(domObj.getAttribute(domName), expected, "IDL set to " + ReflectionHarness.stringRep(idlTests[i]) + " followed by getAttribute()"); + ReflectionHarness.assertEquals(domObj.getAttribute(domName), expected, + "getAttribute()"); } if (idlIdlExpected[i] !== null || data.isNullable) { - ReflectionHarness.test(idlObj[idlName], idlIdlExpected[i], "IDL set to " + ReflectionHarness.stringRep(idlTests[i]) + " followed by IDL get"); + ReflectionHarness.assertEquals(idlObj[idlName], idlIdlExpected[i], "IDL get"); } - if (ReflectionHarness.catchUnexpectedExceptions) { - ReflectionHarness.success(); - } - }, "IDL set to " + ReflectionHarness.stringRep(idlTests[i]) + " should not throw"); - } + } + }, "IDL set to " + ReflectionHarness.stringRep(idlTests[i])); } }; diff --git a/tests/wpt/web-platform-tests/html/editing/activation/click-manual.html b/tests/wpt/web-platform-tests/html/editing/activation/click-manual.html new file mode 100644 index 00000000000..1359a43c1b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/editing/activation/click-manual.html @@ -0,0 +1,5 @@ + +Interaction of UI input and the click in progress flag +

                                                                                        When you mouse click the checkbox below it should not be checked:

                                                                                        +

                                                                                        +

                                                                                        Now keyboard "click" the checkbox and confirm it's still not checked.

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/editing/dnd/the-datatransfer-interface/dndTransferCases-manual.html b/tests/wpt/web-platform-tests/html/editing/dnd/the-datatransfer-interface/dndTransferCases-manual.html index 84a8c7ea62d..6081b5d42c3 100755 --- a/tests/wpt/web-platform-tests/html/editing/dnd/the-datatransfer-interface/dndTransferCases-manual.html +++ b/tests/wpt/web-platform-tests/html/editing/dnd/the-datatransfer-interface/dndTransferCases-manual.html @@ -4,7 +4,8 @@ HTML Test: dropzone_attribute_data_item_kind_string - + + + +

                                                                                        This test matches if both lists display similar to the following:

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +   D
                                                                                        +3. E
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. + D +
                                                                                        5. E
                                                                                        6. +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. + D +
                                                                                        5. E
                                                                                        6. +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item.html new file mode 100644 index 00000000000..ce63cf7c7c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-display-list-item.html @@ -0,0 +1,44 @@ + + +display: list-item on non-<li> elements + + + + + + + + +

                                                                                        This test matches if both lists display similar to the following:

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +   D
                                                                                        +3. E
                                                                                        + +
                                                                                        + +
                                                                                          + A + B + + D + E +
                                                                                        + +
                                                                                          +
                                                                                          A
                                                                                          +
                                                                                          B
                                                                                          + +
                                                                                          D
                                                                                          +
                                                                                          E
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu-ref.html new file mode 100644 index 00000000000..2b1ea76656f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu-ref.html @@ -0,0 +1,46 @@ + + +list owner is calculated to be narest ancestor menu if it exists + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +     1. F
                                                                                        +     2. G
                                                                                        +6. H
                                                                                        +     1. I
                                                                                        +     2. J
                                                                                        +          1. K
                                                                                        +          2. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                        5. C
                                                                                        6. +
                                                                                        7. D
                                                                                        8. +
                                                                                        9. E
                                                                                        10. +
                                                                                            +
                                                                                          1. F
                                                                                          2. +
                                                                                          3. G
                                                                                          4. +
                                                                                          +
                                                                                        11. H
                                                                                        12. +
                                                                                            +
                                                                                          1. I
                                                                                          2. +
                                                                                          3. + J +
                                                                                              +
                                                                                            1. K
                                                                                            2. +
                                                                                            3. L
                                                                                            4. +
                                                                                            +
                                                                                          4. +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu.html new file mode 100644 index 00000000000..86afa5d2067 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-menu.html @@ -0,0 +1,58 @@ + + +list owner is calculated to be narest ancestor menu if it exists + + + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +     1. F
                                                                                        +     2. G
                                                                                        +6. H
                                                                                        +     1. I
                                                                                        +     2. J
                                                                                        +          1. K
                                                                                        +          2. L
                                                                                        + +
                                                                                        + + +
                                                                                      • A
                                                                                      • +
                                                                                      • B
                                                                                      • +
                                                                                        +
                                                                                      • C
                                                                                      • + +
                                                                                      • D
                                                                                      • +
                                                                                      • E
                                                                                      • +
                                                                                        + +
                                                                                      • F
                                                                                      • +
                                                                                      • G
                                                                                      • +
                                                                                        +
                                                                                        +
                                                                                      • H
                                                                                      • + +
                                                                                      • I
                                                                                      • +
                                                                                      • + J + +
                                                                                      • K
                                                                                      • +
                                                                                      • L
                                                                                      • +
                                                                                        +
                                                                                      • +
                                                                                        +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed-ref.html new file mode 100644 index 00000000000..b72768aefc5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed-ref.html @@ -0,0 +1,52 @@ + + +list owner is calculated to be nearest ancestor ul or ul (but not dir) if it exists + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +     1. F
                                                                                        +     2. G
                                                                                        +6. H
                                                                                        +     1. I
                                                                                        +     2. J
                                                                                        +          3. K
                                                                                        +          4. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                        5. C
                                                                                        6. +
                                                                                        7. D
                                                                                        8. +
                                                                                        9. E
                                                                                        10. +
                                                                                            +
                                                                                          1. F
                                                                                          2. +
                                                                                          3. G
                                                                                          4. +
                                                                                          +
                                                                                        11. H
                                                                                        12. +
                                                                                            +
                                                                                          1. I
                                                                                          2. +
                                                                                          3. + J + +
                                                                                          4. K
                                                                                          5. +
                                                                                          6. L
                                                                                          7. +
                                                                                            +
                                                                                          8. +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed.html new file mode 100644 index 00000000000..82e39f995ec --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-mixed.html @@ -0,0 +1,64 @@ + + +list owner is calculated to be nearest ancestor ul or ul (but not dir) if it exists + + + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +     1. F
                                                                                        +     2. G
                                                                                        +6. H
                                                                                        +     1. I
                                                                                        +     2. J
                                                                                        +          3. K
                                                                                        +          4. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        • A
                                                                                        • +
                                                                                        • B
                                                                                        • +
                                                                                          +
                                                                                        • C
                                                                                        • + +
                                                                                        • D
                                                                                        • +
                                                                                        • E
                                                                                        • +
                                                                                          +
                                                                                            +
                                                                                          1. F
                                                                                          2. + G +
                                                                                          +
                                                                                          +
                                                                                        • H
                                                                                        • +
                                                                                            +
                                                                                          1. I
                                                                                          2. +
                                                                                          3. + J + +
                                                                                          4. K
                                                                                          5. +
                                                                                          6. L
                                                                                          7. +
                                                                                            +
                                                                                          8. +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir-ref.html new file mode 100644 index 00000000000..fad00fa3bde --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir-ref.html @@ -0,0 +1,52 @@ + + +The dir element is not treated specially when calculating list owners + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +     6. F
                                                                                        +     7. G
                                                                                        +8. H
                                                                                        +     9. I
                                                                                        +     10. J
                                                                                        +          11. K
                                                                                        +          12. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                        5. C
                                                                                        6. +
                                                                                        7. D
                                                                                        8. +
                                                                                        9. E
                                                                                        10. + +
                                                                                        11. F
                                                                                        12. +
                                                                                        13. G
                                                                                        14. +
                                                                                          +
                                                                                        15. H
                                                                                        16. + +
                                                                                        17. I
                                                                                        18. +
                                                                                        19. + J + +
                                                                                        20. K
                                                                                        21. +
                                                                                        22. L
                                                                                        23. +
                                                                                          +
                                                                                        24. +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir.html new file mode 100644 index 00000000000..747d90738b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-not-dir.html @@ -0,0 +1,58 @@ + + +The dir element is not treated specially when calculating list owners + + + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +     6. F
                                                                                        +     7. G
                                                                                        +8. H
                                                                                        +     9. I
                                                                                        +     10. J
                                                                                        +          11. K
                                                                                        +          12. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                          +
                                                                                        5. C
                                                                                        6. + +
                                                                                        7. D
                                                                                        8. +
                                                                                        9. E
                                                                                        10. +
                                                                                          + +
                                                                                        11. F
                                                                                        12. +
                                                                                        13. G
                                                                                        14. +
                                                                                          +
                                                                                          +
                                                                                        15. H
                                                                                        16. + +
                                                                                        17. I
                                                                                        18. +
                                                                                        19. + J + +
                                                                                        20. K
                                                                                        21. +
                                                                                        22. L
                                                                                        23. +
                                                                                          +
                                                                                        24. +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol-ref.html new file mode 100644 index 00000000000..96cc9c3600d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol-ref.html @@ -0,0 +1,46 @@ + + +list owner is calculated to be narest ancestor ol if it exists + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +     1. F
                                                                                        +     2. G
                                                                                        +6. H
                                                                                        +     1. I
                                                                                        +     2. J
                                                                                        +          1. K
                                                                                        +          2. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                        5. C
                                                                                        6. +
                                                                                        7. D
                                                                                        8. +
                                                                                        9. E
                                                                                        10. +
                                                                                            +
                                                                                          1. F
                                                                                          2. +
                                                                                          3. G
                                                                                          4. +
                                                                                          +
                                                                                        11. H
                                                                                        12. +
                                                                                            +
                                                                                          1. I
                                                                                          2. +
                                                                                          3. + J +
                                                                                              +
                                                                                            1. K
                                                                                            2. +
                                                                                            3. L
                                                                                            4. +
                                                                                            +
                                                                                          4. +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol.html new file mode 100644 index 00000000000..fcb93cfbb53 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ol.html @@ -0,0 +1,52 @@ + + +list owner is calculated to be narest ancestor ol if it exists + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +     1. F
                                                                                        +     2. G
                                                                                        +6. H
                                                                                        +     1. I
                                                                                        +     2. J
                                                                                        +          1. K
                                                                                        +          2. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                          +
                                                                                        5. C
                                                                                        6. + +
                                                                                        7. D
                                                                                        8. +
                                                                                        9. E
                                                                                        10. +
                                                                                          +
                                                                                            +
                                                                                          1. F
                                                                                          2. +
                                                                                          3. G
                                                                                          4. +
                                                                                          +
                                                                                          +
                                                                                        11. H
                                                                                        12. +
                                                                                            +
                                                                                          1. I
                                                                                          2. +
                                                                                          3. + J +
                                                                                              +
                                                                                            1. K
                                                                                            2. +
                                                                                            3. L
                                                                                            4. +
                                                                                            +
                                                                                          4. +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent-ref.html new file mode 100644 index 00000000000..03a0570ba40 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent-ref.html @@ -0,0 +1,40 @@ + + +list owner is calculated to be the parent if there is no ancestor ul/ol/menu + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +1. C
                                                                                        +1. D
                                                                                        +       1. E
                                                                                        +3. F
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                        5. C
                                                                                        6. +
                                                                                        7. D
                                                                                        8. +
                                                                                          +
                                                                                        9. E
                                                                                        10. +
                                                                                          +
                                                                                        11. F
                                                                                        12. +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent.html new file mode 100644 index 00000000000..0345add996e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-parent.html @@ -0,0 +1,45 @@ + + +list owner is calculated to be the parent if there is no ancestor ul/ol/menu + + + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +1. C
                                                                                        +1. D
                                                                                        +       1. E
                                                                                        +3. F
                                                                                        + +
                                                                                        + +
                                                                                        +
                                                                                      • A
                                                                                      • +
                                                                                      • B
                                                                                      • +
                                                                                        +
                                                                                      • C
                                                                                      • + +
                                                                                      • D
                                                                                      • +
                                                                                        +
                                                                                        +
                                                                                        +
                                                                                      • E
                                                                                      • +
                                                                                        +
                                                                                      • F
                                                                                      • +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes-ref.html new file mode 100644 index 00000000000..e758f52be96 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes-ref.html @@ -0,0 +1,42 @@ + + +list owner calculation skips elements that do not generate layout boxes + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +6. F
                                                                                        +7. G
                                                                                        +8. H
                                                                                        +9. I
                                                                                        +10. J
                                                                                        +     1. K
                                                                                        +     2. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                        5. C
                                                                                        6. +
                                                                                        7. D
                                                                                        8. +
                                                                                        9. E
                                                                                        10. +
                                                                                        11. F
                                                                                        12. +
                                                                                        13. G
                                                                                        14. +
                                                                                        15. H
                                                                                        16. +
                                                                                        17. I
                                                                                        18. +
                                                                                        19. + J +
                                                                                            +
                                                                                          1. K
                                                                                          2. +
                                                                                          3. L
                                                                                          4. +
                                                                                          +
                                                                                        20. +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html new file mode 100644 index 00000000000..defdcb70003 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html @@ -0,0 +1,52 @@ + + +list owner calculation skips elements that do not generate layout boxes + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +6. F
                                                                                        +7. G
                                                                                        +8. H
                                                                                        +9. I
                                                                                        +10. J
                                                                                        +     1. K
                                                                                        +     2. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                          +
                                                                                        5. C
                                                                                        6. + +
                                                                                        7. D
                                                                                        8. +
                                                                                        9. E
                                                                                        10. +
                                                                                          +
                                                                                            +
                                                                                          1. F
                                                                                          2. +
                                                                                          3. G
                                                                                          4. +
                                                                                          +
                                                                                          +
                                                                                        11. H
                                                                                        12. +
                                                                                            +
                                                                                          1. I
                                                                                          2. +
                                                                                          3. + J +
                                                                                              +
                                                                                            1. K
                                                                                            2. +
                                                                                            3. L
                                                                                            4. +
                                                                                            +
                                                                                          4. +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul-ref.html new file mode 100644 index 00000000000..22ee9f437f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul-ref.html @@ -0,0 +1,46 @@ + + +list owner is calculated to be nearest ancestor ul if it exists + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +     1. F
                                                                                        +     2. G
                                                                                        +6. H
                                                                                        +     1. I
                                                                                        +     2. J
                                                                                        +          1. K
                                                                                        +          2. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                        5. C
                                                                                        6. +
                                                                                        7. D
                                                                                        8. +
                                                                                        9. E
                                                                                        10. +
                                                                                            +
                                                                                          1. F
                                                                                          2. +
                                                                                          3. G
                                                                                          4. +
                                                                                          +
                                                                                        11. H
                                                                                        12. +
                                                                                            +
                                                                                          1. I
                                                                                          2. +
                                                                                          3. + J +
                                                                                              +
                                                                                            1. K
                                                                                            2. +
                                                                                            3. L
                                                                                            4. +
                                                                                            +
                                                                                          4. +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul.html new file mode 100644 index 00000000000..8f1c7e3766a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-ul.html @@ -0,0 +1,58 @@ + + +list owner is calculated to be nearest ancestor ul if it exists + + + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. C
                                                                                        +4. D
                                                                                        +5. E
                                                                                        +     1. F
                                                                                        +     2. G
                                                                                        +6. H
                                                                                        +     1. I
                                                                                        +     2. J
                                                                                        +          1. K
                                                                                        +          2. L
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        • A
                                                                                        • +
                                                                                        • B
                                                                                        • +
                                                                                          +
                                                                                        • C
                                                                                        • + +
                                                                                        • D
                                                                                        • +
                                                                                        • E
                                                                                        • +
                                                                                          +
                                                                                            +
                                                                                          • F
                                                                                          • +
                                                                                          • G
                                                                                          • +
                                                                                          +
                                                                                          +
                                                                                        • H
                                                                                        • +
                                                                                            +
                                                                                          • I
                                                                                          • +
                                                                                          • + J +
                                                                                              +
                                                                                            • K
                                                                                            • +
                                                                                            • L
                                                                                            • +
                                                                                            +
                                                                                          • +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner-ref.html new file mode 100644 index 00000000000..e3ed2a51482 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner-ref.html @@ -0,0 +1,29 @@ + + +If no ancestors generate CSS boxes, the list item has no owner, and thus gets numbered as 0 + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        0. A
                                                                                        +0. B
                                                                                        +0. C
                                                                                        + +
                                                                                        + +
                                                                                      • A
                                                                                      • +
                                                                                      • B
                                                                                      • +
                                                                                      • C
                                                                                      • diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner.html new file mode 100644 index 00000000000..02fdd63de8c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-no-list-owner.html @@ -0,0 +1,31 @@ + + +If no ancestors generate CSS boxes, the list item has no owner, and thus gets numbered as 0 + + + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        0. A
                                                                                        +0. B
                                                                                        +0. C
                                                                                        + +
                                                                                        + +
                                                                                      • A
                                                                                      • +
                                                                                      • B
                                                                                      • +
                                                                                      • C
                                                                                      • diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered-ref.html new file mode 100644 index 00000000000..9a018cfaf3e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered-ref.html @@ -0,0 +1,24 @@ + + +List items that are not being rendered do not participate in numbering + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. D
                                                                                        +4. E
                                                                                        +5. G
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. +
                                                                                        5. D
                                                                                        6. +
                                                                                        7. E
                                                                                        8. +
                                                                                        9. G
                                                                                        10. +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered.html new file mode 100644 index 00000000000..da476c4bffc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-li-element/grouping-li-reftest-not-being-rendered.html @@ -0,0 +1,30 @@ + + +List items that are not being rendered do not participate in numbering + + + + + + +

                                                                                        This test matches if the list displays similar to the following

                                                                                        + +
                                                                                        1. A
                                                                                        +2. B
                                                                                        +3. D
                                                                                        +4. E
                                                                                        +5. G
                                                                                        + +
                                                                                        + +
                                                                                          +
                                                                                        1. A
                                                                                        2. +
                                                                                        3. B
                                                                                        4. + +
                                                                                        5. D
                                                                                        6. +
                                                                                          +
                                                                                        7. E
                                                                                        8. + +
                                                                                        9. G
                                                                                        10. +
                                                                                          +
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/.gitkeep b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/.gitkeep deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001-ref.html index 019aef1b6ff..8da32887f8e 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001-ref.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001-ref.html @@ -17,9 +17,6 @@

                                                                                        These reftests are necessary because the values of the ol's li children as calculated by the user agent are NOT available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states:

                                                                                        -
                                                                                        "The reversed attribute is a boolean attribute. If present, it indicates that the list is a descending list (..., 3, 2, 1). If the attribute is omitted, the list is an ascending list (1, 2, 3, ...)."
                                                                                        -

                                                                                        This reftest passes if you see an ascending list followed by two descending lists.

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001.html index 32d4f2c86f9..7c502e38357 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-rev-reftest-001.html @@ -20,9 +20,6 @@

                                                                                        These reftests are necessary because the values of the ol's li children as calculated by the user agent are NOT available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states:

                                                                                        -
                                                                                        "The reversed attribute is a boolean attribute. If present, it indicates that the list is a descending list (..., 3, 2, 1). If the attribute is omitted, the list is an ascending list (1, 2, 3, ...)."
                                                                                        -

                                                                                        This reftest passes if you see an ascending list followed by two descending lists.

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-001-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-001-ref.html index f87074899a5..0f651183a8d 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-001-ref.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-001-ref.html @@ -14,10 +14,6 @@

                                                                                        This test continues to validate the ol element. This reftest is necessary because the values of the ol's li children as calculated and displayed by the user agent are NOT systematically available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states:

                                                                                        -

                                                                                        The first item in the list has the ordinal value given by the ol element's start attribute, unless that li element has a value attribute with a value that can be successfully parsed, in which case it has the ordinal value given by that value attribute.

                                                                                        -

                                                                                        Each subsequent item in the list has the ordinal value given by its value attribute, if it has one, or, if it doesn't, the ordinal value of the previous item, plus one if the reversed is absent, or minus one if it is present.

                                                                                        -

                                                                                        This reftest passes if each list's items are numbered identically to the horizontal sequence immediately above those list items.

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-001.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-001.html index dc373f91019..b6de3dbb4b1 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-001.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-001.html @@ -17,10 +17,6 @@

                                                                                        This test continues to validate the ol element. This reftest is necessary because the values of the ol's li children as calculated and displayed by the user agent are NOT systematically available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states:

                                                                                        -

                                                                                        The first item in the list has the ordinal value given by the ol element's start attribute, unless that li element has a value attribute with a value that can be successfully parsed, in which case it has the ordinal value given by that value attribute.

                                                                                        -

                                                                                        Each subsequent item in the list has the ordinal value given by its value attribute, if it has one, or, if it doesn't, the ordinal value of the previous item, plus one if the reversed is absent, or minus one if it is present.

                                                                                        -

                                                                                        This reftest passes if each list's items are numbered identically to the horizontal sequence immediately above those list items.

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-002-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-002-ref.html index 2ba4af9b100..2dbdf4aa744 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-002-ref.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-002-ref.html @@ -14,10 +14,6 @@

                                                                                        This test continues to validate the ol element. This reftest is necessary because the values of the ol's li children as calculated and displayed by the user agent are NOT systematically available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states:

                                                                                        -

                                                                                        The first item in the list has the ordinal value given by the ol element's start attribute, unless that li element has a value attribute with a value that can be successfully parsed, in which case it has the ordinal value given by that value attribute.

                                                                                        -

                                                                                        Each subsequent item in the list has the ordinal value given by its value attribute, if it has one, or, if it doesn't, the ordinal value of the previous item, plus one if the reversed is absent, or minus one if it is present.

                                                                                        -

                                                                                        This reftest passes if each list's items are numbered identically to the horizontal sequence immediately above those list items.

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-002.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-002.html index 559e3c21967..9b21c79496f 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-002.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-start-reftest-002.html @@ -17,10 +17,6 @@

                                                                                        This test continues to validate the ol element. This reftest is necessary because the values of the ol's li children as calculated and displayed by the user agent are NOT systematically available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states:

                                                                                        -

                                                                                        The first item in the list has the ordinal value given by the ol element's start attribute, unless that li element has a value attribute with a value that can be successfully parsed, in which case it has the ordinal value given by that value attribute.

                                                                                        -

                                                                                        Each subsequent item in the list has the ordinal value given by its value attribute, if it has one, or, if it doesn't, the ordinal value of the previous item, plus one if the reversed is absent, or minus one if it is present.

                                                                                        -

                                                                                        This reftest passes if each list's items are numbered identically to the horizontal sequence immediately above those list items.

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-001-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-001-ref.html index 294c9abc2d2..391859efc63 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-001-ref.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-001-ref.html @@ -14,9 +14,6 @@

                                                                                        This test continues to validate the ol element. This reftest is necessary because the values of the ol's li children as calculated and displayed by the user agent are NOT systematically available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states:

                                                                                        -

                                                                                        The type attribute represents the state given in the cell in the second column of the row whose first cell matches the attribute's value; if none of the cells match, or if the attribute is omitted, then the attribute represents the decimal state.

                                                                                        -

                                                                                        This reftest passes if each list's items are labelled identically to the horizontal sequence immediately above those list items:

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-001.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-001.html index 32b0e200ba5..b7dc22d779a 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-001.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-001.html @@ -16,9 +16,6 @@

                                                                                        This test continues to validate the ol element. This reftest is necessary because the values of the ol's li children as calculated and displayed by the user agent are NOT systematically available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states:

                                                                                        -

                                                                                        The type attribute represents the state given in the cell in the second column of the row whose first cell matches the attribute's value; if none of the cells match, or if the attribute is omitted, then the attribute represents the decimal state.

                                                                                        -

                                                                                        This reftest passes if each list's items are labelled identically to the horizontal sequence immediately above those list items:

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-002-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-002-ref.html index cf31b7a9c2e..8d8012e8eda 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-002-ref.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-002-ref.html @@ -14,9 +14,6 @@

                                                                                        This test continues to validate the ol element. This reftest is necessary because the values of the ol's li children as calculated and displayed by the user agent are NOT systematically available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states:

                                                                                        -
                                                                                        User agents should render the items of the list in a manner consistent with the state of the type attribute of the ol element.
                                                                                        -

                                                                                        This reftest passes if each list's items are labelled identically to the horizontal sequence immediately above those list items:

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-002.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-002.html index 7daea54c027..db55fd4bc41 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-002.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-002.html @@ -16,9 +16,6 @@

                                                                                        This test continues to validate the ol element. This reftest is necessary because the values of the ol's li children as calculated and displayed by the user agent are NOT systematically available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states:

                                                                                        -
                                                                                        User agents should render the items of the list in a manner consistent with the state of the type attribute of the ol element.
                                                                                        -

                                                                                        This reftest passes if each list's items are labelled identically to the horizontal sequence immediately above those list items:

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003-ref.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003-ref.html index 4906f3ca6df..6c836cf3675 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003-ref.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003-ref.html @@ -14,8 +14,6 @@

                                                                                        This test continues to validate the ol element. This reftest is necessary because the values of the ol's li children as calculated and displayed by the user agent are NOT systematically available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states: Numbers less than or equal to zero should always use the decimal system regardless of the type attribute.

                                                                                        -

                                                                                        This reftest passes if each list's items are labelled identically to the horizontal sequence immediately above those list items:

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003.html index 5e4b5a58885..654287298f8 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol-type-reftest-003.html @@ -16,8 +16,6 @@

                                                                                        This test continues to validate the ol element. This reftest is necessary because the values of the ol's li children as calculated and displayed by the user agent are NOT systematically available programatically. Only explicitly-set values are available programatically. Therefore, we need to check actual rendering against expected rendering.

                                                                                        -

                                                                                        The spec states: Numbers less than or equal to zero should always use the decimal system regardless of the type attribute.

                                                                                        -

                                                                                        This reftest passes if each list's items are labelled identically to the horizontal sequence immediately above those list items:

                                                                                        (Note: each list item has no content; only the sequencing should appear.)

                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol.html index 0de2a064103..80fa734a92e 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/grouping-ol.html @@ -230,83 +230,68 @@ // is the number of child li elements otherwise." // "The start IDL attribute has the same default as its content attribute." - // basic - default should be 1 test(function() { - assert_equals(document.getElementById("basic").start, 1, "no start attribute provided -> 1"); + assert_equals(document.getElementById("basic").start, 1); }, "Default start value for non-reversed list should be 1"); - // decimal's first element has value of .5 which should return 1 test(function() { - assert_equals(document.getElementById("decimal").start, 1, "start of .5 -> 1 (default)"); + assert_equals(document.getElementById("decimal").start, 1); }, "IDL and content attribute parse start of '.5' correctly."); - // letter's first element has value of A which should return 1 test(function() { - assert_equals(document.getElementById("letter").start, 1, "start of A -> 1 (default)"); + assert_equals(document.getElementById("letter").start, 1); }, "IDL and content attribute parse start of 'A' correctly."); - // basicRevGoodName - default should be 3 test(function() { - assert_equals(document.getElementById("basicRevGoodName").start, 3, "no start attribute provided -> 3"); - }, "Default start value (if none provided) for reversed list = child li elements."); + assert_equals(document.getElementById("basicRevGoodName").start, 1); + }, "Default start value (if none provided) for reversed list = 1."); - // basicRevEmpty - default should be 3 test(function() { - assert_equals(document.getElementById("basicRevEmpty").start, 3, "start of A -> 3 (default)"); - }, "Default start value (if failed to parse) for reversed list = child li elements."); + assert_equals(document.getElementById("basicRevEmpty").start, 1); + }, "Default start value (if failed to parse) for reversed list = 1."); - // lots - default should be 3 test(function() { - assert_equals(document.getElementById("lots").start, 3, "no start attribute -> 3 (default)"); - }, "Default start value for reversed list = child li elements (even with tons of other child elements)."); + assert_equals(document.getElementById("lots").start, 1); + }, "Default start value for reversed list = 1 (even with tons of other child elements)."); - // adding child element changes default start value for reversed list test(function() { var myList = document.getElementById("basicRevGoodName"), myLI = document.createElement("li"); myList.appendChild(myLI); - assert_equals(document.getElementById("basicRevGoodName").start, 4, "Adding child element to reversed list adds 1 to start value"); - }, "Adding child element to reversed list adds 1 to start value"); + assert_equals(document.getElementById("basicRevGoodName").start, 1); + }, "Adding child element to reversed list does not change start value"); - // removing child element changes default start value for reversed list test(function() { var myList = document.getElementById("basicRevTrue"); myList.removeChild(myList.children[0]); - assert_equals(document.getElementById("basicRevTrue").start, 2, "Deleting child element from reversed list reduces start value by 1"); - }, "Deleting child element from reversed list reduces start value by 1"); + assert_equals(document.getElementById("basicRevTrue").start, 1); + }, "Deleting child element from reversed list does not change start value"); - // start2's first element has value of 2 test(function() { - assert_equals(document.getElementById("start2").start, 2, "start of 2 -> 2"); + assert_equals(document.getElementById("start2").start, 2); }, "IDL and content attribute parse start of '2' correctly."); - // negative's first element has value of -10 test(function() { - assert_equals(document.getElementById("negative").start, -10, "start of -10 -> -10"); + assert_equals(document.getElementById("negative").start, -10); }, "IDL and content attribute parse start of '-10' correctly."); - // posFloatDown's first element has value of 4.03 which should return 4 test(function() { - assert_equals(document.getElementById("posFloatDown").start, 4, "start of 4.03 -> 4"); + assert_equals(document.getElementById("posFloatDown").start, 4); }, "IDL and content attribute parse start of '4.03' correctly."); - // negFloatDown's first element has value of -4.03 which should return -4 test(function() { - assert_equals(document.getElementById("negFloatDown").start, -4, "start of -4.03 -> -4"); + assert_equals(document.getElementById("negFloatDown").start, -4); }, "IDL and content attribute parse start of '-4.03' correctly."); - // posFloatUp's first element has value of 4.9 which should return 4 test(function() { - assert_equals(document.getElementById("posFloatUp").start, 4, "start of 4.9 -> 4"); + assert_equals(document.getElementById("posFloatUp").start, 4); }, "IDL and content attribute parse start of '4.9' correctly."); - // negFloatUp's first element has value of -4.9 which should return -4 test(function() { - assert_equals(document.getElementById("negFloatUp").start, -4, "start of -4.9 -> -4"); + assert_equals(document.getElementById("negFloatUp").start, -4); }, "IDL and content attribute parse start of '-4.9' correctly."); - // exponent's first element has value of 7e2 which should return 7 test(function() { - assert_equals(document.getElementById("exponent").start, 7, "start of 7e2 -> 7"); + assert_equals(document.getElementById("exponent").start, 7); }, "IDL and content attribute parse start of '7e2' correctly."); diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/ol.start-reflection-2.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/ol.start-reflection-2.html index f6a260a8b4e..c7c9aeab481 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/ol.start-reflection-2.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/ol.start-reflection-2.html @@ -18,7 +18,7 @@
                                                                                        diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1a.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1a.html index 35e967c05e6..202315b1c6b 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1a.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1a.html @@ -1,4 +1,8 @@ + +`reversed` should reverse the numbering correctly + +
                                                                                        1. Three
                                                                                        2. Two
                                                                                        3. diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1b.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1b.html index d9810560eb7..4d6202943d0 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1b.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1b.html @@ -1,4 +1,8 @@ + +Dynamically setting `reversed` should update the numbering + +
                                                                                          1. Three
                                                                                          2. Two
                                                                                          3. diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1c.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1c.html index 82ae844335e..6fad13053f1 100644 --- a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1c.html +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1c.html @@ -1,4 +1,8 @@ + +Reversed numbering should update on dynamic addition of child nodes + +
                                                                                            1. Three
                                                                                            2. Two
                                                                                            3. diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1d.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1d.html new file mode 100644 index 00000000000..a256b6a428f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1d.html @@ -0,0 +1,12 @@ + + +Reverse numbering should not be affected by nested div + + +
                                                                                                +
                                                                                              1. Three
                                                                                              2. +
                                                                                                +
                                                                                              3. Two
                                                                                              4. +
                                                                                              5. One
                                                                                              6. +
                                                                                                +
                                                                                              diff --git a/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1e.html b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1e.html new file mode 100644 index 00000000000..48a27999423 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/grouping-content/the-ol-element/reversed-1e.html @@ -0,0 +1,11 @@ + + +Reverse numbering should not count display:none elements + + +
                                                                                                +
                                                                                              1. Three
                                                                                              2. +
                                                                                              3. Three
                                                                                              4. +
                                                                                              5. Two
                                                                                              6. +
                                                                                              7. One
                                                                                              8. +
                                                                                              diff --git a/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html b/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html new file mode 100644 index 00000000000..3d22481d29f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html @@ -0,0 +1,78 @@ + + +Test behavior of rel="noopener" links + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-popup.html b/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-popup.html new file mode 100644 index 00000000000..2057dbf0bea --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-popup.html @@ -0,0 +1,19 @@ + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-1.html b/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-1.html new file mode 100644 index 00000000000..0dbd14275cb --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-1.html @@ -0,0 +1,4 @@ + + diff --git a/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-2.html b/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-2.html new file mode 100644 index 00000000000..dd2d719134f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-2.html @@ -0,0 +1,8 @@ + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/data-url.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/data-url.html new file mode 100644 index 00000000000..86190b6cf9f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/data-url.html @@ -0,0 +1,24 @@ + + +data URL and scripts + + +
                                                                                              + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-1.html new file mode 100644 index 00000000000..0fe39b11a81 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-1.html @@ -0,0 +1,12 @@ + + +Test that the insertion point is defined in the error event of a parser-inserted script that actually started a fetch (but just had it fail). + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html new file mode 100644 index 00000000000..6d3f3ef09ee --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html @@ -0,0 +1,13 @@ + + +Test that the insertion point is not defined in the error event of a + parser-inserted script that has an unparseable URL + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onload-insertion-point.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onload-insertion-point.html new file mode 100644 index 00000000000..ce3ddeee65f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-onload-insertion-point.html @@ -0,0 +1,12 @@ + + +Test that the insertion point is defined in the load event of a parser-inserted script. + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onerror-insertion-point-1-helper.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onerror-insertion-point-1-helper.html new file mode 100644 index 00000000000..d9b0c84ca4f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onerror-insertion-point-1-helper.html @@ -0,0 +1,2 @@ +Some diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onerror-insertion-point-2-helper.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onerror-insertion-point-2-helper.html new file mode 100644 index 00000000000..7a173981562 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onerror-insertion-point-2-helper.html @@ -0,0 +1,2 @@ +Some diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onload-insertion-point-helper.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onload-insertion-point-helper.html new file mode 100644 index 00000000000..f0236b4fbb3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onload-insertion-point-helper.html @@ -0,0 +1,2 @@ +Some diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onload-insertion-point-helper.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onload-insertion-point-helper.js new file mode 100644 index 00000000000..8a96a0b783e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/support/script-onload-insertion-point-helper.js @@ -0,0 +1 @@ +document.write("te"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/node-document-changes.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/node-document-changes.html index 8027fbb9196..0c60c10738d 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/node-document-changes.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/node-document-changes.html @@ -14,7 +14,6 @@
                                                                                              diff --git a/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-tbody-element/deleteRow.html b/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-tbody-element/deleteRow.html index c81abd82600..5e50a318739 100644 --- a/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-tbody-element/deleteRow.html +++ b/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-tbody-element/deleteRow.html @@ -51,4 +51,11 @@ test(function () { assert_equals(tbody.rows.length, 0); }, "HTMLTableSectionElement deleteRow(-1) with no rows"); +test(function () { + assert_equals(tbody.rows.length, 0); + assert_throws("IndexSizeError", function () { + tbody.deleteRow(0); + }); +}, "HTMLTableSectionElement deleteRow(0) with no rows"); + diff --git a/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-tr-element/deleteCell.html b/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-tr-element/deleteCell.html index 1400d32e1b1..aa15ef77ec2 100644 --- a/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-tr-element/deleteCell.html +++ b/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-tr-element/deleteCell.html @@ -51,4 +51,11 @@ test(function () { assert_equals(tr.cells.length, 0); }, "HTMLTableRowElement deleteCell(-1) with no cells"); +test(function () { + assert_equals(tr.cells.length, 0); + assert_throws("IndexSizeError", function () { + tr.deleteCell(0); + }); +}, "HTMLTableRowElement deleteCell(0) with no cells"); + diff --git a/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-exception.html b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-exception.html new file mode 100644 index 00000000000..fecda221dec --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-exception.html @@ -0,0 +1,22 @@ + + +requestIdleCallback callback exception reported to error handler + + +
                                                                                              + diff --git a/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-iframe.html b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-iframe.html new file mode 100644 index 00000000000..965941be107 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-iframe.html @@ -0,0 +1,17 @@ + + + + + +
                                                                                              + + diff --git a/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-invoked.html b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-invoked.html new file mode 100644 index 00000000000..5e799cf39f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-invoked.html @@ -0,0 +1,12 @@ + + +requestIdleCallback callback must be called eventually + + +
                                                                                              + 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 new file mode 100644 index 00000000000..8584c71daf1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-multiple-calls.html @@ -0,0 +1,41 @@ + + +multiple calls to requestIdleCallback + + +
                                                                                              + diff --git a/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-timeout.html b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-timeout.html new file mode 100644 index 00000000000..823d5f5db47 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/callback-timeout.html @@ -0,0 +1,28 @@ + + +requestIdleCallback timeout callback must be called with didTimeout equal to true + + +
                                                                                              + diff --git a/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/cancel-invoked.html b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/cancel-invoked.html new file mode 100644 index 00000000000..8956b8709dc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/cancel-invoked.html @@ -0,0 +1,26 @@ + + +cancelling idle requests + + +
                                                                                              + diff --git a/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/idlharness.html b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/idlharness.html new file mode 100644 index 00000000000..6033535f397 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/idle-callbacks/idlharness.html @@ -0,0 +1,34 @@ + + +idlharness test + + + + + + + +
                                                                                              +partial interface Window {
                                                                                              +  unsigned long requestIdleCallback(IdleRequestCallback callback,
                                                                                              +                                    optional IdleRequestOptions options);
                                                                                              +  void          cancelIdleCallback(unsigned long handle);
                                                                                              +};
                                                                                              +
                                                                                              +dictionary IdleRequestOptions {
                                                                                              +  unsigned long timeout;
                                                                                              +};
                                                                                              +
                                                                                              +callback IdleRequestCallback = void (IdleDeadline deadline);
                                                                                              +
                                                                                              + diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-body-window.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-body-window.html index bfd6f9c6815..1c87892cba7 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-body-window.html +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-body-window.html @@ -21,4 +21,14 @@ handlers.forEach(function(handler) { }, handler); }); +handlers.forEach(function(handler) { + document.body['on' + handler] = null; +}); + +handlers.forEach(function(handler) { + test(function() { + assert_equals(document.body['on' + handler], null); + assert_equals(window['on' + handler], null); + }, handler + " removal"); +}); diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https.html new file mode 100644 index 00000000000..8a8a8f67f22 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https.html @@ -0,0 +1,96 @@ + +MessageEvent constructor + + + + 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/NavigatorID.js index cf16c68d441..78706f44d74 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/NavigatorID.js @@ -1,11 +1,19 @@ function run_test() { + var compatibilityMode; + if (navigator.userAgent.includes("Chrome")) { + compatibilityMode = "Chrome"; + } else if (navigator.userAgent.includes("WebKit")) { + compatibilityMode = "WebKit"; + } else { + compatibilityMode = "Gecko"; + } + test(function() { assert_equals(navigator.appCodeName, "Mozilla"); }, "appCodeName"); test(function() { - assert_equals(typeof navigator.appName, "string", - "navigator.appName should be a string"); + assert_equals(navigator.appName, "Netscape"); }, "appName"); test(function() { @@ -23,31 +31,22 @@ function run_test() { }, "product"); test(function() { - // See https://www.w3.org/Bugs/Public/show_bug.cgi?id=22555 if ("window" in self) { - // If you identify as WebKit, taintEnabled should not exist. - if (navigator.userAgent.indexOf("WebKit") != -1) { - assert_false("taintEnabled" in navigator); - } - // Otherwise it should exist and return false. - else { - assert_false(navigator.taintEnabled()); + if (compatibilityMode == "Gecko") { + assert_equals(navigator.productSub, "20100101"); + } else { + assert_equals(navigator.productSub, "20030107"); } } else { - // taintEnabled should not exist in workers. - assert_false("taintEnabled" in navigator); + assert_false("productSub" in navigator); } - }, "taintEnabled"); + }, "productSub"); test(function() { assert_equals(typeof navigator.userAgent, "string", "navigator.userAgent should be a string"); }, "userAgent type"); - test(function() { - assert_equals(navigator.vendorSub, ""); - }, "vendorSub"); - async_test(function() { var request = new XMLHttpRequest(); request.onload = this.step_func_done(function() { @@ -60,4 +59,48 @@ function run_test() { "filter_name=User-Agent"); request.send(); }, "userAgent value"); + + test(function() { + if ("window" in self) { + if (compatibilityMode == "Chrome") { + assert_equals(navigator.vendor, "Google Inc."); + } else if (compatibilityMode == "WebKit") { + assert_equals(navigator.vendor, "Apple Computer, Inc."); + } else { + assert_equals(navigator.vendor, ""); + } + } else { + assert_false("vendor" in navigator); + } + }, "vendor"); + + test(function() { + if ("window" in self) { + assert_equals(navigator.vendorSub, ""); + } else { + assert_false("vendorSub" in navigator); + } + }, "vendorSub"); + + // "If the navigator compatibility mode is Gecko, then the user agent must + // also support the following partial interface" (taintEnabled() and oscpu) + // See https://www.w3.org/Bugs/Public/show_bug.cgi?id=22555 and + // https://www.w3.org/Bugs/Public/show_bug.cgi?id=27820 + + test(function() { + if ("window" in self && compatibilityMode == "Gecko") { + assert_false(navigator.taintEnabled()); + } else { + assert_false("taintEnabled" in navigator); + } + }, "taintEnabled"); + + test(function() { + if ("window" in self && compatibilityMode == "Gecko") { + assert_equals(typeof navigator.oscpu, "string", + "navigator.oscpu should be a string"); + } else { + assert_false("oscpu" in navigator); + } + }, "oscpu"); } diff --git a/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html new file mode 100644 index 00000000000..1dbfa2b46af --- /dev/null +++ b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html @@ -0,0 +1,90 @@ + + +Canvas's ImageBitmapRenderingContext test + + + + diff --git a/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-creation-with-alpha.html b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-creation-with-alpha.html new file mode 100644 index 00000000000..88d12d144c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-creation-with-alpha.html @@ -0,0 +1,75 @@ + + +Canvas's ImageBitmapRenderingContext test + + + + diff --git a/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-creation.html b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-creation.html new file mode 100644 index 00000000000..3daa3977898 --- /dev/null +++ b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-creation.html @@ -0,0 +1,19 @@ + + +Canvas's ImageBitmapRenderingContext test + + + + diff --git a/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-preserves-canvas.html b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-preserves-canvas.html new file mode 100644 index 00000000000..eca7afe9ddd --- /dev/null +++ b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/context-preserves-canvas.html @@ -0,0 +1,21 @@ + + +Canvas's ImageBitmapRenderingContext test + + + + diff --git a/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/tranferFromImageBitmap-null.html b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/tranferFromImageBitmap-null.html new file mode 100644 index 00000000000..c12a8c93fdb --- /dev/null +++ b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/tranferFromImageBitmap-null.html @@ -0,0 +1,75 @@ + + +Canvas's ImageBitmapRenderingContext test + + + + diff --git a/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/transferFromImageBitmap-detached.html b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/transferFromImageBitmap-detached.html new file mode 100644 index 00000000000..2c547ee63b5 --- /dev/null +++ b/tests/wpt/web-platform-tests/imagebitmap-renderingcontext/transferFromImageBitmap-detached.html @@ -0,0 +1,34 @@ + + +Canvas's ImageBitmapRenderingContext test + + + + diff --git a/tests/wpt/web-platform-tests/innerText/getter-tests.js b/tests/wpt/web-platform-tests/innerText/getter-tests.js index d4511410b46..44be5267e55 100644 --- a/tests/wpt/web-platform-tests/innerText/getter-tests.js +++ b/tests/wpt/web-platform-tests/innerText/getter-tests.js @@ -126,10 +126,6 @@ testText("
                                                                                              abc", "abc", "
                                                                                              contents preserved"); testText("
                                                                                              abc", "abc", "
                                                                                              contents preserved"); testText("", "", " contents ignored"); testText("
                                                                                      • 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