From 3b4f0ec0bb5894244885c34fccae96bb2f0ce136 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 26 Sep 2016 10:52:50 +0200 Subject: [PATCH] Update web-platform-tests to revision 3b3585e368841b77caea8576fa56cef91c3fbdf0 --- tests/wpt/metadata/MANIFEST.json | 1037 +++++++++++------ .../XMLHttpRequest/event-error.html.ini | 5 - .../XMLHttpRequest/formdata-foreach.html.ini | 1 + .../setrequestheader-case-insensitive.htm.ini | 5 + .../setrequestheader-header-allowed.htm.ini | 29 + tests/wpt/metadata/dom/interfaces.html.ini | 138 +++ .../wpt/metadata/dom/nodes/rootNode.html.ini | 14 + .../api/basic/accept-header-worker.html.ini | 9 + .../fetch/api/basic/accept-header.html.ini | 9 + .../cors-preflight-referrer-worker.html.ini | 30 + .../api/cors/cors-preflight-referrer.html.ini | 30 + .../origin/origin-of-data-document.html.ini | 6 + .../Document.currentScript.sub.html.ini | 3 + .../document.forms.html.ini | 5 + .../html/dom/reflection-embedded.html.ini | 9 +- .../html/dom/reflection-text.html.ini | 9 +- .../the-style-element/style_scoped.html.ini | 5 - .../HTMLElement/HTMLTrackElement/src.html.ini | 9 + .../media-controllers/task-source.html.ini | 5 - .../the-area-element/area-shape.html.ini | 6 + .../the-canvas-element/historical.html.ini | 3 + .../form-validation-checkValidity.html.ini | 30 + .../form-validation-reportValidity.html.ini | 30 + ...validation-validity-rangeOverflow.html.ini | 33 + ...alidation-validity-rangeUnderflow.html.ini | 36 + .../form-validation-validity-valid.html.ini | 12 + ...-validation-validity-valueMissing.html.ini | 33 + .../form-validation-willValidate.html.ini | 12 + .../html/semantics/forms/historical.html.ini | 8 + .../selection-not-application.html.ini | 3 + .../forms/the-input-element/checkbox.html.ini | 3 - .../the-input-element/cloning-steps.html.ini | 14 + .../the-input-element/datetime-2.html.ini | 47 - .../type-change-state.html.ini | 99 ++ .../the-input-element/valueMode.html.ini | 6 + .../cloning-steps.html.ini | 8 + .../the-script-element/historical.html.ini | 14 + .../the-script-element/load-event.html.ini | 5 + .../serializing.html.ini | 27 - tests/wpt/metadata/mozilla-sync | 2 +- .../navigator/window-only.worker.js.ini | 11 + .../interface-objects/001.worker.js.ini | 57 + .../interface-objects/002.worker.js.ini | 27 + .../semantics/interface-objects/003.html.ini | 1 + .../semantics/interface-objects/004.html.ini | 1 + tests/wpt/mozilla/meta/MANIFEST.json | 48 +- .../tex_image_2d_canvas_no_context.html.ini | 4 - ...k_ridge.html => border_black_ridge_a.html} | 1 - .../tests/css/border_black_ridge_b.html | 22 + .../tests/css/image_rendering_auto_a.html | 2 +- tests/wpt/web-platform-tests/.travis.yml | 9 +- ...canvas_complexshapes_ispointInpath_001.htm | 21 +- ...lorsandstyles_createlineargradient_001.htm | 34 +- .../2dcontext/shadows/canvas_shadows_001.htm | 32 +- .../text-styles/canvas_text_font_001-ref.htm | 22 + .../text-styles/canvas_text_font_001.htm | 15 +- tests/wpt/web-platform-tests/README.md | 13 +- .../WebCryptoAPI/derive_bits_keys/hkdf.js | 26 +- .../derive_bits_keys/hkdf_vectors.js | 144 +-- .../XMLHttpRequest/event-error.html | 25 - .../setrequestheader-case-insensitive.htm | 2 +- .../setrequestheader-header-allowed.htm | 4 +- .../AmbientLightSensor_browsing_context.html | 31 + .../AmbientLightSensor_onchange-manual.html | 36 + .../AmbientLightSensor_onstatechange.html | 39 + .../AmbientLightSensor_start.html | 31 + .../AmbientLightSensor_stop.html | 30 + .../ambient-light/idlharness.html | 2 +- .../ambient-light/support-iframe.html | 11 + .../3.1-annotationContextValidated.json | 2 +- .../3.1-annotationIdValidated.json | 2 +- .../3.1-annotationTypeValidated.json | 2 +- .../annotations/3.1-targetKeyFound.json | 2 +- .../3.2-bodyObjectsRecognized.json | 2 +- .../3.3.1-annotationCreatedImplemented.json | 4 +- .../3.3.7-annotationViaValidated.json | 2 +- .../annotations/annotationAgentOptionals.test | 25 - .../annotations/annotationMusts-manual.html | 23 +- .../annotations/annotationMusts.test | 48 +- .../annotationOptionals-manual.html | 21 +- .../annotations/annotationOptionals.test | 76 +- ... => annotationsAgentOptionals-manual.html} | 23 +- .../annotationsAgentOptionals.test | 46 + .../annotations/bodiesTargets/.gitignore | 0 .../bodiesTargets/3.2.1-bodyEWR.json | 26 + .../bodiesTargets/3.2.1-bodyFormat.json | 38 + .../bodiesTargets/3.2.1-bodyLanguage.json | 38 + .../3.2.1-bodyProcessingLanguage.json | 38 + .../bodiesTargets/3.2.1-bodySingleFormat.json | 39 + .../3.2.1-bodySingleLanguage.json | 38 + .../3.2.1-bodyTextDirection.json | 38 + .../3.2.1-bodyTextDirectionValidated.json | 44 + .../bodiesTargets/3.2.1-targEWR.json | 25 + .../bodiesTargets/3.2.1-targFormat.json | 37 + .../bodiesTargets/3.2.1-targLanguage.json | 37 + .../3.2.1-targProcessingLanguage.json | 37 + .../bodiesTargets/3.2.1-targSingleFormat.json | 37 + .../3.2.1-targSingleLanguage.json | 37 + .../3.2.1-targTextDirection.json | 37 + .../3.2.1-targTextDirectionValidated.json | 44 + .../bodiesTargets/3.2.2-bodyType.json | 38 + .../bodiesTargets/3.2.2-targType.json | 37 + .../3.2.4-bodyChoiceSetNoValue.json | 21 + .../bodiesTargets/3.2.4-bodyETB.json | 24 + .../bodiesTargets/3.2.4-bodyETBTypeText.json | 39 + .../3.2.4-bodyETBTypeTextualBody.json | 39 + .../3.2.4-targChoiceSetNoValue.json | 21 + .../3.2.4-targNoTypeTextualBody.json | 32 + .../bodiesTargets/3.2.7-bodyChoice.json | 29 + .../bodiesTargets/3.2.7-bodyChoiceSet.json | 29 + .../bodiesTargets/3.2.7-bodyEWRNoItems.json | 25 + .../3.2.7-bodyEmbeddedTextualNoItems.json | 23 + .../3.2.7-bodySpecificResourceNoItems.json | 23 + .../bodiesTargets/3.2.7-targChoice.json | 28 + .../bodiesTargets/3.2.7-targChoiceSet.json | 28 + .../bodiesTargets/3.2.7-targEWRNoItems.json | 25 + .../3.2.7-targSpecificResourceNoItems.json | 23 + .../bodiesTargets/3.2.8-bodyComposite.json | 29 + .../bodiesTargets/3.2.8-bodyIndependents.json | 29 + .../bodiesTargets/3.2.8-bodyList.json | 29 + .../bodiesTargets/3.2.8-targComposite.json | 28 + .../bodiesTargets/3.2.8-targIndependents.json | 28 + .../bodiesTargets/3.2.8-targList.json | 28 + .../bodiesTargets/3.3.1-bodyCreated.json | 39 + .../3.3.1-bodyCreatedValidated.json | 43 + .../bodiesTargets/3.3.1-bodyCreator.json | 38 + .../bodiesTargets/3.3.1-bodyModified.json | 38 + .../3.3.1-bodyModifiedValidated.json | 44 + .../3.3.1-bodySingleCreator.json | 38 + .../bodiesTargets/3.3.1-targCreated.json | 38 + .../3.3.1-targCreatedValidated.json | 43 + .../bodiesTargets/3.3.1-targCreator.json | 37 + .../bodiesTargets/3.3.1-targModified.json | 37 + .../3.3.1-targModifiedValidated.json | 44 + .../3.3.1-targSingleCreator.json | 37 + ....3.2-bodyCreatorAgentEmailImplemented.json | 37 + ...bodyCreatorAgentEmail_sha1Implemented.json | 37 + ...2-bodyCreatorAgentHomepageImplemented.json | 37 + .../3.3.2-bodyCreatorAgentIdImplemented.json | 37 + ...3.3.2-bodyCreatorAgentNameImplemented.json | 37 + ...2-bodyCreatorAgentNicknameImplemented.json | 37 + ...bodyCreatorAgentSingleNameImplemented.json | 37 + ...3.3.2-bodyCreatorAgentTypeImplemented.json | 37 + ....3.2-targCreatorAgentEmailImplemented.json | 36 + ...targCreatorAgentEmail_sha1Implemented.json | 36 + ...2-targCreatorAgentHomepageImplemented.json | 36 + .../3.3.2-targCreatorAgentIdImplemented.json | 36 + ...3.3.2-targCreatorAgentNameImplemented.json | 36 + ...2-targCreatorAgentNicknameImplemented.json | 36 + ...targCreatorAgentSingleNameImplemented.json | 36 + ...3.3.2-targCreatorAgentTypeImplemented.json | 36 + .../bodiesTargets/3.3.3-bodyAudience.json | 38 + .../bodiesTargets/3.3.3-targAudience.json | 37 + .../3.3.4-bodyAccessibility.json | 39 + .../3.3.4-targAccessibility.json | 38 + .../3.3.5-bodyChoiceSetNoPurpose.json | 21 + .../bodiesTargets/3.3.5-bodyEWRNoPurpose.json | 24 + .../bodiesTargets/3.3.5-bodyPurpose.json | 37 + .../3.3.5-targChoiceSetNoPurpose.json | 21 + .../bodiesTargets/3.3.5-targEWRNoPurpose.json | 25 + .../bodiesTargets/3.3.5-targPurpose.json | 36 + .../bodiesTargets/3.3.6-bodyRights.json | 38 + .../3.3.6-bodyRightsValidated.json | 44 + .../bodiesTargets/3.3.6-targRights.json | 37 + .../3.3.6-targRightsValidated.json | 44 + .../bodiesTargets/3.3.7-bodyCanonical.json | 38 + .../3.3.7-bodyCanonicalValidated.json | 44 + .../bodiesTargets/3.3.7-bodyVia.json | 28 + .../bodiesTargets/3.3.7-bodyViaValidated.json | 43 + .../bodiesTargets/3.3.7-targCanonical.json | 37 + .../3.3.7-targCanonicalValidated.json | 44 + .../bodiesTargets/3.3.7-targVia.json | 27 + .../bodiesTargets/3.3.7-targViaValidated.json | 43 + .../bodiesTargets/4-bodyChoiceSetFound.json | 25 + .../4-bodyChoiceSetNoSource.json | 21 + .../4-bodyEmbeddedTextualNoSource.json | 23 + .../bodiesTargets/4-bodySpecificResource.json | 34 + .../4-bodySpecificResourceNoValue.json | 23 + .../bodiesTargets/4-targChoiceSetFound.json | 25 + .../4-targChoiceSetNoSource.json | 21 + .../bodiesTargets/4-targSpecificResource.json | 33 + .../4-targSpecificResourceNoValue.json | 23 + .../bodiesTargets/4.4-bodyStyleClass.json | 36 + .../bodiesTargets/4.4-targStyleClass.json | 35 + .../bodiesTargets/4.5-bodyRenderedVia.json | 35 + .../bodiesTargets/4.5-targRenderedVia.json | 35 + .../4.2-TextDataPositionSelectorValid.json | 110 ++ .../4.2-fragmentCssXPathSelectorValid.json | 112 ++ .../specificResource/4.2-selectorFound.json | 112 ++ .../4.2-selectorValidIfPresent.json | 43 + .../specificResource/4.2.1-conformsTo.json | 112 ++ .../4.2.1-fragmentSelector.json | 112 ++ .../specificResource/4.2.2-cssSelector.json | 112 ++ .../specificResource/4.2.3-xpathSelector.json | 112 ++ .../specificResource/4.2.4-prefix.json | 112 ++ .../specificResource/4.2.4-suffix.json | 112 ++ .../4.2.4-textQuoteSelector.json | 112 ++ .../4.2.4-textQuoteSelectorValid.json | 107 ++ .../4.2.5-textPositionSelector.json | 112 ++ .../4.2.6-dataPositionSelector.json | 112 ++ .../specificResource/4.2.7-svgSelector.json | 112 ++ .../4.2.7-svgSelectorValid.json | 107 ++ .../specificResource/4.2.8-rangeSelector.json | 112 ++ .../4.2.8-rangeSelectorValid.json | 107 ++ .../specificResource/4.3-stateFound.json | 112 ++ .../4.3-stateValidIfPresent.json | 43 + .../specificResource/4.3.1-cached.json | 112 ++ .../specificResource/4.3.1-timeState.json | 112 ++ .../4.3.1-timeStateValid.json | 107 ++ .../4.3.2-httpRequestStateValid.json | 107 ++ .../4.3.2-requestHeaderState.json | 112 ++ .../specificResource/4.3.3-refinedBy.json | 90 ++ .../4.3.3-refinedByValidated.json | 45 + .../specificResource/4.4-styleClass.json | 90 ++ .../4.4-styleClassValidIfPresent.json | 87 ++ .../specificResource/4.5-renderedVia.json | 90 ++ .../specificResource/4.6-scope.json | 90 ++ .../definitions/specificResource.json | 743 +++++++++--- .../annotation-model/tools/template_js | 1 + .../annotation-model/tools/template_manual | 5 +- .../files/annotations/anno1.json | 7 + .../files/annotations/anno1.jsonld | 11 + .../files/annotations/anno10.json | 19 + .../files/annotations/anno11.json | 18 + .../files/annotations/anno12.json | 19 + .../files/annotations/anno13.json | 16 + .../files/annotations/anno14.json | 16 + .../files/annotations/anno15.json | 20 + .../files/annotations/anno16.json | 12 + .../files/annotations/anno17.json | 12 + .../files/annotations/anno18.json | 19 + .../files/annotations/anno19.json | 11 + .../files/annotations/anno2.json | 17 + .../files/annotations/anno2.jsonld | 11 + .../files/annotations/anno20.json | 12 + .../files/annotations/anno21.json | 14 + .../files/annotations/anno22.json | 13 + .../files/annotations/anno23.json | 15 + .../files/annotations/anno24.json | 13 + .../files/annotations/anno25.json | 13 + .../files/annotations/anno26.json | 15 + .../files/annotations/anno27.json | 14 + .../files/annotations/anno28.json | 14 + .../files/annotations/anno29.json | 13 + .../files/annotations/anno3.json | 13 + .../files/annotations/anno3.jsonld | 8 + .../files/annotations/anno30.json | 13 + .../files/annotations/anno31.json | 20 + .../files/annotations/anno32.json | 19 + .../files/annotations/anno33.json | 12 + .../files/annotations/anno34.json | 14 + .../files/annotations/anno35.json | 13 + .../files/annotations/anno36.json | 22 + .../files/annotations/anno37.json | 11 + .../files/annotations/anno38.json | 14 + .../files/annotations/anno39.json | 15 + .../files/annotations/anno4.json | 11 + .../files/annotations/anno40.json | 10 + .../files/annotations/anno41.json | 82 ++ .../files/annotations/anno5.json | 12 + .../files/annotations/anno6.json | 7 + .../files/annotations/anno7.json | 11 + .../files/annotations/anno8.json | 6 + .../files/annotations/anno9.json | 16 + .../files/annotations/annotation.headers | 4 + .../annotations/annotation.options.headers | 3 + .../files/annotations/collection.headers | 5 + .../annotations/collection.options.headers | 3 + .../files/annotations/cors.headers | 4 + .../files/annotations/page.headers | 3 + .../annotation-protocol/files/index.html | 26 + .../files/index.html.headers | 1 + .../annotation-protocol/requirements.txt | 1 + .../tools/protocol-server.py | 435 +++++++ .../elements/picture/picture-isvalid.html | 1 - .../securitypolicyviolation-idl.html | 55 + .../HTMLElement-constructor.html | 84 ++ tests/wpt/web-platform-tests/diff-manifest.py | 35 + .../web-platform-tests/docs/configuration.md | 41 +- .../web-platform-tests/docs/css-metadata.md | 175 +-- .../web-platform-tests/docs/review-process.md | 17 - .../web-platform-tests/dom/interfaces.html | 4 + .../dom/nodes/Document-createEvent.html | 1 + .../dom/nodes/rootNode.html | 82 ++ .../domxpath/evaluator-constructor.html | 3 +- .../EncryptedMediaExtensions.idl | 9 +- .../Google/encrypted-media-syntax.html | 17 +- ...d-media-keystatuses-multiple-sessions.html | 0 ...ed-media-keystatuses-multiple-updates.html | 0 ...pted-media-playback-multiple-sessions.html | 0 .../encrypted-media/README.md | 7 + .../clearkey-check-initdata-type.html | 1 - .../encrypted-media/clearkey-events.html | 1 - ...key-generate-request-disallowed-input.html | 1 - ...learkey-keystatuses-multiple-sessions.html | 3 +- .../encrypted-media/clearkey-keystatuses.html | 3 +- ...4-playback-destroy-persistent-license.html | 2 +- ...arkey-mp4-playback-persistent-license.html | 2 +- ...ayback-persistent-usage-record-events.html | 5 +- ...-mp4-playback-persistent-usage-record.html | 5 +- ...k-retrieve-destroy-persistent-license.html | 1 - ...back-retrieve-persistent-usage-record.html | 2 - ...learkey-mp4-playback-temporary-events.html | 5 +- ...arkey-mp4-playback-temporary-multikey.html | 7 +- ...-mp4-playback-temporary-multisession.html} | 6 +- ...back-temporary-setMediaKeys-after-src.html | 2 - ...k-temporary-setMediaKeys-after-update.html | 2 - ...ck-temporary-setMediaKeys-immediately.html | 2 - ...ck-temporary-setMediaKeys-onencrypted.html | 2 - ...key-mp4-playback-temporary-two-videos.html | 2 +- ...-mp4-playback-temporary-waitingforkey.html | 5 +- .../clearkey-mp4-playback-temporary.html | 3 +- ...rkey-not-callable-after-createsession.html | 1 - .../content/content-metadata.js | 43 +- ...ideo_512x288_h264-360k_enc_2keys_2sess.mp4 | Bin 476559 -> 475456 bytes .../drm-check-initdata-type.html | 1 - .../encrypted-media/drm-events.html | 1 - ...drm-generate-request-disallowed-input.html | 1 - .../drm-keystatuses-multiple-sessions.html | 3 +- .../encrypted-media/drm-keystatuses.html | 3 +- ...4-playback-destroy-persistent-license.html | 6 +- ...p4-playback-persistent-license-events.html | 5 +- .../drm-mp4-playback-persistent-license.html | 4 +- ...ayback-persistent-usage-record-events.html | 5 +- ...-mp4-playback-persistent-usage-record.html | 4 +- ...k-retrieve-destroy-persistent-license.html | 2 +- ...-playback-retrieve-persistent-license.html | 2 +- ...back-retrieve-persistent-usage-record.html | 2 - .../drm-mp4-playback-temporary-events.html | 4 +- .../drm-mp4-playback-temporary-multikey.html | 10 +- ...-mp4-playback-temporary-multisession.html} | 6 +- ...back-temporary-setMediaKeys-after-src.html | 2 - ...k-temporary-setMediaKeys-after-update.html | 2 - ...ck-temporary-setMediaKeys-immediately.html | 2 - ...ck-temporary-setMediaKeys-onencrypted.html | 2 - ...drm-mp4-playback-temporary-two-videos.html | 5 +- ...-mp4-playback-temporary-waitingforkey.html | 11 +- .../drm-mp4-playback-temporary.html | 3 +- .../drm-not-callable-after-createsession.html | 1 - ...y-retrieve-destroy-persistent-license.html | 1 - .../clearkey-retrieve-persistent-license.html | 1 - ...m-retrieve-destroy-persistent-license.html | 1 - .../drm-retrieve-persistent-license.html | 1 - .../drm-retrieve-persistent-usage-record.html | 1 - .../retrieve-persistent-usage-record.html | 1 - .../generate-request-disallowed-input.js | 32 +- ...playback-persistent-usage-record-events.js | 2 +- .../playback-persistent-usage-record.js | 30 +- ...ayback-retrieve-persistent-usage-record.js | 33 +- .../scripts/playback-temporary-events.js | 53 +- ...layback-temporary-multikey-multisession.js | 85 +- ....js => playback-temporary-multisession.js} | 73 +- .../playback-temporary-setMediaKeys.js | 2 +- .../scripts/playback-temporary-two-videos.js | 29 +- .../playback-temporary-waitingforkey.js | 3 +- .../scripts/playback-temporary.js | 65 +- .../util/drm-messagehandler.js | 22 +- .../fetch/api/basic/accept-header.js | 24 + .../fetch/api/cors/cors-preflight-referrer.js | 26 +- .../fetch/api/cors/cors-preflight.js | 2 +- .../fetch/api/redirect/redirect-to-dataurl.js | 19 +- .../wpt/web-platform-tests/fullscreen/OWNERS | 2 + .../api/document-fullscreen-enabled.html | 17 + .../api/document-onfullscreenerror.html | 13 + .../cross-origin-objects.html | 2 +- .../origin/origin-of-data-document.html | 28 + .../Document.currentScript.sub.html | 20 - .../dom-tree-accessors/document.forms.html | 9 +- .../html/dom/elements-embedded.js | 5 +- .../html/dom/elements-metadata.js | 1 - .../html/dom/elements-tabular.js | 3 - .../html/dom/elements-text.js | 2 +- .../web-platform-tests/html/dom/reflection.js | 79 +- .../the-hidden-attribute/hidden-1a.html | 1 + .../the-hidden-attribute/hidden-1b.html | 1 + .../the-hidden-attribute/hidden-1c.html | 1 + .../the-hidden-attribute/hidden-1d.html | 1 + .../the-hidden-attribute/hidden-1e.html | 1 + .../the-hidden-attribute/hidden-1f.html | 1 + .../the-hidden-attribute/hidden-1g.html | 1 + ...> marquee-scrollamount-effect-manual.html} | 0 .../the-style-element/historical.html | 14 + .../the-style-element/style_scoped.html | 42 - ..._loop_current_media_controller-manual.html | 23 - .../media-elements/historical.html | 8 + .../HTMLElement/HTMLTrackElement/src.html | 94 +- .../currentTime.html | 8 - .../media-controllers/task-source.html | 27 - ..._loop_current_media_controller-manual.html | 23 - .../the-area-element/area-shape.html | 3 + .../the-canvas-element/historical.html | 70 +- .../the-iframe-element/historical.html | 16 + .../form-validation-checkValidity.html | 10 +- .../form-validation-reportValidity.html | 10 +- ...orm-validation-validity-rangeOverflow.html | 23 +- ...rm-validation-validity-rangeUnderflow.html | 26 +- ...form-validation-validity-stepMismatch.html | 10 - .../form-validation-validity-valid.html | 8 +- ...form-validation-validity-valueMissing.html | 15 +- .../form-validation-willValidate.html | 2 +- .../html/semantics/forms/historical.html | 85 ++ .../selection-not-application.html | 2 +- .../forms/the-input-element/checkbox.html | 2 +- .../the-input-element/cloning-steps.html | 53 + .../forms/the-input-element/datetime-2.html | 45 - .../forms/the-input-element/files.html | 1 - .../forms/the-input-element/month.html | 28 - .../the-input-element/type-change-state.html | 2 +- .../forms/the-input-element/valueMode.html | 2 +- .../the-textarea-element/cloning-steps.html | 34 + .../the-textarea-element/wrap-reflect-1a.html | 1 + .../the-textarea-element/wrap-reflect-1b.html | 1 + .../the-script-element/historical.html | 53 + .../the-script-element/load-event.html | 24 + .../script-before-after-events.html | 55 - .../semantics/tabular-data/historical.html | 25 + .../text-level-semantics/historical.html | 32 + .../initial-linefeed-pre.html | 2 +- .../serializing.html | 18 +- .../http/basic-auth-cache-test-ref.html | 9 +- .../http/basic-auth-cache-test.html | 5 +- .../http/resources/image.png | Bin 11171 -> 0 bytes .../http/resources/securedimage.py | 2 +- .../media-source/interfaces.html | 1 + ...diaStreamTrackEvent-constructor.https.html | 42 + ...agdrop_000.htm => dragdrop_000-manual.htm} | 0 ...agdrop_001.htm => dragdrop_001-manual.htm} | 0 ...agdrop_002.htm => dragdrop_002-manual.htm} | 0 ...agdrop_003.htm => dragdrop_003-manual.htm} | 0 ...agdrop_004.htm => dragdrop_004-manual.htm} | 0 ...agdrop_005.htm => dragdrop_005-manual.htm} | 0 ...agdrop_006.htm => dragdrop_006-manual.htm} | 0 ...agdrop_007.htm => dragdrop_007-manual.htm} | 0 ...agdrop_008.htm => dragdrop_008-manual.htm} | 0 ...agdrop_009.htm => dragdrop_009-manual.htm} | 0 ...agdrop_010.htm => dragdrop_010-manual.htm} | 0 ...agdrop_011.htm => dragdrop_011-manual.htm} | 0 ...agdrop_012.htm => dragdrop_012-manual.htm} | 0 ...agdrop_013.htm => dragdrop_013-manual.htm} | 0 ...agdrop_014.htm => dragdrop_014-manual.htm} | 0 ...agdrop_015.htm => dragdrop_015-manual.htm} | 0 ...agdrop_016.htm => dragdrop_016-manual.htm} | 0 ...sandbox_003.htm => sandbox_003-manual.htm} | 0 ...sandbox_004.htm => sandbox_004-manual.htm} | 0 ...sandbox_006.htm => sandbox_006-manual.htm} | 0 ...sandbox_007.htm => sandbox_007-manual.htm} | 0 ...sandbox_008.htm => sandbox_008-manual.htm} | 0 ...sandbox_009.htm => sandbox_009-manual.htm} | 0 ...sandbox_010.htm => sandbox_010-manual.htm} | 0 ...sandbox_020.htm => sandbox_020-manual.htm} | 0 ...sandbox_021.htm => sandbox_021-manual.htm} | 0 ...sandbox_022.htm => sandbox_022-manual.htm} | 0 ..._attributes_hoverable_pointers-manual.html | 26 +- ...nt_attributes_nohover_pointers-manual.html | 126 ++ ...vent_element_haspointercapture-manual.html | 2 +- .../pointerevent_pointerdown-manual.html | 59 - .../pointerevent_pointerenter-manual.html | 52 - ...nterevent_pointerenter_nohover-manual.html | 74 -- ...rleave_after_pointerup_nohover-manual.html | 67 -- ...ointerevent_pointerleave_mouse-manual.html | 53 - ...ointerevent_pointerleave_touch-manual.html | 53 - ...revent_pointermove_pointertype-manual.html | 64 - .../pointerevent_pointerout-manual.html | 46 - ...terout_after_pointerup_nohover-manual.html | 67 -- .../pointerevent_pointerover-manual.html | 52 - ...pointerevent_pointertype_mouse-manual.html | 63 - .../pointerevent_pointertype_pen-manual.html | 61 - ...pointerevent_pointertype_touch-manual.html | 62 - .../pointerevent_pointerup-manual.html | 44 - ..._isprimary_same_as_pointerdown-manual.html | 63 - ...terevent_pointerup_pointertype-manual.html | 64 - .../pointerevents/pointerevent_support.js | 3 +- ...ppress_compat_events_on_click-manual.html} | 0 ...s_compat_events_on_drag_mouse-manual.html} | 0 .../resource-timing/idlharness.html | 81 ++ .../resource-timing/resource-timing.js | 15 + .../web-platform-tests/resources/docs/api.md | 8 +- .../webidl2/test/syntax/idl/generic.widl | 4 +- .../webidl2/test/syntax/idl/map.widl | 2 +- .../service-workers/specgen.json | 2 +- .../Document-prototype-currentScript.html | 2 +- .../Extensions-to-Event-Interface.html | 234 ++++ .../MouseEvent-prototype-offsetX-offsetY.html | 154 +++ .../shadow-dom/Slotable-interface.html | 94 ++ .../shadow-dom/event-inside-shadow-tree.html | 148 +++ .../shadow-dom/event-inside-slotted-node.html | 258 ++++ .../shadow-dom/event-with-related-target.html | 256 ++++ .../resources/event-path-test-helpers.js | 93 ++ .../shadow-dom/slotchange-event.html | 620 ++++++++++ .../web-platform-tests/svg/historical.html | 81 ++ .../wpt/web-platform-tests/tools/__init__.py | 1 + .../wpt/web-platform-tests/tools/lint/lint.py | 35 +- .../tools/lint/tests/dummy/broken.html | 1 + .../lint/tests/dummy/broken_ignored.html | 1 + .../tools/lint/tests/dummy/lint.whitelist | 1 + .../tools/lint/tests/dummy/okay.html | 1 + .../tools/lint/tests/test_file_lints.py | 69 ++ .../tools/lint/tests/test_lint.py | 104 +- .../web-platform-tests/tools/localpaths.py | 16 +- .../tools/manifest/manifest.py | 13 +- .../tools/manifest/sourcefile.py | 3 - .../tools/manifest/tests/test_manifest.py | 39 +- .../web-platform-tests/tools/manifest/tree.py | 2 + .../tools/manifest/update.py | 1 - .../web-platform-tests/tools/serve/serve.py | 4 +- tests/wpt/web-platform-tests/tools/tox.ini | 1 + .../tools/wptserve/.travis.yml | 24 + .../wptserve/tests/functional/__init__.py | 0 .../tools/wptserve/tests/functional/base.py | 8 +- .../tests/functional/docroot/invalid.py | 3 + .../tests/functional/docroot/no_main.py | 3 + .../tests/functional/docroot/sub.sub.txt | 1 + .../functional/docroot/sub_headers.sub.txt | 1 + .../functional/docroot/sub_params.sub.txt | 1 + .../tests/functional/docroot/subdir/file.txt | 1 + .../docroot/with_headers.txt.sub.headers | 2 + .../wptserve/tests/functional/test_cookies.py | 14 +- .../tests/functional/test_handlers.py | 238 ++-- .../wptserve/tests/functional/test_pipes.py | 47 +- .../wptserve/tests/functional/test_request.py | 26 +- .../tests/functional/test_response.py | 18 +- .../wptserve/tests/functional/test_server.py | 12 +- .../wptserve/tests/functional/test_stash.py | 16 +- .../web-platform-tests/tools/wptserve/tox.ini | 17 + .../tools/wptserve/wptserve/__init__.py | 6 +- .../tools/wptserve/wptserve/constants.py | 4 +- .../tools/wptserve/wptserve/handlers.py | 33 +- .../tools/wptserve/wptserve/pipes.py | 2 +- .../tools/wptserve/wptserve/ranges.py | 2 +- .../tools/wptserve/wptserve/request.py | 5 +- .../tools/wptserve/wptserve/response.py | 6 +- .../tools/wptserve/wptserve/router.py | 4 +- .../tools/wptserve/wptserve/routes.py | 4 +- .../tools/wptserve/wptserve/server.py | 22 +- .../tools/wptserve/wptserve/stash.py | 3 +- .../interfaces/Animation/startTime.html | 7 + .../navigator/window-only.worker.js | 22 + .../semantics/interface-objects/001.worker.js | 67 +- .../semantics/interface-objects/002.worker.js | 33 +- .../semantics/interface-objects/003.html | 100 +- .../semantics/interface-objects/004.html | 67 +- 541 files changed, 14609 insertions(+), 3288 deletions(-) delete mode 100644 tests/wpt/metadata/XMLHttpRequest/event-error.html.ini create mode 100644 tests/wpt/metadata/XMLHttpRequest/setrequestheader-case-insensitive.htm.ini create mode 100644 tests/wpt/metadata/XMLHttpRequest/setrequestheader-header-allowed.htm.ini create mode 100644 tests/wpt/metadata/dom/nodes/rootNode.html.ini create mode 100644 tests/wpt/metadata/html/browsers/origin/origin-of-data-document.html.ini create mode 100644 tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini delete mode 100644 tests/wpt/metadata/html/semantics/document-metadata/the-style-element/style_scoped.html.ini delete mode 100644 tests/wpt/metadata/html/semantics/embedded-content/media-elements/synchronising-multiple-media-elements/media-controllers/task-source.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/the-canvas-element/historical.html.ini create mode 100644 tests/wpt/metadata/html/semantics/forms/historical.html.ini create mode 100644 tests/wpt/metadata/html/semantics/forms/the-input-element/cloning-steps.html.ini delete mode 100644 tests/wpt/metadata/html/semantics/forms/the-input-element/datetime-2.html.ini create mode 100644 tests/wpt/metadata/html/semantics/forms/the-textarea-element/cloning-steps.html.ini create mode 100644 tests/wpt/metadata/html/semantics/scripting-1/the-script-element/historical.html.ini create mode 100644 tests/wpt/metadata/html/semantics/scripting-1/the-script-element/load-event.html.ini create mode 100644 tests/wpt/metadata/workers/interfaces/WorkerUtils/navigator/window-only.worker.js.ini delete mode 100644 tests/wpt/mozilla/meta/mozilla/webgl/tex_image_2d_canvas_no_context.html.ini rename tests/wpt/mozilla/tests/css/{border_black_ridge.html => border_black_ridge_a.html} (90%) create mode 100644 tests/wpt/mozilla/tests/css/border_black_ridge_b.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/text-styles/canvas_text_font_001-ref.htm delete mode 100644 tests/wpt/web-platform-tests/XMLHttpRequest/event-error.html create mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_browsing_context.html create mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_onchange-manual.html create mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_onstatechange.html create mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_start.html create mode 100644 tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_stop.html create mode 100644 tests/wpt/web-platform-tests/ambient-light/support-iframe.html delete mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/annotationAgentOptionals.test rename tests/wpt/web-platform-tests/annotation-model/annotations/{annotationAgentOptionals-manual.html => annotationsAgentOptionals-manual.html} (71%) create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals.test create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/.gitignore create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyEWR.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyFormat.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyLanguage.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyProcessingLanguage.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodySingleFormat.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodySingleLanguage.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyTextDirection.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyTextDirectionValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targEWR.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targFormat.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targLanguage.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targProcessingLanguage.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targSingleFormat.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targSingleLanguage.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targTextDirection.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targTextDirectionValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.2-bodyType.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.2-targType.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyChoiceSetNoValue.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETB.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETBTypeText.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETBTypeTextualBody.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-targChoiceSetNoValue.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-targNoTypeTextualBody.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyChoice.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyChoiceSet.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyEWRNoItems.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyEmbeddedTextualNoItems.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodySpecificResourceNoItems.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targChoice.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targChoiceSet.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targEWRNoItems.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targSpecificResourceNoItems.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyComposite.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyIndependents.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyList.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targComposite.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targIndependents.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targList.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreatedValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreator.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyModified.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyModifiedValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodySingleCreator.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreatedValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreator.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targModified.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targModifiedValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targSingleCreator.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentEmailImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentEmail_sha1Implemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentHomepageImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentIdImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentNameImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentNicknameImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentSingleNameImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentTypeImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentEmailImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentEmail_sha1Implemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentHomepageImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentIdImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentNameImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentNicknameImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentSingleNameImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentTypeImplemented.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.3-bodyAudience.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.3-targAudience.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.4-bodyAccessibility.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.4-targAccessibility.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyChoiceSetNoPurpose.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyEWRNoPurpose.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyPurpose.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targChoiceSetNoPurpose.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targEWRNoPurpose.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targPurpose.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-bodyRights.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-bodyRightsValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-targRights.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-targRightsValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyCanonical.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyCanonicalValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyVia.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyViaValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targCanonical.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targCanonicalValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targVia.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targViaValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyChoiceSetFound.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyChoiceSetNoSource.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyEmbeddedTextualNoSource.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodySpecificResource.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodySpecificResourceNoValue.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targChoiceSetFound.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targChoiceSetNoSource.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targSpecificResource.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targSpecificResourceNoValue.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.4-bodyStyleClass.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.4-targStyleClass.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.5-bodyRenderedVia.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.5-targRenderedVia.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-TextDataPositionSelectorValid.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-fragmentCssXPathSelectorValid.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-selectorFound.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-selectorValidIfPresent.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.1-conformsTo.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.1-fragmentSelector.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.2-cssSelector.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.3-xpathSelector.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-prefix.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-suffix.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-textQuoteSelector.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-textQuoteSelectorValid.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.5-textPositionSelector.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.6-dataPositionSelector.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.7-svgSelector.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.7-svgSelectorValid.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.8-rangeSelector.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.8-rangeSelectorValid.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3-stateFound.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3-stateValidIfPresent.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-cached.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-timeState.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-timeStateValid.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.2-httpRequestStateValid.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.2-requestHeaderState.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.3-refinedBy.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.3-refinedByValidated.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.4-styleClass.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.4-styleClassValidIfPresent.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.5-renderedVia.json create mode 100644 tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.6-scope.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno1.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno1.jsonld create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno10.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno11.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno12.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno13.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno14.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno15.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno16.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno17.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno18.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno19.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno2.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno2.jsonld create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno20.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno21.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno22.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno23.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno24.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno25.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno26.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno27.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno28.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno29.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno3.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno3.jsonld create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno30.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno31.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno32.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno33.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno34.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno35.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno36.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno37.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno38.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno39.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno4.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno40.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno41.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno5.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno6.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno7.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno8.json create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno9.json create mode 100755 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/annotation.headers create mode 100755 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/annotation.options.headers create mode 100755 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/collection.headers create mode 100755 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/collection.options.headers create mode 100755 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/cors.headers create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/annotations/page.headers create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/index.html create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/files/index.html.headers create mode 100644 tests/wpt/web-platform-tests/annotation-protocol/requirements.txt create mode 100755 tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py create mode 100644 tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html create mode 100644 tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html create mode 100755 tests/wpt/web-platform-tests/diff-manifest.py create mode 100644 tests/wpt/web-platform-tests/dom/nodes/rootNode.html rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-keystatuses-multiple-sessions.html (100%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-keystatuses-multiple-updates.html (100%) rename tests/wpt/web-platform-tests/encrypted-media/Google/{ => migrated_to_root_disabled}/encrypted-media-playback-multiple-sessions.html (100%) create mode 100644 tests/wpt/web-platform-tests/encrypted-media/README.md rename tests/wpt/web-platform-tests/encrypted-media/{clearkey-mp4-playback-temporary-multikey-sequential.html => clearkey-mp4-playback-temporary-multisession.html} (91%) rename tests/wpt/web-platform-tests/encrypted-media/{drm-mp4-playback-temporary-multikey-sequential.html => drm-mp4-playback-temporary-multisession.html} (92%) rename tests/wpt/web-platform-tests/encrypted-media/scripts/{playback-temporary-multikey.js => playback-temporary-multisession.js} (54%) create mode 100644 tests/wpt/web-platform-tests/fullscreen/OWNERS create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/document-fullscreen-enabled.html create mode 100644 tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenerror.html create mode 100644 tests/wpt/web-platform-tests/html/browsers/origin/origin-of-data-document.html rename tests/wpt/web-platform-tests/html/obsolete/requirements-for-implementations/the-marquee-element-0/{marquee-scrollamount-effect.html => marquee-scrollamount-effect-manual.html} (100%) create mode 100644 tests/wpt/web-platform-tests/html/semantics/document-metadata/the-style-element/historical.html delete mode 100644 tests/wpt/web-platform-tests/html/semantics/document-metadata/the-style-element/style_scoped.html delete mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/audio_loop_current_media_controller-manual.html delete mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/synchronising-multiple-media-elements/media-controllers/task-source.html delete mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_current_media_controller-manual.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/historical.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/historical.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/cloning-steps.html delete mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/datetime-2.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/cloning-steps.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/historical.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/load-event.html delete mode 100644 tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-before-after-events.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/tabular-data/historical.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/text-level-semantics/historical.html delete mode 100644 tests/wpt/web-platform-tests/http/resources/image.png create mode 100644 tests/wpt/web-platform-tests/mediacapture-streams/MediaStreamTrackEvent-constructor.https.html rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_000.htm => dragdrop_000-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_001.htm => dragdrop_001-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_002.htm => dragdrop_002-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_003.htm => dragdrop_003-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_004.htm => dragdrop_004-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_005.htm => dragdrop_005-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_006.htm => dragdrop_006-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_007.htm => dragdrop_007-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_008.htm => dragdrop_008-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_009.htm => dragdrop_009-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_010.htm => dragdrop_010-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_011.htm => dragdrop_011-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_012.htm => dragdrop_012-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_013.htm => dragdrop_013-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_014.htm => dragdrop_014-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_015.htm => dragdrop_015-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/{dragdrop_016.htm => dragdrop_016-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/{sandbox_003.htm => sandbox_003-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/{sandbox_004.htm => sandbox_004-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/{sandbox_006.htm => sandbox_006-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/{sandbox_007.htm => sandbox_007-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/{sandbox_008.htm => sandbox_008-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/{sandbox_009.htm => sandbox_009-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/{sandbox_010.htm => sandbox_010-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/{sandbox_020.htm => sandbox_020-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/{sandbox_021.htm => sandbox_021-manual.htm} (100%) rename tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/{sandbox_022.htm => sandbox_022-manual.htm} (100%) create mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_attributes_nohover_pointers-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerdown-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerenter-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerenter_nohover-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_after_pointerup_nohover-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_mouse-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_touch-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove_pointertype-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerout-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerout_after_pointerup_nohover-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerover-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_mouse-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_pen-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_touch-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup_isprimary_same_as_pointerdown-manual.html delete mode 100644 tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup_pointertype-manual.html rename tests/wpt/web-platform-tests/pointerevents/{pointerevent_suppress_compat_events_on_click.html => pointerevent_suppress_compat_events_on_click-manual.html} (100%) rename tests/wpt/web-platform-tests/pointerevents/{pointerevent_suppress_compat_events_on_drag_mouse.html => pointerevent_suppress_compat_events_on_drag_mouse-manual.html} (100%) create mode 100644 tests/wpt/web-platform-tests/resource-timing/idlharness.html create mode 100644 tests/wpt/web-platform-tests/shadow-dom/Extensions-to-Event-Interface.html create mode 100644 tests/wpt/web-platform-tests/shadow-dom/MouseEvent-prototype-offsetX-offsetY.html create mode 100644 tests/wpt/web-platform-tests/shadow-dom/Slotable-interface.html create mode 100644 tests/wpt/web-platform-tests/shadow-dom/event-inside-shadow-tree.html create mode 100644 tests/wpt/web-platform-tests/shadow-dom/event-inside-slotted-node.html create mode 100644 tests/wpt/web-platform-tests/shadow-dom/event-with-related-target.html create mode 100644 tests/wpt/web-platform-tests/shadow-dom/resources/event-path-test-helpers.js create mode 100644 tests/wpt/web-platform-tests/shadow-dom/slotchange-event.html create mode 100644 tests/wpt/web-platform-tests/svg/historical.html create mode 100644 tests/wpt/web-platform-tests/tools/lint/tests/dummy/broken.html create mode 100644 tests/wpt/web-platform-tests/tools/lint/tests/dummy/broken_ignored.html create mode 100644 tests/wpt/web-platform-tests/tools/lint/tests/dummy/lint.whitelist create mode 100644 tests/wpt/web-platform-tests/tools/lint/tests/dummy/okay.html create mode 100644 tests/wpt/web-platform-tests/tools/wptserve/.travis.yml create mode 100644 tests/wpt/web-platform-tests/tools/wptserve/tests/functional/__init__.py create mode 100644 tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/invalid.py create mode 100644 tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/no_main.py create mode 100644 tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub.sub.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub_headers.sub.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub_params.sub.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/subdir/file.txt create mode 100644 tests/wpt/web-platform-tests/tools/wptserve/tox.ini create mode 100644 tests/wpt/web-platform-tests/workers/interfaces/WorkerUtils/navigator/window-only.worker.js diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index dda09811871..0304cf7532d 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -98,8 +98,8 @@ "url": "/XMLHttpRequest/send-authentication-prompt-manual.htm" }, { - "path": "annotation-model/annotations/annotationAgentOptionals-manual.html", - "url": "/annotation-model/annotations/annotationAgentOptionals-manual.html" + "path": "ambient-light/AmbientLightSensor_onchange-manual.html", + "url": "/ambient-light/AmbientLightSensor_onchange-manual.html" }, { "path": "annotation-model/annotations/annotationMusts-manual.html", @@ -109,6 +109,10 @@ "path": "annotation-model/annotations/annotationOptionals-manual.html", "url": "/annotation-model/annotations/annotationOptionals-manual.html" }, + { + "path": "annotation-model/annotations/annotationsAgentOptionals-manual.html", + "url": "/annotation-model/annotations/annotationsAgentOptionals-manual.html" + }, { "path": "annotation-protocol/server/server-manual.html", "url": "/annotation-protocol/server/server-manual.html" @@ -694,12 +698,12 @@ "url": "/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-direction-up-manual.html" }, { - "path": "html/semantics/embedded-content/media-elements/audio_controls_present-manual.html", - "url": "/html/semantics/embedded-content/media-elements/audio_controls_present-manual.html" + "path": "html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-scrollamount-effect-manual.html", + "url": "/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-scrollamount-effect-manual.html" }, { - "path": "html/semantics/embedded-content/media-elements/audio_loop_current_media_controller-manual.html", - "url": "/html/semantics/embedded-content/media-elements/audio_loop_current_media_controller-manual.html" + "path": "html/semantics/embedded-content/media-elements/audio_controls_present-manual.html", + "url": "/html/semantics/embedded-content/media-elements/audio_controls_present-manual.html" }, { "path": "html/semantics/embedded-content/media-elements/audio_muted_overriding_volume-manual.html", @@ -733,10 +737,6 @@ "path": "html/semantics/embedded-content/media-elements/video_controls_present-manual.html", "url": "/html/semantics/embedded-content/media-elements/video_controls_present-manual.html" }, - { - "path": "html/semantics/embedded-content/media-elements/video_loop_current_media_controller-manual.html", - "url": "/html/semantics/embedded-content/media-elements/video_loop_current_media_controller-manual.html" - }, { "path": "html/semantics/embedded-content/media-elements/video_muted_overriding_volume-manual.html", "url": "/html/semantics/embedded-content/media-elements/video_muted_overriding_volume-manual.html" @@ -877,6 +877,114 @@ "path": "notifications/tag-same-manual.html", "url": "/notifications/tag-same-manual.html" }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_000-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_000-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_001-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_001-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_002-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_002-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_003-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_003-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_004-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_004-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_005-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_005-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_006-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_006-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_007-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_007-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_008-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_008-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_009-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_009-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_010-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_010-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_011-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_011-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_012-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_012-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_013-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_013-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_014-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_014-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_015-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_015-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_016-manual.htm", + "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_016-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/sandbox/sandbox_003-manual.htm", + "url": "/old-tests/submission/Microsoft/sandbox/sandbox_003-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/sandbox/sandbox_004-manual.htm", + "url": "/old-tests/submission/Microsoft/sandbox/sandbox_004-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/sandbox/sandbox_006-manual.htm", + "url": "/old-tests/submission/Microsoft/sandbox/sandbox_006-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/sandbox/sandbox_007-manual.htm", + "url": "/old-tests/submission/Microsoft/sandbox/sandbox_007-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/sandbox/sandbox_008-manual.htm", + "url": "/old-tests/submission/Microsoft/sandbox/sandbox_008-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm", + "url": "/old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/sandbox/sandbox_010-manual.htm", + "url": "/old-tests/submission/Microsoft/sandbox/sandbox_010-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/sandbox/sandbox_020-manual.htm", + "url": "/old-tests/submission/Microsoft/sandbox/sandbox_020-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/sandbox/sandbox_021-manual.htm", + "url": "/old-tests/submission/Microsoft/sandbox/sandbox_021-manual.htm" + }, + { + "path": "old-tests/submission/Microsoft/sandbox/sandbox_022-manual.htm", + "url": "/old-tests/submission/Microsoft/sandbox/sandbox_022-manual.htm" + }, { "path": "orientation-event/free-fall-manual.html", "url": "/orientation-event/free-fall-manual.html" @@ -953,6 +1061,10 @@ "path": "pointerevents/pointerevent_attributes_hoverable_pointers-manual.html", "url": "/pointerevents/pointerevent_attributes_hoverable_pointers-manual.html" }, + { + "path": "pointerevents/pointerevent_attributes_nohover_pointers-manual.html", + "url": "/pointerevents/pointerevent_attributes_nohover_pointers-manual.html" + }, { "path": "pointerevents/pointerevent_capture_mouse-manual.html", "url": "/pointerevents/pointerevent_capture_mouse-manual.html" @@ -993,30 +1105,14 @@ "path": "pointerevents/pointerevent_pointercancel_touch-manual.html", "url": "/pointerevents/pointerevent_pointercancel_touch-manual.html" }, - { - "path": "pointerevents/pointerevent_pointerdown-manual.html", - "url": "/pointerevents/pointerevent_pointerdown-manual.html" - }, - { - "path": "pointerevents/pointerevent_pointerenter-manual.html", - "url": "/pointerevents/pointerevent_pointerenter-manual.html" - }, { "path": "pointerevents/pointerevent_pointerenter_does_not_bubble-manual.html", "url": "/pointerevents/pointerevent_pointerenter_does_not_bubble-manual.html" }, - { - "path": "pointerevents/pointerevent_pointerenter_nohover-manual.html", - "url": "/pointerevents/pointerevent_pointerenter_nohover-manual.html" - }, { "path": "pointerevents/pointerevent_pointerleave_after_pointercancel_touch-manual.html", "url": "/pointerevents/pointerevent_pointerleave_after_pointercancel_touch-manual.html" }, - { - "path": "pointerevents/pointerevent_pointerleave_after_pointerup_nohover-manual.html", - "url": "/pointerevents/pointerevent_pointerleave_after_pointerup_nohover-manual.html" - }, { "path": "pointerevents/pointerevent_pointerleave_descendant_over-manual.html", "url": "/pointerevents/pointerevent_pointerleave_descendant_over-manual.html" @@ -1029,18 +1125,10 @@ "path": "pointerevents/pointerevent_pointerleave_does_not_bubble-manual.html", "url": "/pointerevents/pointerevent_pointerleave_does_not_bubble-manual.html" }, - { - "path": "pointerevents/pointerevent_pointerleave_mouse-manual.html", - "url": "/pointerevents/pointerevent_pointerleave_mouse-manual.html" - }, { "path": "pointerevents/pointerevent_pointerleave_pen-manual.html", "url": "/pointerevents/pointerevent_pointerleave_pen-manual.html" }, - { - "path": "pointerevents/pointerevent_pointerleave_touch-manual.html", - "url": "/pointerevents/pointerevent_pointerleave_touch-manual.html" - }, { "path": "pointerevents/pointerevent_pointermove-manual.html", "url": "/pointerevents/pointerevent_pointermove-manual.html" @@ -1049,22 +1137,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_pointertype-manual.html", - "url": "/pointerevents/pointerevent_pointermove_pointertype-manual.html" - }, - { - "path": "pointerevents/pointerevent_pointerout-manual.html", - "url": "/pointerevents/pointerevent_pointerout-manual.html" - }, { "path": "pointerevents/pointerevent_pointerout_after_pointercancel_touch-manual.html", "url": "/pointerevents/pointerevent_pointerout_after_pointercancel_touch-manual.html" }, - { - "path": "pointerevents/pointerevent_pointerout_after_pointerup_nohover-manual.html", - "url": "/pointerevents/pointerevent_pointerout_after_pointerup_nohover-manual.html" - }, { "path": "pointerevents/pointerevent_pointerout_pen-manual.html", "url": "/pointerevents/pointerevent_pointerout_pen-manual.html" @@ -1073,34 +1149,6 @@ "path": "pointerevents/pointerevent_pointerout_received_once-manual.html", "url": "/pointerevents/pointerevent_pointerout_received_once-manual.html" }, - { - "path": "pointerevents/pointerevent_pointerover-manual.html", - "url": "/pointerevents/pointerevent_pointerover-manual.html" - }, - { - "path": "pointerevents/pointerevent_pointertype_mouse-manual.html", - "url": "/pointerevents/pointerevent_pointertype_mouse-manual.html" - }, - { - "path": "pointerevents/pointerevent_pointertype_pen-manual.html", - "url": "/pointerevents/pointerevent_pointertype_pen-manual.html" - }, - { - "path": "pointerevents/pointerevent_pointertype_touch-manual.html", - "url": "/pointerevents/pointerevent_pointertype_touch-manual.html" - }, - { - "path": "pointerevents/pointerevent_pointerup-manual.html", - "url": "/pointerevents/pointerevent_pointerup-manual.html" - }, - { - "path": "pointerevents/pointerevent_pointerup_isprimary_same_as_pointerdown-manual.html", - "url": "/pointerevents/pointerevent_pointerup_isprimary_same_as_pointerdown-manual.html" - }, - { - "path": "pointerevents/pointerevent_pointerup_pointertype-manual.html", - "url": "/pointerevents/pointerevent_pointerup_pointertype-manual.html" - }, { "path": "pointerevents/pointerevent_releasepointercapture_events_to_original_target-manual.html", "url": "/pointerevents/pointerevent_releasepointercapture_events_to_original_target-manual.html" @@ -1133,6 +1181,14 @@ "path": "pointerevents/pointerevent_setpointercapture_relatedtarget-manual.html", "url": "/pointerevents/pointerevent_setpointercapture_relatedtarget-manual.html" }, + { + "path": "pointerevents/pointerevent_suppress_compat_events_on_click-manual.html", + "url": "/pointerevents/pointerevent_suppress_compat_events_on_click-manual.html" + }, + { + "path": "pointerevents/pointerevent_suppress_compat_events_on_drag_mouse-manual.html", + "url": "/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse-manual.html" + }, { "path": "pointerevents/pointerevent_touch-action-auto-css_touch-manual.html", "url": "/pointerevents/pointerevent_touch-action-auto-css_touch-manual.html" @@ -3809,6 +3865,16 @@ ], "url": "/2dcontext/shadows/canvas_shadows_002.htm" }, + { + "path": "2dcontext/text-styles/canvas_text_font_001.htm", + "references": [ + [ + "/2dcontext/text-styles/canvas_text_font_001-ref.htm", + "==" + ] + ], + "url": "/2dcontext/text-styles/canvas_text_font_001.htm" + }, { "path": "2dcontext/the-canvas-state/canvas_state_restore_001.htm", "references": [ @@ -4799,6 +4865,76 @@ ], "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html" }, + { + "path": "html/editing/the-hidden-attribute/hidden-1a.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1a.html" + }, + { + "path": "html/editing/the-hidden-attribute/hidden-1b.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1b.html" + }, + { + "path": "html/editing/the-hidden-attribute/hidden-1c.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1c.html" + }, + { + "path": "html/editing/the-hidden-attribute/hidden-1d.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1d.html" + }, + { + "path": "html/editing/the-hidden-attribute/hidden-1e.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1e.html" + }, + { + "path": "html/editing/the-hidden-attribute/hidden-1f.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1f.html" + }, + { + "path": "html/editing/the-hidden-attribute/hidden-1g.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1g.html" + }, { "path": "html/editing/the-hidden-attribute/hidden-2.svg", "references": [ @@ -5569,6 +5705,26 @@ ], "url": "/html/semantics/forms/the-textarea-element/textarea-newline-bidi.html" }, + { + "path": "html/semantics/forms/the-textarea-element/wrap-reflect-1a.html", + "references": [ + [ + "/html/semantics/forms/the-textarea-element/wrap-reflect-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/forms/the-textarea-element/wrap-reflect-1a.html" + }, + { + "path": "html/semantics/forms/the-textarea-element/wrap-reflect-1b.html", + "references": [ + [ + "/html/semantics/forms/the-textarea-element/wrap-reflect-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/forms/the-textarea-element/wrap-reflect-1b.html" + }, { "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-001.html", "references": [ @@ -5949,6 +6105,16 @@ ], "url": "/html/semantics/text-level-semantics/the-wbr-element/wbr-element.html" }, + { + "path": "http/basic-auth-cache-test.html", + "references": [ + [ + "/http/basic-auth-cache-test-ref.html", + "==" + ] + ], + "url": "/http/basic-auth-cache-test.html" + }, { "path": "quirks-mode/historical/list-item-bullet-size.html", "references": [ @@ -8957,6 +9123,10 @@ "path": "2dcontext/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html", "url": "/2dcontext/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html" }, + { + "path": "2dcontext/drawing-paths-to-the-canvas/canvas_complexshapes_ispointInpath_001.htm", + "url": "/2dcontext/drawing-paths-to-the-canvas/canvas_complexshapes_ispointInpath_001.htm" + }, { "path": "2dcontext/drawing-paths-to-the-canvas/canvas_focus_drawCustomFocusRing_001.html", "url": "/2dcontext/drawing-paths-to-the-canvas/canvas_focus_drawCustomFocusRing_001.html" @@ -9953,6 +10123,10 @@ "path": "2dcontext/fill-and-stroke-styles/2d.strokeStyle.default.html", "url": "/2dcontext/fill-and-stroke-styles/2d.strokeStyle.default.html" }, + { + "path": "2dcontext/fill-and-stroke-styles/canvas_colorsandstyles_createlineargradient_001.htm", + "url": "/2dcontext/fill-and-stroke-styles/canvas_colorsandstyles_createlineargradient_001.htm" + }, { "path": "2dcontext/hit-regions/addHitRegions-NotSupportedError-01.html", "url": "/2dcontext/hit-regions/addHitRegions-NotSupportedError-01.html" @@ -11073,6 +11247,10 @@ "path": "2dcontext/shadows/2d.shadow.transform.2.html", "url": "/2dcontext/shadows/2d.shadow.transform.2.html" }, + { + "path": "2dcontext/shadows/canvas_shadows_001.htm", + "url": "/2dcontext/shadows/canvas_shadows_001.htm" + }, { "path": "2dcontext/text-styles/2d.text.align.default.html", "url": "/2dcontext/text-styles/2d.text.align.default.html" @@ -12781,10 +12959,6 @@ "path": "XMLHttpRequest/event-error-order.sub.html", "url": "/XMLHttpRequest/event-error-order.sub.html" }, - { - "path": "XMLHttpRequest/event-error.html", - "url": "/XMLHttpRequest/event-error.html" - }, { "path": "XMLHttpRequest/event-error.sub.html", "url": "/XMLHttpRequest/event-error.sub.html" @@ -13465,6 +13639,22 @@ "path": "XMLHttpRequest/xmlhttprequest-unsent.htm", "url": "/XMLHttpRequest/xmlhttprequest-unsent.htm" }, + { + "path": "ambient-light/AmbientLightSensor_browsing_context.html", + "url": "/ambient-light/AmbientLightSensor_browsing_context.html" + }, + { + "path": "ambient-light/AmbientLightSensor_onstatechange.html", + "url": "/ambient-light/AmbientLightSensor_onstatechange.html" + }, + { + "path": "ambient-light/AmbientLightSensor_start.html", + "url": "/ambient-light/AmbientLightSensor_start.html" + }, + { + "path": "ambient-light/AmbientLightSensor_stop.html", + "url": "/ambient-light/AmbientLightSensor_stop.html" + }, { "path": "ambient-light/idlharness.html", "url": "/ambient-light/idlharness.html" @@ -14089,6 +14279,10 @@ "path": "content-security-policy/meta/meta-modified.html", "url": "/content-security-policy/meta/meta-modified.html" }, + { + "path": "content-security-policy/reporting/securitypolicyviolation-idl.html", + "url": "/content-security-policy/reporting/securitypolicyviolation-idl.html" + }, { "path": "content-security-policy/script-src/script-src-1_1.html", "url": "/content-security-policy/script-src/script-src-1_1.html" @@ -14273,6 +14467,10 @@ "path": "cssom-view/scrollingElement.html", "url": "/cssom-view/scrollingElement.html" }, + { + "path": "custom-elements/HTMLElement-constructor.html", + "url": "/custom-elements/HTMLElement-constructor.html" + }, { "path": "custom-elements/custom-element-registry/define.html", "url": "/custom-elements/custom-element-registry/define.html" @@ -14677,6 +14875,10 @@ "path": "dom/interfaces.html", "url": "/dom/interfaces.html" }, + { + "path": "dom/lists/DOMTokenList-Iterable.html", + "url": "/dom/lists/DOMTokenList-Iterable.html" + }, { "path": "dom/lists/DOMTokenList-coverage-for-attributes.html", "url": "/dom/lists/DOMTokenList-coverage-for-attributes.html" @@ -15429,6 +15631,10 @@ "path": "dom/nodes/remove-unscopable.html", "url": "/dom/nodes/remove-unscopable.html" }, + { + "path": "dom/nodes/rootNode.html", + "url": "/dom/nodes/rootNode.html" + }, { "path": "dom/ranges/Range-commonAncestorContainer-2.html", "url": "/dom/ranges/Range-commonAncestorContainer-2.html" @@ -15789,14 +15995,6 @@ "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-keystatuses-multiple-sessions.html", - "url": "/encrypted-media/Google/encrypted-media-keystatuses-multiple-sessions.html" - }, - { - "path": "encrypted-media/Google/encrypted-media-keystatuses-multiple-updates.html", - "url": "/encrypted-media/Google/encrypted-media-keystatuses-multiple-updates.html" - }, { "path": "encrypted-media/Google/encrypted-media-onencrypted.html", "url": "/encrypted-media/Google/encrypted-media-onencrypted.html" @@ -15805,10 +16003,6 @@ "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-playback-multiple-sessions.html", - "url": "/encrypted-media/Google/encrypted-media-playback-multiple-sessions.html" - }, { "path": "encrypted-media/Google/encrypted-media-requestmediakeysystemaccess.html", "url": "/encrypted-media/Google/encrypted-media-requestmediakeysystemaccess.html" @@ -15865,6 +16059,38 @@ "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.html", + "url": "/encrypted-media/clearkey-events.html" + }, + { + "path": "encrypted-media/clearkey-generate-request-disallowed-input.html", + "url": "/encrypted-media/clearkey-generate-request-disallowed-input.html" + }, + { + "path": "encrypted-media/clearkey-keystatuses-multiple-sessions.html", + "url": "/encrypted-media/clearkey-keystatuses-multiple-sessions.html" + }, + { + "path": "encrypted-media/clearkey-keystatuses.html", + "url": "/encrypted-media/clearkey-keystatuses.html" + }, { "path": "encrypted-media/clearkey-mp4-playback-destroy-persistent-license.html", "url": "/encrypted-media/clearkey-mp4-playback-destroy-persistent-license.html" @@ -15877,6 +16103,14 @@ "path": "encrypted-media/clearkey-mp4-playback-persistent-license.html", "url": "/encrypted-media/clearkey-mp4-playback-persistent-license.html" }, + { + "path": "encrypted-media/clearkey-mp4-playback-persistent-usage-record-events.html", + "url": "/encrypted-media/clearkey-mp4-playback-persistent-usage-record-events.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-persistent-usage-record.html", + "url": "/encrypted-media/clearkey-mp4-playback-persistent-usage-record.html" + }, { "path": "encrypted-media/clearkey-mp4-playback-retrieve-destroy-persistent-license.html", "url": "/encrypted-media/clearkey-mp4-playback-retrieve-destroy-persistent-license.html" @@ -15885,6 +16119,70 @@ "path": "encrypted-media/clearkey-mp4-playback-retrieve-persistent-license.html", "url": "/encrypted-media/clearkey-mp4-playback-retrieve-persistent-license.html" }, + { + "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-events.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-events.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-multikey.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-multikey.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-multisession.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-multisession.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.html" + }, + { + "path": "encrypted-media/clearkey-mp4-playback-temporary.html", + "url": "/encrypted-media/clearkey-mp4-playback-temporary.html" + }, + { + "path": "encrypted-media/clearkey-not-callable-after-createsession.html", + "url": "/encrypted-media/clearkey-not-callable-after-createsession.html" + }, + { + "path": "encrypted-media/drm-check-initdata-type.html", + "url": "/encrypted-media/drm-check-initdata-type.html" + }, + { + "path": "encrypted-media/drm-events.html", + "url": "/encrypted-media/drm-events.html" + }, + { + "path": "encrypted-media/drm-generate-request-disallowed-input.html", + "url": "/encrypted-media/drm-generate-request-disallowed-input.html" + }, + { + "path": "encrypted-media/drm-keystatuses-multiple-sessions.html", + "url": "/encrypted-media/drm-keystatuses-multiple-sessions.html" + }, + { + "path": "encrypted-media/drm-keystatuses.html", + "url": "/encrypted-media/drm-keystatuses.html" + }, { "path": "encrypted-media/drm-mp4-playback-destroy-persistent-license.html", "url": "/encrypted-media/drm-mp4-playback-destroy-persistent-license.html" @@ -15897,6 +16195,54 @@ "path": "encrypted-media/drm-mp4-playback-persistent-license.html", "url": "/encrypted-media/drm-mp4-playback-persistent-license.html" }, + { + "path": "encrypted-media/drm-mp4-playback-persistent-usage-record-events.html", + "url": "/encrypted-media/drm-mp4-playback-persistent-usage-record-events.html" + }, + { + "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-multikey.html", + "url": "/encrypted-media/drm-mp4-playback-temporary-multikey.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-multisession.html", + "url": "/encrypted-media/drm-mp4-playback-temporary-multisession.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.html", + "url": "/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.html", + "url": "/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.html", + "url": "/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.html", + "url": "/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-two-videos.html", + "url": "/encrypted-media/drm-mp4-playback-temporary-two-videos.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary-waitingforkey.html", + "url": "/encrypted-media/drm-mp4-playback-temporary-waitingforkey.html" + }, + { + "path": "encrypted-media/drm-mp4-playback-temporary.html", + "url": "/encrypted-media/drm-mp4-playback-temporary.html" + }, + { + "path": "encrypted-media/drm-not-callable-after-createsession.html", + "url": "/encrypted-media/drm-not-callable-after-createsession.html" + }, { "path": "encrypted-media/idlharness.html", "url": "/encrypted-media/idlharness.html" @@ -16617,6 +16963,14 @@ "path": "fetch/nosniff/worker.html", "url": "/fetch/nosniff/worker.html" }, + { + "path": "fullscreen/api/document-fullscreen-enabled.html", + "url": "/fullscreen/api/document-fullscreen-enabled.html" + }, + { + "path": "fullscreen/api/document-onfullscreenerror.html", + "url": "/fullscreen/api/document-onfullscreenerror.html" + }, { "path": "gamepad/idlharness.html", "url": "/gamepad/idlharness.html" @@ -17317,6 +17671,10 @@ "path": "html/browsers/offline/manifest_url_check.html", "url": "/html/browsers/offline/manifest_url_check.html" }, + { + "path": "html/browsers/origin/origin-of-data-document.html", + "url": "/html/browsers/origin/origin-of-data-document.html" + }, { "path": "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain.html", "url": "/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain.html" @@ -18385,6 +18743,10 @@ "path": "html/semantics/document-metadata/the-meta-element/the-lang-attribute-012.html", "url": "/html/semantics/document-metadata/the-meta-element/the-lang-attribute-012.html" }, + { + "path": "html/semantics/document-metadata/the-style-element/historical.html", + "url": "/html/semantics/document-metadata/the-style-element/historical.html" + }, { "path": "html/semantics/document-metadata/the-style-element/style-error-01.html", "url": "/html/semantics/document-metadata/the-style-element/style-error-01.html" @@ -18401,10 +18763,6 @@ "path": "html/semantics/document-metadata/the-style-element/style_media.html", "url": "/html/semantics/document-metadata/the-style-element/style_media.html" }, - { - "path": "html/semantics/document-metadata/the-style-element/style_scoped.html", - "url": "/html/semantics/document-metadata/the-style-element/style_scoped.html" - }, { "path": "html/semantics/document-metadata/the-title-element/title.text-01.html", "url": "/html/semantics/document-metadata/the-title-element/title.text-01.html" @@ -18957,10 +19315,6 @@ "path": "html/semantics/embedded-content/media-elements/src_reflects_attribute_not_source_elements.html", "url": "/html/semantics/embedded-content/media-elements/src_reflects_attribute_not_source_elements.html" }, - { - "path": "html/semantics/embedded-content/media-elements/synchronising-multiple-media-elements/media-controllers/task-source.html", - "url": "/html/semantics/embedded-content/media-elements/synchronising-multiple-media-elements/media-controllers/task-source.html" - }, { "path": "html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html", "url": "/html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html" @@ -19641,6 +19995,10 @@ "path": "html/semantics/embedded-content/the-iframe-element/cross_origin_parentage.html", "url": "/html/semantics/embedded-content/the-iframe-element/cross_origin_parentage.html" }, + { + "path": "html/semantics/embedded-content/the-iframe-element/historical.html", + "url": "/html/semantics/embedded-content/the-iframe-element/historical.html" + }, { "path": "html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html", "url": "/html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html" @@ -19853,6 +20211,10 @@ "path": "html/semantics/forms/form-submission-0/url-encoded.html", "url": "/html/semantics/forms/form-submission-0/url-encoded.html" }, + { + "path": "html/semantics/forms/historical.html", + "url": "/html/semantics/forms/historical.html" + }, { "path": "html/semantics/forms/resetting-a-form/reset-form.html", "url": "/html/semantics/forms/resetting-a-form/reset-form.html" @@ -19953,6 +20315,10 @@ "path": "html/semantics/forms/the-input-element/checked.xhtml", "url": "/html/semantics/forms/the-input-element/checked.xhtml" }, + { + "path": "html/semantics/forms/the-input-element/cloning-steps.html", + "url": "/html/semantics/forms/the-input-element/cloning-steps.html" + }, { "path": "html/semantics/forms/the-input-element/color.html", "url": "/html/semantics/forms/the-input-element/color.html" @@ -19961,10 +20327,6 @@ "path": "html/semantics/forms/the-input-element/date.html", "url": "/html/semantics/forms/the-input-element/date.html" }, - { - "path": "html/semantics/forms/the-input-element/datetime-2.html", - "url": "/html/semantics/forms/the-input-element/datetime-2.html" - }, { "path": "html/semantics/forms/the-input-element/datetime-local.html", "url": "/html/semantics/forms/the-input-element/datetime-local.html" @@ -19997,6 +20359,10 @@ "path": "html/semantics/forms/the-input-element/maxlength.html", "url": "/html/semantics/forms/the-input-element/maxlength.html" }, + { + "path": "html/semantics/forms/the-input-element/minlength.html", + "url": "/html/semantics/forms/the-input-element/minlength.html" + }, { "path": "html/semantics/forms/the-input-element/month.html", "url": "/html/semantics/forms/the-input-element/month.html" @@ -20157,6 +20523,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-textarea-element/cloning-steps.html", + "url": "/html/semantics/forms/the-textarea-element/cloning-steps.html" + }, { "path": "html/semantics/forms/the-textarea-element/textarea-type.html", "url": "/html/semantics/forms/the-textarea-element/textarea-type.html" @@ -20310,8 +20680,12 @@ "url": "/html/semantics/scripting-1/the-script-element/fetch-src/failure.html" }, { - "path": "html/semantics/scripting-1/the-script-element/script-before-after-events.html", - "url": "/html/semantics/scripting-1/the-script-element/script-before-after-events.html" + "path": "html/semantics/scripting-1/the-script-element/historical.html", + "url": "/html/semantics/scripting-1/the-script-element/historical.html" + }, + { + "path": "html/semantics/scripting-1/the-script-element/load-event.html", + "url": "/html/semantics/scripting-1/the-script-element/load-event.html" }, { "path": "html/semantics/scripting-1/the-script-element/script-charset-01.html", @@ -20325,6 +20699,14 @@ "path": "html/semantics/scripting-1/the-script-element/script-charset-03.html", "url": "/html/semantics/scripting-1/the-script-element/script-charset-03.html" }, + { + "path": "html/semantics/scripting-1/the-script-element/script-crossorigin-network.html", + "url": "/html/semantics/scripting-1/the-script-element/script-crossorigin-network.html" + }, + { + "path": "html/semantics/scripting-1/the-script-element/script-crossorigin.html", + "url": "/html/semantics/scripting-1/the-script-element/script-crossorigin.html" + }, { "path": "html/semantics/scripting-1/the-script-element/script-for-event-xhtml.xhtml", "url": "/html/semantics/scripting-1/the-script-element/script-for-event-xhtml.xhtml" @@ -20513,6 +20895,10 @@ "path": "html/semantics/tabular-data/attributes-common-to-td-and-th-elements/cellIndex.html", "url": "/html/semantics/tabular-data/attributes-common-to-td-and-th-elements/cellIndex.html" }, + { + "path": "html/semantics/tabular-data/historical.html", + "url": "/html/semantics/tabular-data/historical.html" + }, { "path": "html/semantics/tabular-data/the-caption-element/caption_001.html", "url": "/html/semantics/tabular-data/the-caption-element/caption_001.html" @@ -20605,6 +20991,10 @@ "path": "html/semantics/tabular-data/the-tr-element/sectionRowIndex.html", "url": "/html/semantics/tabular-data/the-tr-element/sectionRowIndex.html" }, + { + "path": "html/semantics/text-level-semantics/historical.html", + "url": "/html/semantics/text-level-semantics/historical.html" + }, { "path": "html/semantics/text-level-semantics/the-a-element/a-stringifier.html", "url": "/html/semantics/text-level-semantics/the-a-element/a-stringifier.html" @@ -21481,6 +21871,10 @@ "path": "mediacapture-streams/MediaStreamTrack-init.https.html", "url": "/mediacapture-streams/MediaStreamTrack-init.https.html" }, + { + "path": "mediacapture-streams/MediaStreamTrackEvent-constructor.https.html", + "url": "/mediacapture-streams/MediaStreamTrackEvent-constructor.https.html" + }, { "path": "mixed-content/allowed/http-csp/same-host-https/audio-tag/top-level/keep-scheme-redirect/allowed.https.html", "url": "/mixed-content/allowed/http-csp/same-host-https/audio-tag/top-level/keep-scheme-redirect/allowed.https.html" @@ -22801,26 +23195,6 @@ "path": "old-tests/submission/Infraware/Forms/contents/Forms/keygen_labels.html", "url": "/old-tests/submission/Infraware/Forms/contents/Forms/keygen_labels.html" }, - { - "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_004.htm", - "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_004.htm" - }, - { - "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_005.htm", - "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_005.htm" - }, - { - "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_006.htm", - "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_006.htm" - }, - { - "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_007.htm", - "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_007.htm" - }, - { - "path": "old-tests/submission/Microsoft/dragdrop/dragdrop_008.htm", - "url": "/old-tests/submission/Microsoft/dragdrop/dragdrop_008.htm" - }, { "path": "old-tests/submission/Microsoft/history/history_000.htm", "url": "/old-tests/submission/Microsoft/history/history_000.htm" @@ -23585,14 +23959,6 @@ "path": "pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html", "url": "/pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html" }, - { - "path": "pointerevents/pointerevent_suppress_compat_events_on_click.html", - "url": "/pointerevents/pointerevent_suppress_compat_events_on_click.html" - }, - { - "path": "pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html", - "url": "/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html" - }, { "path": "pointerevents/pointerevent_touch-action-illegal.html", "url": "/pointerevents/pointerevent_touch-action-illegal.html" @@ -29041,6 +29407,10 @@ "path": "referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html", "url": "/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html" }, + { + "path": "resource-timing/idlharness.html", + "url": "/resource-timing/idlharness.html" + }, { "path": "resource-timing/resource-timing.html", "url": "/resource-timing/resource-timing.html" @@ -29537,10 +29907,18 @@ "path": "shadow-dom/Element-interface-shadowRoot-attribute.html", "url": "/shadow-dom/Element-interface-shadowRoot-attribute.html" }, + { + "path": "shadow-dom/Extensions-to-Event-Interface.html", + "url": "/shadow-dom/Extensions-to-Event-Interface.html" + }, { "path": "shadow-dom/HTMLSlotElement-interface.html", "url": "/shadow-dom/HTMLSlotElement-interface.html" }, + { + "path": "shadow-dom/MouseEvent-prototype-offsetX-offsetY.html", + "url": "/shadow-dom/MouseEvent-prototype-offsetX-offsetY.html" + }, { "path": "shadow-dom/Node-prototype-cloneNode.html", "url": "/shadow-dom/Node-prototype-cloneNode.html" @@ -29549,6 +29927,10 @@ "path": "shadow-dom/ShadowRoot-interface.html", "url": "/shadow-dom/ShadowRoot-interface.html" }, + { + "path": "shadow-dom/Slotable-interface.html", + "url": "/shadow-dom/Slotable-interface.html" + }, { "path": "shadow-dom/event-composed-path-with-related-target.html", "url": "/shadow-dom/event-composed-path-with-related-target.html" @@ -29561,6 +29943,18 @@ "path": "shadow-dom/event-composed.html", "url": "/shadow-dom/event-composed.html" }, + { + "path": "shadow-dom/event-inside-shadow-tree.html", + "url": "/shadow-dom/event-inside-shadow-tree.html" + }, + { + "path": "shadow-dom/event-inside-slotted-node.html", + "url": "/shadow-dom/event-inside-slotted-node.html" + }, + { + "path": "shadow-dom/event-with-related-target.html", + "url": "/shadow-dom/event-with-related-target.html" + }, { "path": "shadow-dom/leaktests/get-elements.html", "url": "/shadow-dom/leaktests/get-elements.html" @@ -29577,6 +29971,10 @@ "path": "shadow-dom/scroll-to-the-fragment-in-shadow-tree.html", "url": "/shadow-dom/scroll-to-the-fragment-in-shadow-tree.html" }, + { + "path": "shadow-dom/slotchange-event.html", + "url": "/shadow-dom/slotchange-event.html" + }, { "path": "shadow-dom/slotchange.html", "url": "/shadow-dom/slotchange.html" @@ -29865,6 +30263,10 @@ "path": "subresource-integrity/subresource-integrity.sub.html", "url": "/subresource-integrity/subresource-integrity.sub.html" }, + { + "path": "svg/historical.html", + "url": "/svg/historical.html" + }, { "path": "svg/interfaces.html", "url": "/svg/interfaces.html" @@ -35313,6 +35715,10 @@ "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" @@ -35957,131 +36363,11 @@ "timeout": "long", "url": "/encoding/single-byte-decoder.html" }, - { - "path": "encrypted-media/clearkey-check-initdata-type.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-check-initdata-type.html" - }, - { - "path": "encrypted-media/clearkey-events.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-events.html" - }, - { - "path": "encrypted-media/clearkey-generate-request-disallowed-input.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-generate-request-disallowed-input.html" - }, - { - "path": "encrypted-media/clearkey-keystatuses-multiple-sessions.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-keystatuses-multiple-sessions.html" - }, - { - "path": "encrypted-media/clearkey-keystatuses.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-keystatuses.html" - }, - { - "path": "encrypted-media/clearkey-mp4-playback-persistent-usage-record-events.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-persistent-usage-record-events.html" - }, - { - "path": "encrypted-media/clearkey-mp4-playback-persistent-usage-record.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-persistent-usage-record.html" - }, - { - "path": "encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html" - }, - { - "path": "encrypted-media/clearkey-mp4-playback-temporary-events.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-temporary-events.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-multikey.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-temporary-multikey.html" - }, - { - "path": "encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.html" - }, - { - "path": "encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.html" - }, - { - "path": "encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.html" - }, - { - "path": "encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.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-playback-temporary-waitingforkey.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.html" - }, - { - "path": "encrypted-media/clearkey-mp4-playback-temporary.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-mp4-playback-temporary.html" - }, - { - "path": "encrypted-media/clearkey-not-callable-after-createsession.html", - "timeout": "long", - "url": "/encrypted-media/clearkey-not-callable-after-createsession.html" - }, - { - "path": "encrypted-media/drm-check-initdata-type.html", - "timeout": "long", - "url": "/encrypted-media/drm-check-initdata-type.html" - }, - { - "path": "encrypted-media/drm-events.html", - "timeout": "long", - "url": "/encrypted-media/drm-events.html" - }, - { - "path": "encrypted-media/drm-generate-request-disallowed-input.html", - "timeout": "long", - "url": "/encrypted-media/drm-generate-request-disallowed-input.html" - }, - { - "path": "encrypted-media/drm-keystatuses-multiple-sessions.html", - "timeout": "long", - "url": "/encrypted-media/drm-keystatuses-multiple-sessions.html" - }, - { - "path": "encrypted-media/drm-keystatuses.html", - "timeout": "long", - "url": "/encrypted-media/drm-keystatuses.html" - }, - { - "path": "encrypted-media/drm-mp4-playback-persistent-usage-record-events.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-persistent-usage-record-events.html" - }, { "path": "encrypted-media/drm-mp4-playback-persistent-usage-record.html", "timeout": "long", @@ -36097,66 +36383,11 @@ "timeout": "long", "url": "/encrypted-media/drm-mp4-playback-retrieve-persistent-license.html" }, - { - "path": "encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.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-multikey-sequential.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html" - }, - { - "path": "encrypted-media/drm-mp4-playback-temporary-multikey.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-temporary-multikey.html" - }, - { - "path": "encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.html" - }, - { - "path": "encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.html" - }, - { - "path": "encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.html" - }, - { - "path": "encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.html" - }, - { - "path": "encrypted-media/drm-mp4-playback-temporary-two-videos.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-temporary-two-videos.html" - }, - { - "path": "encrypted-media/drm-mp4-playback-temporary-waitingforkey.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-temporary-waitingforkey.html" - }, - { - "path": "encrypted-media/drm-mp4-playback-temporary.html", - "timeout": "long", - "url": "/encrypted-media/drm-mp4-playback-temporary.html" - }, - { - "path": "encrypted-media/drm-not-callable-after-createsession.html", - "timeout": "long", - "url": "/encrypted-media/drm-not-callable-after-createsession.html" - }, { "path": "eventsource/dedicated-worker/eventsource-constructor-non-same-origin.htm", "timeout": "long", @@ -37482,62 +37713,8 @@ "local_changes": { "deleted": [], "deleted_reftests": {}, - "items": { - "reftest": { - "http/basic-auth-cache-test.html": [ - { - "path": "http/basic-auth-cache-test.html", - "references": [ - [ - "/http/basic-auth-cache-test-ref.html", - "==" - ] - ], - "url": "/http/basic-auth-cache-test.html" - } - ] - }, - "testharness": { - "dom/lists/DOMTokenList-Iterable.html": [ - { - "path": "dom/lists/DOMTokenList-Iterable.html", - "url": "/dom/lists/DOMTokenList-Iterable.html" - } - ], - "html/semantics/forms/the-input-element/minlength.html": [ - { - "path": "html/semantics/forms/the-input-element/minlength.html", - "url": "/html/semantics/forms/the-input-element/minlength.html" - } - ], - "html/semantics/scripting-1/the-script-element/script-crossorigin-network.html": [ - { - "path": "html/semantics/scripting-1/the-script-element/script-crossorigin-network.html", - "url": "/html/semantics/scripting-1/the-script-element/script-crossorigin-network.html" - } - ], - "html/semantics/scripting-1/the-script-element/script-crossorigin.html": [ - { - "path": "html/semantics/scripting-1/the-script-element/script-crossorigin.html", - "url": "/html/semantics/scripting-1/the-script-element/script-crossorigin.html" - } - ] - } - }, - "reftest_nodes": { - "http/basic-auth-cache-test.html": [ - { - "path": "http/basic-auth-cache-test.html", - "references": [ - [ - "/http/basic-auth-cache-test-ref.html", - "==" - ] - ], - "url": "/http/basic-auth-cache-test.html" - } - ] - } + "items": {}, + "reftest_nodes": {} }, "reftest_nodes": { "2dcontext/building-paths/canvas_complexshapes_arcto_001.htm": [ @@ -37912,6 +38089,18 @@ "url": "/2dcontext/shadows/canvas_shadows_002.htm" } ], + "2dcontext/text-styles/canvas_text_font_001.htm": [ + { + "path": "2dcontext/text-styles/canvas_text_font_001.htm", + "references": [ + [ + "/2dcontext/text-styles/canvas_text_font_001-ref.htm", + "==" + ] + ], + "url": "/2dcontext/text-styles/canvas_text_font_001.htm" + } + ], "2dcontext/the-canvas-state/canvas_state_restore_001.htm": [ { "path": "2dcontext/the-canvas-state/canvas_state_restore_001.htm", @@ -39124,6 +39313,90 @@ "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html" } ], + "html/editing/the-hidden-attribute/hidden-1a.html": [ + { + "path": "html/editing/the-hidden-attribute/hidden-1a.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1a.html" + } + ], + "html/editing/the-hidden-attribute/hidden-1b.html": [ + { + "path": "html/editing/the-hidden-attribute/hidden-1b.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1b.html" + } + ], + "html/editing/the-hidden-attribute/hidden-1c.html": [ + { + "path": "html/editing/the-hidden-attribute/hidden-1c.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1c.html" + } + ], + "html/editing/the-hidden-attribute/hidden-1d.html": [ + { + "path": "html/editing/the-hidden-attribute/hidden-1d.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1d.html" + } + ], + "html/editing/the-hidden-attribute/hidden-1e.html": [ + { + "path": "html/editing/the-hidden-attribute/hidden-1e.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1e.html" + } + ], + "html/editing/the-hidden-attribute/hidden-1f.html": [ + { + "path": "html/editing/the-hidden-attribute/hidden-1f.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1f.html" + } + ], + "html/editing/the-hidden-attribute/hidden-1g.html": [ + { + "path": "html/editing/the-hidden-attribute/hidden-1g.html", + "references": [ + [ + "/html/editing/the-hidden-attribute/hidden-1-ref.html", + "==" + ] + ], + "url": "/html/editing/the-hidden-attribute/hidden-1g.html" + } + ], "html/editing/the-hidden-attribute/hidden-2.svg": [ { "path": "html/editing/the-hidden-attribute/hidden-2.svg", @@ -40048,6 +40321,30 @@ "url": "/html/semantics/forms/the-textarea-element/textarea-newline-bidi.html" } ], + "html/semantics/forms/the-textarea-element/wrap-reflect-1a.html": [ + { + "path": "html/semantics/forms/the-textarea-element/wrap-reflect-1a.html", + "references": [ + [ + "/html/semantics/forms/the-textarea-element/wrap-reflect-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/forms/the-textarea-element/wrap-reflect-1a.html" + } + ], + "html/semantics/forms/the-textarea-element/wrap-reflect-1b.html": [ + { + "path": "html/semantics/forms/the-textarea-element/wrap-reflect-1b.html", + "references": [ + [ + "/html/semantics/forms/the-textarea-element/wrap-reflect-1-ref.html", + "==" + ] + ], + "url": "/html/semantics/forms/the-textarea-element/wrap-reflect-1b.html" + } + ], "html/semantics/grouping-content/the-li-element/grouping-li-reftest-001.html": [ { "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-001.html", @@ -40504,6 +40801,18 @@ "url": "/html/semantics/text-level-semantics/the-wbr-element/wbr-element.html" } ], + "http/basic-auth-cache-test.html": [ + { + "path": "http/basic-auth-cache-test.html", + "references": [ + [ + "/http/basic-auth-cache-test-ref.html", + "==" + ] + ], + "url": "/http/basic-auth-cache-test.html" + } + ], "quirks-mode/historical/list-item-bullet-size.html": [ { "path": "quirks-mode/historical/list-item-bullet-size.html", @@ -43241,7 +43550,7 @@ } ] }, - "rev": "dc5cbf088edcdb266541d4e5a76149a2c6e716a0", + "rev": "3b3585e368841b77caea8576fa56cef91c3fbdf0", "url_base": "/", "version": 3 } diff --git a/tests/wpt/metadata/XMLHttpRequest/event-error.html.ini b/tests/wpt/metadata/XMLHttpRequest/event-error.html.ini deleted file mode 100644 index 437b86cb787..00000000000 --- a/tests/wpt/metadata/XMLHttpRequest/event-error.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[event-error.html] - type: testharness - [XMLHttpRequest Test: event - error] - expected: FAIL - diff --git a/tests/wpt/metadata/XMLHttpRequest/formdata-foreach.html.ini b/tests/wpt/metadata/XMLHttpRequest/formdata-foreach.html.ini index 2de0609bfc2..d63f850d995 100644 --- a/tests/wpt/metadata/XMLHttpRequest/formdata-foreach.html.ini +++ b/tests/wpt/metadata/XMLHttpRequest/formdata-foreach.html.ini @@ -11,3 +11,4 @@ [Values iterator should return non-deleted values] expected: FAIL + diff --git a/tests/wpt/metadata/XMLHttpRequest/setrequestheader-case-insensitive.htm.ini b/tests/wpt/metadata/XMLHttpRequest/setrequestheader-case-insensitive.htm.ini new file mode 100644 index 00000000000..16277476d3a --- /dev/null +++ b/tests/wpt/metadata/XMLHttpRequest/setrequestheader-case-insensitive.htm.ini @@ -0,0 +1,5 @@ +[setrequestheader-case-insensitive.htm] + type: testharness + [XMLHttpRequest: setRequestHeader() - headers that differ in case] + expected: FAIL + diff --git a/tests/wpt/metadata/XMLHttpRequest/setrequestheader-header-allowed.htm.ini b/tests/wpt/metadata/XMLHttpRequest/setrequestheader-header-allowed.htm.ini new file mode 100644 index 00000000000..9a8d9b02b44 --- /dev/null +++ b/tests/wpt/metadata/XMLHttpRequest/setrequestheader-header-allowed.htm.ini @@ -0,0 +1,29 @@ +[setrequestheader-header-allowed.htm] + type: testharness + [XMLHttpRequest: setRequestHeader() - headers that are allowed (Authorization)] + expected: FAIL + + [XMLHttpRequest: setRequestHeader() - headers that are allowed (Pragma)] + expected: FAIL + + [XMLHttpRequest: setRequestHeader() - headers that are allowed (User-Agent)] + expected: FAIL + + [XMLHttpRequest: setRequestHeader() - headers that are allowed (Content-Transfer-Encoding)] + expected: FAIL + + [XMLHttpRequest: setRequestHeader() - headers that are allowed (Content-Type)] + expected: FAIL + + [XMLHttpRequest: setRequestHeader() - headers that are allowed (Overwrite)] + expected: FAIL + + [XMLHttpRequest: setRequestHeader() - headers that are allowed (If)] + expected: FAIL + + [XMLHttpRequest: setRequestHeader() - headers that are allowed (Status-URI)] + expected: FAIL + + [XMLHttpRequest: setRequestHeader() - headers that are allowed (X-Pink-Unicorn)] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/interfaces.html.ini b/tests/wpt/metadata/dom/interfaces.html.ini index 1142ba76fa4..247d68eba6a 100644 --- a/tests/wpt/metadata/dom/interfaces.html.ini +++ b/tests/wpt/metadata/dom/interfaces.html.ini @@ -384,3 +384,141 @@ [CDATASection interface: existence and properties of interface prototype object's "constructor" property] expected: FAIL + [Node interface: operation getRootNode(GetRootNodeOptions)] + expected: FAIL + + [Node interface: new Document() must inherit property "getRootNode" with the proper type (17)] + expected: FAIL + + [Node interface: calling getRootNode(GetRootNodeOptions) on new Document() with too few arguments must throw TypeError] + expected: FAIL + + [Node interface: xmlDoc must inherit property "getRootNode" with the proper type (17)] + expected: FAIL + + [Node interface: calling getRootNode(GetRootNodeOptions) on xmlDoc with too few arguments must throw TypeError] + expected: FAIL + + [Node interface: document.doctype must inherit property "getRootNode" with the proper type (17)] + expected: FAIL + + [Node interface: calling getRootNode(GetRootNodeOptions) on document.doctype with too few arguments must throw TypeError] + expected: FAIL + + [Node interface: document.createDocumentFragment() must inherit property "getRootNode" with the proper type (17)] + expected: FAIL + + [Node interface: calling getRootNode(GetRootNodeOptions) on document.createDocumentFragment() with too few arguments must throw TypeError] + expected: FAIL + + [Node interface: element must inherit property "getRootNode" with the proper type (17)] + expected: FAIL + + [Node interface: calling getRootNode(GetRootNodeOptions) on element with too few arguments must throw TypeError] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "getRootNode" with the proper type (17)] + expected: FAIL + + [Node interface: calling getRootNode(GetRootNodeOptions) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "parentNode" with the proper type (18)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "parentElement" with the proper type (19)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "hasChildNodes" with the proper type (20)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "childNodes" with the proper type (21)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "firstChild" with the proper type (22)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "lastChild" with the proper type (23)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "previousSibling" with the proper type (24)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "nextSibling" with the proper type (25)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "normalize" with the proper type (28)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "cloneNode" with the proper type (29)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "isEqualNode" with the proper type (30)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "isSameNode" with the proper type (31)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (32)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (33)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (34)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (35)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (36)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (37)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "compareDocumentPosition" with the proper type (38)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "contains" with the proper type (39)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "lookupPrefix" with the proper type (40)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "lookupNamespaceURI" with the proper type (41)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "isDefaultNamespace" with the proper type (42)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "insertBefore" with the proper type (43)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "appendChild" with the proper type (44)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "replaceChild" with the proper type (45)] + expected: FAIL + + [Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "removeChild" with the proper type (46)] + expected: FAIL + + [Node interface: document.createTextNode("abc") must inherit property "getRootNode" with the proper type (17)] + expected: FAIL + + [Node interface: calling getRootNode(GetRootNodeOptions) on document.createTextNode("abc") with too few arguments must throw TypeError] + expected: FAIL + + [Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "getRootNode" with the proper type (17)] + expected: FAIL + + [Node interface: calling getRootNode(GetRootNodeOptions) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError] + expected: FAIL + + [Node interface: document.createComment("abc") must inherit property "getRootNode" with the proper type (17)] + expected: FAIL + + [Node interface: calling getRootNode(GetRootNodeOptions) on document.createComment("abc") with too few arguments must throw TypeError] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/nodes/rootNode.html.ini b/tests/wpt/metadata/dom/nodes/rootNode.html.ini new file mode 100644 index 00000000000..a3c447e420e --- /dev/null +++ b/tests/wpt/metadata/dom/nodes/rootNode.html.ini @@ -0,0 +1,14 @@ +[rootNode.html] + type: testharness + [getRootNode() must return the context object when it does not have any parent] + expected: FAIL + + [getRootNode() must return the parent node of the context object when the context object has a single ancestor not in a document] + expected: FAIL + + [getRootNode() must return the document when a node is in document] + expected: FAIL + + [getRootNode() must return a document fragment when a node is in the fragment] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/accept-header-worker.html.ini b/tests/wpt/metadata/fetch/api/basic/accept-header-worker.html.ini index c6d97a04e4c..1ad17d9532f 100644 --- a/tests/wpt/metadata/fetch/api/basic/accept-header-worker.html.ini +++ b/tests/wpt/metadata/fetch/api/basic/accept-header-worker.html.ini @@ -3,3 +3,12 @@ [Request through fetch should have 'accept' header with value '*/*'] expected: FAIL + [Request through fetch should have 'accept' header with value 'custom/*'] + expected: FAIL + + [Request through fetch should have a 'accept-language' header] + expected: FAIL + + [Request through fetch should have 'accept-language' header with value 'bzh'] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/basic/accept-header.html.ini b/tests/wpt/metadata/fetch/api/basic/accept-header.html.ini index b9c856168d5..991127f2257 100644 --- a/tests/wpt/metadata/fetch/api/basic/accept-header.html.ini +++ b/tests/wpt/metadata/fetch/api/basic/accept-header.html.ini @@ -3,3 +3,12 @@ [Request through fetch should have 'accept' header with value '*/*'] expected: FAIL + [Request through fetch should have 'accept' header with value 'custom/*'] + expected: FAIL + + [Request through fetch should have a 'accept-language' header] + expected: FAIL + + [Request through fetch should have 'accept-language' header with value 'bzh'] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-preflight-referrer-worker.html.ini b/tests/wpt/metadata/fetch/api/cors/cors-preflight-referrer-worker.html.ini index c7c7a2d2418..6869f7999ed 100644 --- a/tests/wpt/metadata/fetch/api/cors/cors-preflight-referrer-worker.html.ini +++ b/tests/wpt/metadata/fetch/api/cors/cors-preflight-referrer-worker.html.ini @@ -15,3 +15,33 @@ [Referrer policy: unsafe-url] expected: FAIL + [Referrer policy: no-referrer and referrer: default] + expected: FAIL + + [Referrer policy: no-referrer and referrer: 'myreferrer'] + expected: FAIL + + [Referrer policy: "" and referrer: default] + expected: FAIL + + [Referrer policy: "" and referrer: 'myreferrer'] + expected: FAIL + + [Referrer policy: origin and referrer: default] + expected: FAIL + + [Referrer policy: origin and referrer: 'myreferrer'] + expected: FAIL + + [Referrer policy: origin-when-cross-origin and referrer: default] + expected: FAIL + + [Referrer policy: origin-when-cross-origin and referrer: 'myreferrer'] + expected: FAIL + + [Referrer policy: unsafe-url and referrer: default] + expected: FAIL + + [Referrer policy: unsafe-url and referrer: 'myreferrer'] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/cors/cors-preflight-referrer.html.ini b/tests/wpt/metadata/fetch/api/cors/cors-preflight-referrer.html.ini index 1fab8e3c939..b3f9528014f 100644 --- a/tests/wpt/metadata/fetch/api/cors/cors-preflight-referrer.html.ini +++ b/tests/wpt/metadata/fetch/api/cors/cors-preflight-referrer.html.ini @@ -15,3 +15,33 @@ [Referrer policy: unsafe-url] expected: FAIL + [Referrer policy: no-referrer and referrer: default] + expected: FAIL + + [Referrer policy: no-referrer and referrer: 'myreferrer'] + expected: FAIL + + [Referrer policy: "" and referrer: default] + expected: FAIL + + [Referrer policy: "" and referrer: 'myreferrer'] + expected: FAIL + + [Referrer policy: origin and referrer: default] + expected: FAIL + + [Referrer policy: origin and referrer: 'myreferrer'] + expected: FAIL + + [Referrer policy: origin-when-cross-origin and referrer: default] + expected: FAIL + + [Referrer policy: origin-when-cross-origin and referrer: 'myreferrer'] + expected: FAIL + + [Referrer policy: unsafe-url and referrer: default] + expected: FAIL + + [Referrer policy: unsafe-url and referrer: 'myreferrer'] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/origin/origin-of-data-document.html.ini b/tests/wpt/metadata/html/browsers/origin/origin-of-data-document.html.ini new file mode 100644 index 00000000000..33bef187cf3 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/origin/origin-of-data-document.html.ini @@ -0,0 +1,6 @@ +[origin-of-data-document.html] + type: testharness + expected: TIMEOUT + [The origin of a 'data:' document in a frame is opaque.] + 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.sub.html.ini index fb4628a00e5..4ae432e0d28 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.sub.html.ini @@ -10,3 +10,6 @@ [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 new file mode 100644 index 00000000000..a1e22155c9c --- /dev/null +++ b/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/document.forms.html.ini @@ -0,0 +1,5 @@ +[document.forms.html] + type: testharness + [document.forms iteration] + 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 b642ef919b3..9086f7a8d02 100644 --- a/tests/wpt/metadata/html/dom/reflection-embedded.html.ini +++ b/tests/wpt/metadata/html/dom/reflection-embedded.html.ini @@ -17880,9 +17880,6 @@ [area.ping: IDL set to "\\0" followed by getAttribute()] expected: FAIL - [area.ping: IDL set to "\\0" followed by IDL get] - expected: FAIL - [area.ping: IDL set to null followed by getAttribute()] expected: FAIL @@ -20925,3 +20922,9 @@ [img.crossOrigin: IDL set to null followed by IDL get] expected: FAIL + [area.ping: 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 " followed by IDL get] + expected: FAIL + + [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 + diff --git a/tests/wpt/metadata/html/dom/reflection-text.html.ini b/tests/wpt/metadata/html/dom/reflection-text.html.ini index cfe875b6f19..741a0ffbbbf 100644 --- a/tests/wpt/metadata/html/dom/reflection-text.html.ini +++ b/tests/wpt/metadata/html/dom/reflection-text.html.ini @@ -717,9 +717,6 @@ [a.ping: IDL set to "\\0" followed by getAttribute()] expected: FAIL - [a.ping: IDL set to "\\0" followed by IDL get] - expected: FAIL - [a.ping: IDL set to null followed by getAttribute()] expected: FAIL @@ -24408,3 +24405,9 @@ [wbr.tabIndex: setAttribute() to "\\r7" followed by IDL get] expected: FAIL + [a.ping: 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 " followed by IDL get] + expected: FAIL + + [a.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 + diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-style-element/style_scoped.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-style-element/style_scoped.html.ini deleted file mode 100644 index 2ec23f74807..00000000000 --- a/tests/wpt/metadata/html/semantics/document-metadata/the-style-element/style_scoped.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[style_scoped.html] - type: testharness - [The scoped attribute is present, the style information must be applied only to its parent element] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html.ini index ac3e73eb6d1..ff0a3d8669f 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html.ini @@ -27,3 +27,12 @@ [HTMLTrackElement.src resolvable value in content attribute] expected: FAIL + [HTMLTrackElement.src assigning empty string to IDL attribute] + expected: FAIL + + [HTMLTrackElement.src foo\\u0000bar in content attribute] + expected: FAIL + + [HTMLTrackElement.src assigning foo\\u0000bar to IDL attribute] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/synchronising-multiple-media-elements/media-controllers/task-source.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/synchronising-multiple-media-elements/media-controllers/task-source.html.ini deleted file mode 100644 index 3c72c84f4c9..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/synchronising-multiple-media-elements/media-controllers/task-source.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[task-source.html] - type: testharness - [MediaController events task source] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-area-element/area-shape.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-area-element/area-shape.html.ini index 4586a82082a..8ff5ca24fe5 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-area-element/area-shape.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-area-element/area-shape.html.ini @@ -33,3 +33,9 @@ [simple: "100,100,120,100,100,120" (polygon)] expected: FAIL + [simple: "2,2,10,10" (rect)] + expected: FAIL + + [simple: "2,2,10,10" (rectangle)] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-canvas-element/historical.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-canvas-element/historical.html.ini new file mode 100644 index 00000000000..83b92578f81 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-canvas-element/historical.html.ini @@ -0,0 +1,3 @@ +[historical.html] + type: testharness + expected: ERROR diff --git a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-checkValidity.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-checkValidity.html.ini index 080328d4b58..3def3e50cf1 100644 --- a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-checkValidity.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-checkValidity.html.ini @@ -367,3 +367,33 @@ [[INPUT in FILE status\] suffering from being missing (in a form)] expected: FAIL + [[INPUT in DATETIME-LOCAL status\] no constraint] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] no constraint (in a form)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from an overflow] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from an overflow (in a form)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from an underflow] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from an underflow (in a form)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from a step mismatch] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from a step mismatch (in a form)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from being missing] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from being missing (in a form)] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-reportValidity.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-reportValidity.html.ini index f73f41718dd..af1bb61dd88 100644 --- a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-reportValidity.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-reportValidity.html.ini @@ -367,3 +367,33 @@ [[INPUT in FILE status\] suffering from being missing (in a form)] expected: FAIL + [[INPUT in DATETIME-LOCAL status\] no constraint] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] no constraint (in a form)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from an overflow] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from an overflow (in a form)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from an underflow] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from an underflow (in a form)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from a step mismatch] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from a step mismatch (in a form)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from being missing] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] suffering from being missing (in a form)] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-rangeOverflow.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-rangeOverflow.html.ini index 4acd4f49ce2..78f8de7d50a 100644 --- a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-rangeOverflow.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-rangeOverflow.html.ini @@ -192,3 +192,36 @@ [[INPUT in NUMBER status\] The value is greater than max(scientific notation)] expected: FAIL + [[INPUT in DATETIME-LOCAL status\] The max attribute is not set] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] Value is empty string] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The max attribute is an invalid local date time string] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The max attribute is greater than the value attribute] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is an invalid local date time string(hour is greater than 23)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value if an invalid local date time string(year is two digits)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is greater than max] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is greater than max(with millisecond in 1 digit)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is greater than max(with millisecond in 2 digits)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is greater than max(with millisecond in 3 digits)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is greater than max(Year is 10000 should be valid)] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-rangeUnderflow.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-rangeUnderflow.html.ini index f7bd97f3c0a..851c76eeab1 100644 --- a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-rangeUnderflow.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-rangeUnderflow.html.ini @@ -183,3 +183,39 @@ [[INPUT in NUMBER status\] The value is less than min(scientific notation)] expected: FAIL + [[INPUT in DATETIME-LOCAL status\] The min attribute is not set] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] Value is empty string] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The min attribute is an invalid local date time string] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The min attribute is less than the value attribute] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is an invalid local date time string(hour is greater than 23)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is an invalid local date time string(year is two digits)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is less than min] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is less than min(with millisecond in 1 digit)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is less than min(with millisecond in 2 digits)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is less than min(with millisecond in 3 digits)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is less than min(Year is 10000 should be valid)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value is greater than max] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-valid.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-valid.html.ini index 39e9741de44..3f11b627f2a 100644 --- a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-valid.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-valid.html.ini @@ -142,3 +142,15 @@ [[INPUT in FILE status\] validity.valid must be false if validity.valueMissing is true] expected: FAIL + [[INPUT in DATETIME-LOCAL status\] validity.valid must be false if validity.rangeOverflow is true] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] validity.valid must be false if validity.rangeUnderflow is true] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] validity.valid must be false if validity.stepMismatch is true] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] validity.valid must be false if validity.valueMissing is true] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-valueMissing.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-valueMissing.html.ini index 1ffe2031536..de840378f42 100644 --- a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-valueMissing.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-valueMissing.html.ini @@ -271,3 +271,36 @@ [[INPUT in NUMBER status\] Value is a string that cannot be converted to a number] expected: FAIL + [[INPUT in DATETIME-LOCAL status\] The required attribute is not set] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] Valid local date and time string(2000-12-10T12:00:00)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] Valid local date and time string(2000-12-10 12:00)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] Valid local date and time string(1979-10-14T12:00:00.001)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value attribute is a number(1234567)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value attribute is a Date object] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] Invalid local date and time string(1979-10-99 99:99)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] Valid local date and time string(1979-10-14 12:00:00)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] Invalid local date and time string(2001-12-21 12:00)-two white space] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] the value attribute is a string(abc)] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The value attribute is empty string] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-willValidate.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-willValidate.html.ini index 13516e5ccde..6403247db8c 100644 --- a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-willValidate.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-willValidate.html.ini @@ -250,3 +250,15 @@ [[BUTTON in SUBMIT status\] The willValidate attribute must be true if an element is mutable] expected: FAIL + [[INPUT in DATETIME-LOCAL status\] Must be barred from the constraint validation if it is disabled] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The willValidate attribute must be true if an element is mutable] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] Must be barred from the constraint validation if it is readonly] + expected: FAIL + + [[INPUT in DATETIME-LOCAL status\] The willValidate attribute must be false if it has a datalist ancestor] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/historical.html.ini b/tests/wpt/metadata/html/semantics/forms/historical.html.ini new file mode 100644 index 00000000000..935a07dde62 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/forms/historical.html.ini @@ -0,0 +1,8 @@ +[historical.html] + type: testharness + [ should not be supported] + expected: FAIL + + [ should not be supported] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/textfieldselection/selection-not-application.html.ini b/tests/wpt/metadata/html/semantics/forms/textfieldselection/selection-not-application.html.ini index cb284a14c4f..a97a4c9832b 100644 --- a/tests/wpt/metadata/html/semantics/forms/textfieldselection/selection-not-application.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/textfieldselection/selection-not-application.html.ini @@ -66,3 +66,6 @@ [text field selection for the input password] expected: FAIL + [text field selection for the input datetime-local] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/checkbox.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/checkbox.html.ini index 8c1a6388ba5..afdd08c6014 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/checkbox.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/checkbox.html.ini @@ -6,6 +6,3 @@ [canceled activation steps on unchecked checkbox (indeterminate=true in onclick)] expected: FAIL - [click on mutable checkbox fires a click event, then an input event, then a change event] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/cloning-steps.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/cloning-steps.html.ini new file mode 100644 index 00000000000..c3cb6115f85 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/cloning-steps.html.ini @@ -0,0 +1,14 @@ +[cloning-steps.html] + type: testharness + [input element's value should be cloned] + expected: FAIL + + [input element's dirty value flag should be cloned, so setAttribute doesn't affect the cloned input's value] + expected: FAIL + + [input element's checkedness should be cloned] + expected: FAIL + + [input element's dirty checkedness should be cloned, so setAttribute doesn't affect the cloned input's checkedness] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/datetime-2.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/datetime-2.html.ini deleted file mode 100644 index 5d127500e7c..00000000000 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/datetime-2.html.ini +++ /dev/null @@ -1,47 +0,0 @@ -[datetime-2.html] - type: testharness - [datetime input value set to 2014-01-01 11:11Z without min/max] - expected: FAIL - - [datetime input value set to 2014-01-01 11:11-04:00 without min/max] - expected: FAIL - - [datetime input value set to 2014-01-01 11:11-0400 without min/max] - expected: FAIL - - [datetime input value set to 2014-01-01 11:11:00.000-04:00 without min/max] - expected: FAIL - - [datetime input value set to 2014-01-01 11:11:00.000Z without min/max] - expected: FAIL - - [datetime input value set to 2014-01-01 11:11:00.000 without min/max] - expected: FAIL - - [datetime input value set to 2014-01-01 11:11:00.000+ without min/max] - expected: FAIL - - [datetime input value set to 2014-01-01 11:11:00.000+24 without min/max] - expected: FAIL - - [datetime input value set to 2014-01-01 11:11:00.000+2360 without min/max] - expected: FAIL - - [datetime input value set to 2014-01-0 11:11:00.000+0400 without min/max] - expected: FAIL - - [datetime input value set to 2014-01-01 11:1:00.000+0400 without min/max] - expected: FAIL - - [Value >= min attribute] - expected: FAIL - - [Value < min attribute] - expected: FAIL - - [Value <= max attribute] - expected: FAIL - - [Value > max attribute] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini index b2ef4477faa..851f1cdf3ea 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini @@ -840,3 +840,102 @@ [change state from button to color] expected: FAIL + [change state from hidden to datetime-local] + expected: FAIL + + [change state from text to datetime-local] + expected: FAIL + + [change state from search to datetime-local] + expected: FAIL + + [change state from tel to datetime-local] + expected: FAIL + + [change state from url to datetime-local] + expected: FAIL + + [change state from email to datetime-local] + expected: FAIL + + [change state from password to datetime-local] + expected: FAIL + + [change state from datetime-local to text] + expected: FAIL + + [change state from datetime-local to search] + expected: FAIL + + [change state from datetime-local to tel] + expected: FAIL + + [change state from datetime-local to url] + expected: FAIL + + [change state from datetime-local to email] + expected: FAIL + + [change state from datetime-local to password] + expected: FAIL + + [change state from datetime-local to date] + expected: FAIL + + [change state from datetime-local to month] + expected: FAIL + + [change state from datetime-local to week] + expected: FAIL + + [change state from datetime-local to time] + expected: FAIL + + [change state from datetime-local to number] + expected: FAIL + + [change state from datetime-local to range] + expected: FAIL + + [change state from datetime-local to color] + expected: FAIL + + [change state from date to datetime-local] + expected: FAIL + + [change state from month to datetime-local] + expected: FAIL + + [change state from week to datetime-local] + expected: FAIL + + [change state from time to datetime-local] + expected: FAIL + + [change state from number to datetime-local] + expected: FAIL + + [change state from range to datetime-local] + expected: FAIL + + [change state from color to datetime-local] + expected: FAIL + + [change state from checkbox to datetime-local] + expected: FAIL + + [change state from radio to datetime-local] + expected: FAIL + + [change state from submit to datetime-local] + expected: FAIL + + [change state from image to datetime-local] + expected: FAIL + + [change state from reset to datetime-local] + expected: FAIL + + [change state from button to datetime-local] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/valueMode.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/valueMode.html.ini index 948f193accb..9e2b88bf891 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/valueMode.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/valueMode.html.ini @@ -90,3 +90,9 @@ [value IDL attribute of input type button with value attribute] expected: FAIL + [value IDL attribute of input type datetime-local without value attribute] + expected: FAIL + + [value IDL attribute of input type datetime-local with value attribute] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/the-textarea-element/cloning-steps.html.ini b/tests/wpt/metadata/html/semantics/forms/the-textarea-element/cloning-steps.html.ini new file mode 100644 index 00000000000..628f7ff79f3 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/forms/the-textarea-element/cloning-steps.html.ini @@ -0,0 +1,8 @@ +[cloning-steps.html] + type: testharness + [textarea element's value should be cloned] + expected: FAIL + + [textarea element's dirty value flag should be cloned, so setAttribute doesn't affect the cloned textarea's value] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/historical.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/historical.html.ini new file mode 100644 index 00000000000..be3a51aa29f --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/historical.html.ini @@ -0,0 +1,14 @@ +[historical.html] + type: testharness + [onbeforescriptexecute content attribute should not be supported] + expected: FAIL + + [onafterscriptexecute content attribute should not be supported] + expected: FAIL + + [beforescriptexecute event should not be supported] + expected: FAIL + + [afterscriptexecute event should not be supported] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/load-event.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/load-event.html.ini new file mode 100644 index 00000000000..2725506d8a7 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/load-event.html.ini @@ -0,0 +1,5 @@ +[load-event.html] + type: testharness + [load events should not be fired for inline scripts] + expected: FAIL + diff --git a/tests/wpt/metadata/html/syntax/serializing-html-fragments/serializing.html.ini b/tests/wpt/metadata/html/syntax/serializing-html-fragments/serializing.html.ini index 9923051c748..ce7d1a63f3f 100644 --- a/tests/wpt/metadata/html/syntax/serializing-html-fragments/serializing.html.ini +++ b/tests/wpt/metadata/html/syntax/serializing-html-fragments/serializing.html.ini @@ -15,15 +15,6 @@ [innerHTML non-context starting with U+000A] expected: FAIL - [innerHTML
 non-context not starting with U+000A]
-    expected: FAIL
-
-  [innerHTML 
     

+

Specifically, the following assertions will be evaluated:

+
diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationMusts.test b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationMusts.test index e32bd482e43..8686d82fd46 100644 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationMusts.test +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationMusts.test @@ -1,9 +1,9 @@ { "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld", - "name": "Annotation has all required keys and all annotation keys used meet required value constraints", - "description": "Web Annotations:
  • MUST include certain properties (keys)
  • MUST NOT have both body and bodyValue keys simultaneously
  • MUST satisfy model constraints on values of required and any optional Annotation keys used
Note: Optional Annotation keys, optional constraints on key values, and optional and required details of body(ies) and target(s) checked by other tests.", + "name": "A single ANNOTATION has all required keys and all annotation keys used meet required value constraints", + "description": "Web Annotations:
  • MUST include certain properties (keys)
  • MUST NOT have both body and bodyValue keys simultaneously
  • MUST satisfy model constraints on values of required and any optional Annotation keys used
Note: Implementation of optional Annotation keys (features), optional constraints on key values, and optional keys and constraints on Agents involved in an Annotation checked by other tests.", "testType": "manual", - "ref": "https://www.w3.org/TR/annotation-model/#annotations", + "ref": "https://www.w3.org/TR/annotation-model/", "assertions": [ "annotations/3.1-annotationContextValidated.json", "annotations/3.1-annotationIdValidated.json", @@ -18,6 +18,46 @@ "annotations/3.3.1-annotationGeneratedValidated.json", "annotations/3.3.6-annotationRightsValidated.json", "annotations/3.3.7-annotationCanonicalValidated.json", - "annotations/3.3.7-annotationViaValidated.json" + "annotations/3.3.7-annotationViaValidated.json", + "annotations/bodiesTargets/3.2.1-bodyTextDirectionValidated.json", + "annotations/bodiesTargets/3.3.1-bodyCreatedValidated.json", + "annotations/bodiesTargets/3.3.1-bodyModifiedValidated.json", + "annotations/bodiesTargets/3.3.6-bodyRightsValidated.json", + "annotations/bodiesTargets/3.3.7-bodyCanonicalValidated.json", + "annotations/bodiesTargets/3.3.7-bodyViaValidated.json", + "annotations/bodiesTargets/3.2.7-bodyEWRNoItems.json", + "annotations/bodiesTargets/3.3.5-bodyEWRNoPurpose.json", + "annotations/bodiesTargets/3.2.4-bodyChoiceSetNoValue.json", + "annotations/bodiesTargets/4-bodyChoiceSetNoSource.json", + "annotations/bodiesTargets/3.3.5-bodyChoiceSetNoPurpose.json", + "annotations/bodiesTargets/3.2.7-bodyEmbeddedTextualNoItems.json", + "annotations/bodiesTargets/4-bodyEmbeddedTextualNoSource.json", + "annotations/bodiesTargets/3.2.7-bodySpecificResourceNoItems.json", + "annotations/bodiesTargets/4-bodySpecificResourceNoValue.json", + "annotations/bodiesTargets/3.2.1-targTextDirectionValidated.json", + "annotations/bodiesTargets/3.3.1-targCreatedValidated.json", + "annotations/bodiesTargets/3.3.1-targModifiedValidated.json", + "annotations/bodiesTargets/3.3.6-targRightsValidated.json", + "annotations/bodiesTargets/3.3.7-targCanonicalValidated.json", + "annotations/bodiesTargets/3.3.7-targViaValidated.json", + "annotations/bodiesTargets/3.2.7-targEWRNoItems.json", + "annotations/bodiesTargets/3.3.5-targEWRNoPurpose.json", + "annotations/bodiesTargets/3.2.4-targChoiceSetNoValue.json", + "annotations/bodiesTargets/4-targChoiceSetNoSource.json", + "annotations/bodiesTargets/3.3.5-targChoiceSetNoPurpose.json", + "annotations/bodiesTargets/3.2.7-targSpecificResourceNoItems.json", + "annotations/bodiesTargets/4-targSpecificResourceNoValue.json", + "annotations/bodiesTargets/3.2.4-targNoTypeTextualBody.json", + "annotations/specificResource/4.2-selectorValidIfPresent.json", + "annotations/specificResource/4.3-stateValidIfPresent.json", + "annotations/specificResource/4.3.3-refinedByValidated.json", + "annotations/specificResource/4.4-styleClassValidIfPresent.json", + "annotations/specificResource/4.2-fragmentCssXPathSelectorValid.json", + "annotations/specificResource/4.2.4-textQuoteSelectorValid.json", + "annotations/specificResource/4.2-TextDataPositionSelectorValid.json", + "annotations/specificResource/4.2.7-svgSelectorValid.json", + "annotations/specificResource/4.2.8-rangeSelectorValid.json", + "annotations/specificResource/4.3.1-timeStateValid.json", + "annotations/specificResource/4.3.2-httpRequestStateValid.json" ] } 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 acdefff4e27..2b9f4e74511 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 @@ -2,6 +2,7 @@ Annotation implements optional keys and meets optional key value constraints + @@ -11,26 +12,12 @@ setup({explicit_timeout: true, explicit_done: true }); var theDefinitions=[ - "definitions/compositeDetected.json", - "definitions/processingLanguageDetected.json", - "definitions/textDirectionDetected.json", - "definitions/independentsDetected.json", "definitions/specificResource.json", - "definitions/stringUri.json", "definitions/choiceSet.json", "definitions/bodyTarget.json", - "definitions/listDetected.json", - "definitions/formatDetected.json", "definitions/annotations.json", "definitions/otherProperties.json", - "definitions/choiceDetected.json", - "definitions/externalWebResource.json", - "definitions/externalWebResourceDetected.json", - "definitions/languageDetected.json", - "definitions/textualBody.json", - "definitions/id.json", - "definitions/itemsDetected.json", - "definitions/specificResourceDetected.json" + "definitions/id.json" ]; var theTestFile="annotationOptionals.test"; @@ -49,13 +36,13 @@ var runningTest = new JSONtest( {

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

-

Specifically, the following assertions will be evaluated:

-

+

Specifically, the following assertions will be evaluated:

+
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 8fd1da41ce9..955ac39d41d 100644 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationOptionals.test +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationOptionals.test @@ -5,13 +5,10 @@ "testType": "manual", "ref": "https://www.w3.org/TR/annotation-model/#other-properties", "assertions": [ - "annotations/3.1-bodyKeyFound.json", "annotations/3.3.1-annotationSingleCreatorImplemented.json", "annotations/3.3.1-annotationCreatedImplemented.json", "annotations/3.3.5-annotationSingleMotivationImplemented.json", "annotations/3.2.5-bodyValueImplemented.json", - "annotations/3.3.1-annotationCreatorImplemented.json", - "annotations/3.3.1-annotationGeneratorImplemented.json", "annotations/3.3.1-annotationGeneratedImplemented.json", "annotations/3.3.1-annotationModifiedImplemented.json", "annotations/3.3.3-annotationAudienceImplemented.json", @@ -19,7 +16,76 @@ "annotations/3.3.6-annotationRightsImplemented.json", "annotations/3.3.7-annotationCanonicalImplemented.json", "annotations/3.3.7-annotationViaImplemented.json", - "annotations/4.4-annotationStylesheetImplemented.json" - + "annotations/4.4-annotationStylesheetImplemented.json", + "annotations/3.1-bodyKeyFound.json", + "annotations/bodiesTargets/3.2.1-bodySingleFormat.json", + "annotations/bodiesTargets/3.2.1-bodySingleLanguage.json", + "annotations/bodiesTargets/3.3.1-bodySingleCreator.json", + "annotations/bodiesTargets/3.3.1-bodyCreated.json", + "annotations/bodiesTargets/3.2.1-bodyFormat.json", + "annotations/bodiesTargets/3.2.1-bodyLanguage.json", + "annotations/bodiesTargets/3.2.2-bodyType.json", + "annotations/bodiesTargets/3.2.1-bodyProcessingLanguage.json", + "annotations/bodiesTargets/3.2.1-bodyTextDirection.json", + "annotations/bodiesTargets/3.3.1-bodyModified.json", + "annotations/bodiesTargets/3.3.3-bodyAudience.json", + "annotations/bodiesTargets/3.3.4-bodyAccessibility.json", + "annotations/bodiesTargets/3.3.5-bodyPurpose.json", + "annotations/bodiesTargets/3.3.6-bodyRights.json", + "annotations/bodiesTargets/3.3.7-bodyCanonical.json", + "annotations/bodiesTargets/3.3.7-bodyVia.json", + "annotations/bodiesTargets/3.2.1-bodyEWR.json", + "annotations/bodiesTargets/3.2.4-bodyETB.json", + "annotations/bodiesTargets/3.2.4-bodyETBTypeTextualBody.json", + "annotations/bodiesTargets/3.2.4-bodyETBTypeText.json", + "annotations/bodiesTargets/3.2.7-bodyChoiceSet.json", + "annotations/bodiesTargets/3.2.7-bodyChoice.json", + "annotations/bodiesTargets/3.2.8-bodyList.json", + "annotations/bodiesTargets/3.2.8-bodyComposite.json", + "annotations/bodiesTargets/3.2.8-bodyIndependents.json", + "annotations/bodiesTargets/3.2.1-targSingleFormat.json", + "annotations/bodiesTargets/3.2.1-targSingleLanguage.json", + "annotations/bodiesTargets/3.3.1-targSingleCreator.json", + "annotations/bodiesTargets/3.3.1-targCreated.json", + "annotations/bodiesTargets/3.2.1-targFormat.json", + "annotations/bodiesTargets/3.2.1-targLanguage.json", + "annotations/bodiesTargets/3.2.2-targType.json", + "annotations/bodiesTargets/3.2.1-targProcessingLanguage.json", + "annotations/bodiesTargets/3.2.1-targTextDirection.json", + "annotations/bodiesTargets/3.3.1-targModified.json", + "annotations/bodiesTargets/3.3.3-targAudience.json", + "annotations/bodiesTargets/3.3.4-targAccessibility.json", + "annotations/bodiesTargets/3.3.5-targPurpose.json", + "annotations/bodiesTargets/3.3.6-targRights.json", + "annotations/bodiesTargets/3.3.7-targCanonical.json", + "annotations/bodiesTargets/3.3.7-targVia.json", + "annotations/bodiesTargets/3.2.1-targEWR.json", + "annotations/bodiesTargets/3.2.7-targChoiceSet.json", + "annotations/bodiesTargets/3.2.7-targChoice.json", + "annotations/bodiesTargets/3.2.8-targList.json", + "annotations/bodiesTargets/3.2.8-targComposite.json", + "annotations/bodiesTargets/3.2.8-targIndependents.json", + "annotations/bodiesTargets/4-bodySpecificResource.json", + "annotations/bodiesTargets/4-targSpecificResource.json", + "annotations/specificResource/4.3.3-refinedBy.json", + "annotations/specificResource/4.4-styleClass.json", + "annotations/specificResource/4.5-renderedVia.json", + "annotations/specificResource/4.6-scope.json", + "annotations/specificResource/4.2-selectorFound.json", + "annotations/specificResource/4.2.1-fragmentSelector.json", + "annotations/specificResource/4.2.1-conformsTo.json", + "annotations/specificResource/4.2.2-cssSelector.json", + "annotations/specificResource/4.2.3-xpathSelector.json", + "annotations/specificResource/4.2.4-textQuoteSelector.json", + "annotations/specificResource/4.2.4-prefix.json", + "annotations/specificResource/4.2.4-suffix.json", + "annotations/specificResource/4.2.5-textPositionSelector.json", + "annotations/specificResource/4.2.6-dataPositionSelector.json", + "annotations/specificResource/4.2.7-svgSelector.json", + "annotations/specificResource/4.2.8-rangeSelector.json", + "annotations/specificResource/4.3-stateFound.json", + "annotations/specificResource/4.3.1-timeState.json", + "annotations/specificResource/4.3.2-requestHeaderState.json", + "annotations/specificResource/4.3.1-cached.json" ] } diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationAgentOptionals-manual.html b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals-manual.html similarity index 71% rename from tests/wpt/web-platform-tests/annotation-model/annotations/annotationAgentOptionals-manual.html rename to tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals-manual.html index 1fe35437568..bb1590624cf 100644 --- a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationAgentOptionals-manual.html +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals-manual.html @@ -2,6 +2,7 @@ Annotation implements optional keys and meets optional key value constraints for Creator and Generator Agents + @@ -11,29 +12,15 @@ setup({explicit_timeout: true, explicit_done: true }); var theDefinitions=[ - "definitions/compositeDetected.json", - "definitions/processingLanguageDetected.json", - "definitions/textDirectionDetected.json", - "definitions/independentsDetected.json", "definitions/specificResource.json", - "definitions/stringUri.json", "definitions/choiceSet.json", "definitions/bodyTarget.json", - "definitions/listDetected.json", - "definitions/formatDetected.json", "definitions/annotations.json", "definitions/otherProperties.json", - "definitions/choiceDetected.json", - "definitions/externalWebResource.json", - "definitions/externalWebResourceDetected.json", - "definitions/languageDetected.json", - "definitions/textualBody.json", - "definitions/id.json", - "definitions/itemsDetected.json", - "definitions/specificResourceDetected.json" + "definitions/id.json" ]; -var theTestFile="annotationAgentOptionals.test"; +var theTestFile="annotationsAgentOptionals.test"; var runningTest = new JSONtest( { "testInput" : "annotation-input", @@ -49,13 +36,13 @@ var runningTest = new JSONtest( {

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

-

Specifically, the following assertions will be evaluated:

-

+

Specifically, the following assertions will be evaluated:

+
diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals.test b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals.test new file mode 100644 index 00000000000..c5eb8713a6a --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/annotationsAgentOptionals.test @@ -0,0 +1,46 @@ +{ + "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld", + "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", + "ref": "https://www.w3.org/TR/annotation-model/#other-properties", + "assertions": + [ + "annotations/3.3.1-annotationCreatorImplemented.json", + "annotations/3.3.2-annotationCreatorAgentIdImplemented.json", + "annotations/3.3.2-annotationCreatorAgentTypeImplemented.json", + "annotations/3.3.2-annotationCreatorAgentNicknameImplemented.json", + "annotations/3.3.2-annotationCreatorAgentSingleNameImplemented.json", + "annotations/3.3.2-annotationCreatorAgentNameImplemented.json", + "annotations/3.3.2-annotationCreatorAgentEmailImplemented.json", + "annotations/3.3.2-annotationCreatorAgentEmail_sha1Implemented.json", + "annotations/3.3.2-annotationCreatorAgentHomepageImplemented.json", + "annotations/3.3.1-annotationGeneratorImplemented.json", + "annotations/3.3.2-annotationGeneratorAgentIdImplemented.json", + "annotations/3.3.2-annotationGeneratorAgentTypeImplemented.json", + "annotations/3.3.2-annotationGeneratorAgentNicknameImplemented.json", + "annotations/3.3.2-annotationGeneratorAgentSingleNameImplemented.json", + "annotations/3.3.2-annotationGeneratorAgentNameImplemented.json", + "annotations/3.3.2-annotationGeneratorAgentEmailImplemented.json", + "annotations/3.3.2-annotationGeneratorAgentEmail_sha1Implemented.json", + "annotations/3.3.2-annotationGeneratorAgentHomepageImplemented.json", + "annotations/bodiesTargets/3.3.1-bodyCreator.json", + "annotations/bodiesTargets/3.3.2-bodyCreatorAgentIdImplemented.json", + "annotations/bodiesTargets/3.3.2-bodyCreatorAgentTypeImplemented.json", + "annotations/bodiesTargets/3.3.2-bodyCreatorAgentNicknameImplemented.json", + "annotations/bodiesTargets/3.3.2-bodyCreatorAgentSingleNameImplemented.json", + "annotations/bodiesTargets/3.3.2-bodyCreatorAgentNameImplemented.json", + "annotations/bodiesTargets/3.3.2-bodyCreatorAgentEmailImplemented.json", + "annotations/bodiesTargets/3.3.2-bodyCreatorAgentEmail_sha1Implemented.json", + "annotations/bodiesTargets/3.3.2-bodyCreatorAgentHomepageImplemented.json", + "annotations/bodiesTargets/3.3.1-targCreator.json", + "annotations/bodiesTargets/3.3.2-targCreatorAgentIdImplemented.json", + "annotations/bodiesTargets/3.3.2-targCreatorAgentTypeImplemented.json", + "annotations/bodiesTargets/3.3.2-targCreatorAgentNicknameImplemented.json", + "annotations/bodiesTargets/3.3.2-targCreatorAgentSingleNameImplemented.json", + "annotations/bodiesTargets/3.3.2-targCreatorAgentNameImplemented.json", + "annotations/bodiesTargets/3.3.2-targCreatorAgentEmailImplemented.json", + "annotations/bodiesTargets/3.3.2-targCreatorAgentEmail_sha1Implemented.json", + "annotations/bodiesTargets/3.3.2-targCreatorAgentHomepageImplemented.json" + ] +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/.gitignore b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyEWR.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyEWR.json new file mode 100644 index 00000000000..e22585b905b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyEWR.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-bodyEWR.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "An External Web Resource body may be used as an Annotation Body.", + "title": "Implements **External Web Resource** with **_id_ key** as a body of the Annotation [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more External Web Resources as Annotation body(ies). (Section 3.2.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/externalWebResourceDetected" }, + { "not": { "items": { "not": { "$ref": "bodyTarget.json#/definitions/externalWebResourceDetected" } } } }, + { "$ref": "bodyTarget.json#/definitions/sourceEwrDetected" }, + { "not": { "items": { "not": { "$ref": "bodyTarget.json#/definitions/sourceEwrDetected" } } } }, + { "$ref": "bodyTarget.json#/definitions/itemEwrDetected" }, + { "not": { "items": { "not": { "$ref": "bodyTarget.json#/definitions/itemEwrDetected" } } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyFormat.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyFormat.json new file mode 100644 index 00000000000..c7fc143053d --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyFormat.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-bodyFormat.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a body may include format key with one or more values that are each a media type.", + "title": "Implements **body _format_ key** with one or more values each of which is a **media type** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more bodies, one or more of which include format key with one or more values that are each a media type. (Section 3.2.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/formatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceFormatPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/formatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceFormatPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyLanguage.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyLanguage.json new file mode 100644 index 00000000000..e117bf6a489 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyLanguage.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-bodyLanguage.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a body may include language key with one or more values that are each a language code.", + "title": "Implements **body _language_ key** with one or more values each of which is a **language code** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more bodies, one or more of which include language key with one or more values that are each a language code. (Section 3.2.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/languagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceLanguagePropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/languagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceLanguagePropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyProcessingLanguage.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyProcessingLanguage.json new file mode 100644 index 00000000000..41d52466ac6 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyProcessingLanguage.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-bodyProcessingLanguage.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Body may include processingLanguage key with a single value that is a language code.", + "title": "Implements **body _processingLanguage_ key** with a **single value** that is a **language code** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more Bodies, one or more of which include single processingLanguage key with a language code as value. (Section 3.2.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/processingLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemProcessingLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceProcessingLanguagePropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/processingLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemProcessingLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceProcessingLanguagePropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodySingleFormat.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodySingleFormat.json new file mode 100644 index 00000000000..c524ee58e50 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodySingleFormat.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-bodySingleFormat.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Body should include format key with a single value that is a media type.", + "title": "Implements **body _format_ key** with a **single value** that is a **media type** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more bodies, one or more of which include single format key with a media type as value. (Section 3.2.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/singleFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemSingleFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceSingleFormatPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/singleFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemSingleFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceSingleFormatPropertyFound" } + ] + } + } + } + } + ] + } + }, + "required": ["body"] +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodySingleLanguage.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodySingleLanguage.json new file mode 100644 index 00000000000..6606e1f82af --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodySingleLanguage.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-bodySingleLanguage.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Body should include language key with a single value that is a language code.", + "title": "Implements **body _language_ key** with a **single value** that is a **language code** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or moreBodies, one or more of which include single language key with a language code as value. (Section 3.2.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/singleLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemSingleLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceSingleLanguagePropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/singleLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemSingleLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceSingleLanguagePropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyTextDirection.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyTextDirection.json new file mode 100644 index 00000000000..ab8e831b4a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyTextDirection.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-bodyTextDirection.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Body may include textDirection key with a single value that is one of ltr, rtl, or auto.", + "title": "Implements **body _textDirection_ key** with a **single value** that is is **one of ltr, rtl, or auto** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more Bodies, one or more of which include single textDirection key with one of ltr, rtl, or auto as value. (Section 3.2.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/textDirectionPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemTextDirectionPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceTextDirectionPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/textDirectionPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemTextDirectionPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceTextDirectionPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyTextDirectionValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyTextDirectionValidated.json new file mode 100644 index 00000000000..26ff83635ca --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-bodyTextDirectionValidated.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-bodyTextDirectionValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A body or body/source has multiple textDirection key values for a body or source, or a single textDirection key with a value that is not one of ltr, rtl, auto.", + "title": "If present as a body or body/source property, the **_textDirection_ key** has a **single value** which is **one of 'ltr', 'rtl', 'auto'** - [model 3.2.1](https://www.w3.org/TR/annotation-model/#external-web-resources)", + "description": "True when no body-level or body/source-level (SR body) textDirection key present or when all textDirection keys have a single value that is one of ltr, rtl, auto (Section 3.2.1)", + "type": "object", + "properties": + { + "body": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "bodyTarget.json#/definitions/textDirectionValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithTextDirection" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "bodyTarget.json#/definitions/textDirectionValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithTextDirection" } + ] + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targEWR.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targEWR.json new file mode 100644 index 00000000000..4571f0ec8f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targEWR.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-targEWR.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "An External Web Resource target may be used as an Annotation Target.", + "title": "Implements **External Web Resource** with **_id_ key** as a target of the Annotation [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more External Web Resources as Annotation target(ies). (Section 3.2.1)", + "type": "object", + "properties": + { + "target": + { + "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/externalWebResourceDetected" }, + { "not": { "items": { "not": { "$ref": "bodyTarget.json#/definitions/externalWebResourceDetected" } } } }, + { "$ref": "bodyTarget.json#/definitions/sourceEwrDetected" }, + { "not": { "items": { "not": { "$ref": "bodyTarget.json#/definitions/sourceEwrDetected" } } } }, + { "$ref": "bodyTarget.json#/definitions/itemEwrDetected" }, + { "not": { "items": { "not": { "$ref": "bodyTarget.json#/definitions/itemEwrDetected" } } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targFormat.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targFormat.json new file mode 100644 index 00000000000..134a8956ec0 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targFormat.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-targFormat.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a target may include format key with one or more values that are each a media type.", + "title": "Implements **target _format_ key** with one or more values each of which is a **media type** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more targets, one or more of which include format key with one or more values that are each a media type. (Section 3.2.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/formatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceFormatPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/formatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceFormatPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targLanguage.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targLanguage.json new file mode 100644 index 00000000000..b8f2a94b2ce --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targLanguage.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-targLanguage.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a target may include language key with one or more values that are each a language code.", + "title": "Implements **target _language_ key** with one or more values each of which is a **language code** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more targets, one or more of which include language key with one or more values that are each a language code. (Section 3.2.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/languagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceLanguagePropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/languagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceLanguagePropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targProcessingLanguage.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targProcessingLanguage.json new file mode 100644 index 00000000000..1ddcf71a0d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targProcessingLanguage.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-targProcessingLanguage.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Target may include processingLanguage key with a single value that is a language code.", + "title": "Implements **target _processingLanguage_ key** with a **single value** that is a **language code** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more Targets, one or more of which include single processingLanguage key with a language code as value. (Section 3.2.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/processingLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemProcessingLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceProcessingLanguagePropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/processingLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemProcessingLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceProcessingLanguagePropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targSingleFormat.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targSingleFormat.json new file mode 100644 index 00000000000..b58038206af --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targSingleFormat.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-targSingleFormat.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Target should include format key with a single value that is a media type.", + "title": "Implements **target _format_ key** with a **single value** that is a **media type** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more targets, one or more of which include single format key with a media type as value. (Section 3.2.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/singleFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemSingleFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceSingleFormatPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/singleFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemSingleFormatPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceSingleFormatPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targSingleLanguage.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targSingleLanguage.json new file mode 100644 index 00000000000..6bb9cf6cc1e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targSingleLanguage.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-targSingleLanguage.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Target should include language key with a single value that is a language code.", + "title": "Implements **target _language_ key** with a **single value** that is a **language code** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or moreTargets, one or more of which include single language key with a language code as value. (Section 3.2.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/singleLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemSingleLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceSingleLanguagePropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/singleLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemSingleLanguagePropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceSingleLanguagePropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targTextDirection.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targTextDirection.json new file mode 100644 index 00000000000..d9d0d0417cf --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targTextDirection.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-targTextDirection.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Target may include textDirection key with a single value that is one of ltr, rtl, or auto.", + "title": "Implements **target _textDirection_ key** with a **single value** that is is **one of ltr, rtl, or auto** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more Targets, one or more of which include single textDirection key with one of ltr, rtl, or auto as value. (Section 3.2.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/textDirectionPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemTextDirectionPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceTextDirectionPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/textDirectionPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/itemTextDirectionPropertyFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceTextDirectionPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targTextDirectionValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targTextDirectionValidated.json new file mode 100644 index 00000000000..6f12b3ed550 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.1-targTextDirectionValidated.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-targTextDirectionValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A target or target/source has multiple textDirection key values for a target or source, or a single textDirection key with a value that is not one of ltr, rtl, auto.", + "title": "If present as a target or target/source property, the **_textDirection_ key** has a **single value** which is **one of 'ltr', 'rtl', 'auto'** - [model 3.2.1](https://www.w3.org/TR/annotation-model/#external-web-resources)", + "description": "True when no target-level or target/source-level (SR target) textDirection key present or when all textDirection keys have a single value that is one of ltr, rtl, auto (Section 3.2.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "bodyTarget.json#/definitions/textDirectionValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithTextDirection" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "bodyTarget.json#/definitions/textDirectionValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithTextDirection" } + ] + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.2-bodyType.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.2-bodyType.json new file mode 100644 index 00000000000..25b0e48ab72 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.2-bodyType.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.2-bodyType.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Body may include type key with one or more values that are each drawn from the model's list of resource classes.", + "title": "Implements **body _type_ key** with one or more values each of which is drawn from the **model's list of resource classes** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more Bodies, one or more of which include type key with one or more values that are each drawn from the model's list of resource classes. (Section 3.2.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/recognizedTypeFound" }, + { "$ref": "bodyTarget.json#/definitions/itemRecognizedTypeFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceFormatPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/recognizedTypeFound" }, + { "$ref": "bodyTarget.json#/definitions/itemRecognizedTypeFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceRecognizedTypeFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.2-targType.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.2-targType.json new file mode 100644 index 00000000000..fa9e0a743d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.2-targType.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.2-targType.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Target may include type key with one or more values that are each drawn from the model's list of resource classes.", + "title": "Implements **target _type_ key** with one or more values each of which is drawn from the **model's list of resource classes** [model 3.2.1](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more Targets, one or more of which include type key with one or more values that are each drawn from the model's list of resource classes. (Section 3.2.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/recognizedTypeFound" }, + { "$ref": "bodyTarget.json#/definitions/itemRecognizedTypeFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceFormatPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/recognizedTypeFound" }, + { "$ref": "bodyTarget.json#/definitions/itemRecognizedTypeFound" }, + { "$ref": "bodyTarget.json#/definitions/sourceRecognizedTypeFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyChoiceSetNoValue.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyChoiceSetNoValue.json new file mode 100644 index 00000000000..95c0aafa93e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyChoiceSetNoValue.json @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.4-bodyChoiceSetNoValue.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "A Choice or Set body cannot include a value key. value key is only valid with Embedded Textual Bodies.", + "title": "If a **Choice or Set** is a body, it does NOT have a **_value_ key** - [model 3.2.4](https://www.w3.org/TR/annotation-model/#embedded-textual-body)", + "description": "True when no Choice or Set bodies or when none of the Choice or Set bodies include the value key. (Section 3.3.4)", + "type": "object", + "properties": + { + "body": + { + "allOf": [ + { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithValue" } }, + { "items": { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithValue" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETB.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETB.json new file mode 100644 index 00000000000..bc40dcf5a0c --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETB.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.4-bodyETB.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "An Embedded Textual Body may be used as an Annotation Body.", + "title": "Implements **Embedded Textual Body** with **_value_ key** as a body of the Annotation [model 3.2.4](https://www.w3.org/TR/annotation-model/#embedded-textual-body)", + "description": "True when Annotation includes one or more Embedded Textual Bodies as Annotation body(ies). (Section 3.2.4)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "anyOf": [ + { "$ref": "bodyTarget.json#/definitions/textualBodyFound" }, + { "not": { "items": { "not": { "$ref": "bodyTarget.json#/definitions/textualBodyFound" } } } }, + { "$ref": "bodyTarget.json#/definitions/itemETBDetected" }, + { "not": { "items": { "not": { "$ref": "bodyTarget.json#/definitions/itemETBDetected" } } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETBTypeText.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETBTypeText.json new file mode 100644 index 00000000000..cddadf0c257 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETBTypeText.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.4-bodyETBTypeText.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of an Embedded Textual Body should include type key which includes the value of Text.", + "title": "Implements **Embedded Textual Body _type_ key** which includes a value of **Text** [model 3.2.4](https://www.w3.org/TR/annotation-model/#embedded-textual-body)", + "description": "True when Annotation includes one or more Embedded Textual Bodies (incl. as part of body Choice or Set), one or more of which includes a type key which includes a value of Text. (Section 3.2.4)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": + [ + { "$ref": "bodyTarget.json#/definitions/embeddedTextTypeIncludesText" }, + { "$ref": "bodyTarget.json#/definitions/itemEmbeddedTextTypeIncludesText" } + ] + }, + { "not": + { + "items": + { "not": + { "anyOf": + [ + { "$ref": "bodyTarget.json#/definitions/embeddedTextTypeIncludesText" }, + { "$ref": "bodyTarget.json#/definitions/itemEmbeddedTextTypeIncludesText" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETBTypeTextualBody.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETBTypeTextualBody.json new file mode 100644 index 00000000000..9ccc041240b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-bodyETBTypeTextualBody.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.4-bodyETBTypeTextualBody.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of an Embedded Textual Body should include type key which includes the value of TextualBody.", + "title": "Implements **Embedded Textual Body _type_ key** which includes a value of **TextualBody** [model 3.2.4](https://www.w3.org/TR/annotation-model/#embedded-textual-body)", + "description": "True when Annotation includes one or more Embedded Textual Bodies (incl. as part of body Choice or Set), one or more of which includes a type key which includes a value of TextualBody. (Section 3.2.4)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": + [ + { "$ref": "bodyTarget.json#/definitions/embeddedTextTypeIncludesTextualBody" }, + { "$ref": "bodyTarget.json#/definitions/itemEmbeddedTextTypeIncludesTextualBody" } + ] + }, + { "not": + { + "items": + { "not": + { "anyOf": + [ + { "$ref": "bodyTarget.json#/definitions/embeddedTextTypeIncludesTextualBody" }, + { "$ref": "bodyTarget.json#/definitions/itemEmbeddedTextTypeIncludesTextualBody" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-targChoiceSetNoValue.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-targChoiceSetNoValue.json new file mode 100644 index 00000000000..7525d5bb5d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-targChoiceSetNoValue.json @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.4-targChoiceSetNoValue.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "A Choice or Set target cannot include a value key. value key is only valid with Embedded Textual Bodies.", + "title": "If a **Choice or Set** is a target, it does NOT have a **_value_ key** - [model 3.2.4](https://www.w3.org/TR/annotation-model/#embedded-textual-targ)", + "description": "True when no Choice or Set targets or when none of the Choice or Set targets include the value key. (Section 3.3.4)", + "type": "object", + "properties": + { + "target": + { + "allOf": [ + { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithValue" } }, + { "items": { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithValue" } } } + ] + } + } +} \ No newline at end of file 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 new file mode 100644 index 00000000000..03c6ab210c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.4-targNoTypeTextualBody.json @@ -0,0 +1,32 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.4-targNoTypeTextualBody.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "The description of a target resource MUST NOT include type key which includes the value of TextualBody.", + "title": "Neither **target** Resources nor target Choice or Set items have a **_type_ key** which includes a value of **TextualBody** [model 3.2.4](https://www.w3.org/TR/annotation-model/#embedded-textual-body)", + "description": "True when none of target(s), target source(s), target item(s) have a type key which includes a value of TextualBody. (Section 3.2.4)", + "type": "object", + "properties": + { + "target": + { + "allOf": [ + { "not": { "$ref": "bodyTarget.json#/definitions/embeddedTextTypeIncludesTextualBody" } }, + { "not": { "$ref": "bodyTarget.json#/definitions/itemEmbeddedTextTypeIncludesTextualBody" } }, + { + "items": + { "not": + { "anyOf": + [ + { "$ref": "bodyTarget.json#/definitions/embeddedTextTypeIncludesTextualBody" }, + { "$ref": "bodyTarget.json#/definitions/itemEmbeddedTextTypeIncludesTextualBody" } + ] + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyChoice.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyChoice.json new file mode 100644 index 00000000000..dcbc7f22af2 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyChoice.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.7-bodyChoice.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Choice resource may be used as an Annotation Body (not found).", + "title": "Implements **Choice** with **_type_ and _items_ keys** as a body of the Annotation [model 3.2.7](https://www.w3.org/TR/annotation-model/#choice-of-bodies-and-targets)", + "description": "True when Annotation includes one or more Choice resources as Annotation body(ies). (Section 3.2.7)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/choiceDetected" }, + { "not": + { + "items": + { "not": + { "$ref": "choiceSet.json#/definitions/choiceDetected" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyChoiceSet.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyChoiceSet.json new file mode 100644 index 00000000000..5db068a192d --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyChoiceSet.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.7-bodyChoiceSet.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Body may be a Choice or Set.", + "title": "Implements **Choice or Set** with type and items key as a body - [model 3.2.7](https://www.w3.org/TR/annotation-model/#choice-of-bodies-and-targets)", + "description": "True when a Choice or Set is used as a body. (Section 3.2.7)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/choiceOrSetDetected" }, + { "not": + { + "items": + { "not": + { "$ref": "choiceSet.json#/definitions/choiceOrSetDetected" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyEWRNoItems.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyEWRNoItems.json new file mode 100644 index 00000000000..f8d79f0f58d --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyEWRNoItems.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.7-bodyEWRNoItems.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "The description of an External Web Resource body cannot include an items key. items key is only valid with Choice or Set.", + "title": "If an **External Web Resource** is a body, it does NOT have an **_items_ key** - [model 3.2.7](https://www.w3.org/TR/annotation-model/#choice-of-bodies-and-targets)", + "description": "True when no External Web Resource bodies or when none of the External Web Recource bodies include the items key. (Section 3.2.7)", + "type": "object", + "properties": + { + "body": + { + "allOf": [ + { "not": { "$ref": "bodyTarget.json#/definitions/ewrWithItems" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/ewrWithItems" } } }, + { "not": { "$ref": "bodyTarget.json#/definitions/sourceEwrWithItems" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/sourceEwrWithItems" } } }, + { "not": { "$ref": "bodyTarget.json#/definitions/itemEwrWithItems" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/itemEwrWithItems" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyEmbeddedTextualNoItems.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyEmbeddedTextualNoItems.json new file mode 100644 index 00000000000..30f88aa5361 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodyEmbeddedTextualNoItems.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.7-bodyEmbeddedTextualNoItems.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "An Embedded Textual body cannot include an items key. items key is only valid with Choice or Set.", + "title": "If an **Embedded Textual Body** is a body, it does NOT have an **_items_ key** - [model 3.2.7](https://www.w3.org/TR/annotation-model/#choice-of-bodies-and-targets)", + "description": "True when no Embedded Textual bodies or when none of the Embedded Textual bodies include the items key. (Section 4)", + "type": "object", + "properties": + { + "body": + { + "allOf": [ + { "not": { "$ref": "bodyTarget.json#/definitions/embeddedTextualBodyWithItems" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/embeddedTextualBodyWithItems" } } }, + { "not": { "$ref": "bodyTarget.json#/definitions/itemETBWithItems" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/itemETBWithItems" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodySpecificResourceNoItems.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodySpecificResourceNoItems.json new file mode 100644 index 00000000000..188c93b08f3 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-bodySpecificResourceNoItems.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.7-bodySpecificResourceNoItems.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "An Specific Resource body cannot include an items key. items key is only valid with Choice or Set.", + "title": "If a **Specific Resource** is a body, it does NOT have an **_items_ key** - [model 3.2.7](https://www.w3.org/TR/annotation-model/#choice-of-bodies-and-targets)", + "description": "True when no Specific Resource bodies or when none of the Specific Resource bodies include the items key. (Section 4)", + "type": "object", + "properties": + { + "body": + { + "allOf": [ + { "not": { "$ref": "specificResource.json#/definitions/specificResourceWithItems" } }, + { "items": { "not": { "$ref": "specificResource.json#/definitions/specificResourceWithItems" } } }, + { "not": { "$ref": "specificResource.json#/definitions/itemSRWithItems" } }, + { "items": { "not": { "$ref": "specificResource.json#/definitions/itemSRWithItems" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targChoice.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targChoice.json new file mode 100644 index 00000000000..38c2f5db08b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targChoice.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.7-targChoice.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Choice resource may be used as an Annotation Target (not found).", + "title": "Implements **Choice** with **_type_ and _items_ keys** as a target of the Annotation [model 3.2.7](https://www.w3.org/TR/annotation-model/#choice-of-targets-and-targets)", + "description": "True when Annotation includes one or more Choice resources as Annotation target(ies). (Section 3.2.7)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/choiceDetected" }, + { "not": + { + "items": + { "not": + { "$ref": "choiceSet.json#/definitions/choiceDetected" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targChoiceSet.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targChoiceSet.json new file mode 100644 index 00000000000..aa121337c11 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targChoiceSet.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.7-targChoiceSet.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Target may be a Choice or Set.", + "title": "Implements **Choice or Set** with type and items key as a target - [model 3.2.7](https://www.w3.org/TR/annotation-model/#choice-of-bodies-and-targets)", + "description": "True when a Choice or Set is used as a target. (Section 3.2.7)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/choiceOrSetDetected" }, + { "not": + { + "items": + { "not": + { "$ref": "choiceSet.json#/definitions/choiceOrSetDetected" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targEWRNoItems.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targEWRNoItems.json new file mode 100644 index 00000000000..c16696e049a --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targEWRNoItems.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.7-targEWRNoItems.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "The description of an External Web Resource target cannot include an items key. items key is only valid with Choice or Set.", + "title": "If an **External Web Resource** is a target, it does NOT have an **_items_ key** - [model 3.2.7](https://www.w3.org/TR/annotation-model/#choice-of-targets-and-targets)", + "description": "True when no External Web Resource targets (incl. as source or item) or when none of the External Web Recource targets include the items key. (Section 3.2.7)", + "type": "object", + "properties": + { + "target": + { + "allOf": [ + { "not": { "$ref": "bodyTarget.json#/definitions/ewrWithItems" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/ewrWithItems" } } }, + { "not": { "$ref": "bodyTarget.json#/definitions/sourceEwrWithItems" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/sourceEwrWithItems" } } }, + { "not": { "$ref": "bodyTarget.json#/definitions/itemEwrWithItems" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/itemEwrWithItems" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targSpecificResourceNoItems.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targSpecificResourceNoItems.json new file mode 100644 index 00000000000..c9ef6c8df11 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.7-targSpecificResourceNoItems.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.7-targSpecificResourceNoItems.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "An Specific Resource target cannot include an items key. items key is only valid with Choice or Set.", + "title": "If a **Specific Resource Target** is a target, it does NOT have an **_items_ key** - [model 3.2.7](https://www.w3.org/TR/annotation-model/#choice-of-targets-and-targets)", + "description": "True when no Specific Resource targets or when none of the Specific Resource targets include the items key. (Section 4)", + "type": "object", + "properties": + { + "target": + { + "allOf": [ + { "not": { "$ref": "specificResource.json#/definitions/specificResourceWithItems" } }, + { "items": { "not": { "$ref": "specificResource.json#/definitions/specificResourceWithItems" } } }, + { "not": { "$ref": "specificResource.json#/definitions/itemSRWithItems" } }, + { "items": { "not": { "$ref": "specificResource.json#/definitions/itemSRWithItems" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyComposite.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyComposite.json new file mode 100644 index 00000000000..f0a6509d329 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyComposite.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.8-bodyComposite.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Composite resource may be used as an Annotation Body (not found).", + "title": "Implements **Composite** with **_type_ and _items_ keys** as a body of the Annotation [model 3.2.8](https://www.w3.org/TR/annotation-model/#sets-of-bodies-and-targets)", + "description": "True when Annotation includes one or more Composite resources as Annotation body(ies). (Section 3.2.8)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/compositeDetected" }, + { "not": + { + "items": + { "not": + { "$ref": "choiceSet.json#/definitions/compositeDetected" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyIndependents.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyIndependents.json new file mode 100644 index 00000000000..c6a78db7d9f --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyIndependents.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.8-bodyIndependents.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Independents resource may be used as an Annotation Body (not found).", + "title": "Implements **Independents** with **_type_ and _items_ keys** as a body of the Annotation [model 3.2.8](https://www.w3.org/TR/annotation-model/#sets-of-bodies-and-targets)", + "description": "True when Annotation includes one or more Independents resources as Annotation body(ies). (Section 3.2.8)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/independentsDetected" }, + { "not": + { + "items": + { "not": + { "$ref": "choiceSet.json#/definitions/independentsDetected" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyList.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyList.json new file mode 100644 index 00000000000..aa260b462e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-bodyList.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.8-bodyList.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A List resource may be used as an Annotation Body (not found).", + "title": "Implements **List** with **_type_ and _items_ keys** as a body of the Annotation [model 3.2.8](https://www.w3.org/TR/annotation-model/#sets-of-bodies-and-targets)", + "description": "True when Annotation includes one or more List resources as Annotation body(ies). (Section 3.2.8)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/listDetected" }, + { "not": + { + "items": + { "not": + { "$ref": "choiceSet.json#/definitions/listDetected" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targComposite.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targComposite.json new file mode 100644 index 00000000000..031beec90d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targComposite.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.8-targComposite.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Composite resource may be used as an Annotation Target (not found).", + "title": "Implements **Composite** with **_type_ and _items_ keys** as a target of the Annotation [model 3.2.8](https://www.w3.org/TR/annotation-model/#sets-of-targets-and-targets)", + "description": "True when Annotation includes one or more Composite resources as Annotation target(ies). (Section 3.2.8)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/compositeDetected" }, + { "not": + { + "items": + { "not": + { "$ref": "choiceSet.json#/definitions/compositeDetected" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targIndependents.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targIndependents.json new file mode 100644 index 00000000000..d9f50346fb5 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targIndependents.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.8-targIndependents.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Independents resource may be used as an Annotation Target (not found).", + "title": "Implements **Independents** with **_type_ and _items_ keys** as a target of the Annotation [model 3.2.8](https://www.w3.org/TR/annotation-model/#sets-of-targets-and-targets)", + "description": "True when Annotation includes one or more Independents resources as Annotation target(ies). (Section 3.2.8)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/independentsDetected" }, + { "not": + { + "items": + { "not": + { "$ref": "choiceSet.json#/definitions/independentsDetected" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targList.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targList.json new file mode 100644 index 00000000000..7ab726b6cf8 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.2.8-targList.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.8-targList.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A List resource may be used as an Annotation Target (not found).", + "title": "Implements **List** with **_type_ and _items_ keys** as a target of the Annotation [model 3.2.8](https://www.w3.org/TR/annotation-model/#sets-of-targets-and-targets)", + "description": "True when Annotation includes one or more List resources as Annotation target(ies). (Section 3.2.8)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/listDetected" }, + { "not": + { + "items": + { "not": + { "$ref": "choiceSet.json#/definitions/listDetected" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreated.json new file mode 100644 index 00000000000..daee4657902 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreated.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-bodyCreated.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a body should include created key with a single value that is of format date-time.", + "title": "Implements **body _created_ key** with 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 Annotation includes one or more bodies, one or more of which include created key with a single value of date-time format. (Section 3.3.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/createdPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatedPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/createdPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatedPropertyFound" } + ] + } + } + } + } + + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreatedValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreatedValidated.json new file mode 100644 index 00000000000..a47db94aa02 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreatedValidated.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-bodyCreatedValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A body or body/source has multiple created key values for a body or source, or a single created key value that is not of format date-time.", + "title": "If present all body-level or body/source-level **_created_ keys** have 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 body-level or body/source-level (SR body) created key present or when all created keys have a single value that is of format date-time (Section 3.3.1)", + "type": "object", + "properties": + { + "body": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/createdValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithCreated" } + ] + }, + { + "type": "array", + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/createdValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithCreated" } + ] + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreator.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreator.json new file mode 100644 index 00000000000..4c0e49affe3 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyCreator.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-bodyCreator.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a body may include creator key with one or more values.", + "title": "Implements **body _creator_ key** with one or more values - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when Annotation includes one or more bodies, one or more of which include creator key with one or more values. (Section 3.3.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyModified.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyModified.json new file mode 100644 index 00000000000..a0a59ac4fd8 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyModified.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-bodyModified.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a body may include modified key with a single value that is of format date-time.", + "title": "Implements **body _modified_ key** with 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 Annotation includes one or more bodies, one or more of which include modified key with a single value of format date-time. (Section 3.3.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/modifiedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemModifiedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceModifiedPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/modifiedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemModifiedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceModifiedPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyModifiedValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyModifiedValidated.json new file mode 100644 index 00000000000..e632ee5406b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodyModifiedValidated.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-bodyModifiedValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A body or body/source has multiple modified key values for a body or source, or a single modified key value that is not of format date-time.", + "title": "If present all body-level or body/source-level **_modified_ keys** have 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 body-level or body/source-level (SR body) modified key present or when all modified keys have a single value that is of format date-time (Section 3.3.1)", + "type": "object", + "properties": + { + "body": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithModified" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithModified" } + ] + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodySingleCreator.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodySingleCreator.json new file mode 100644 index 00000000000..d037a189165 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-bodySingleCreator.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-bodySingleCreator.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a body should include creator key with a single value.", + "title": "Implements **body _creator_ key** with a **single value** [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when Annotation includes one or more bodies, one or more of which includes creator key with a single value. (Section 3.3.1)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/singleCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemSingleCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceSingleCreatorPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/singleCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemSingleCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceSingleCreatorPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreated.json new file mode 100644 index 00000000000..0db8559c7c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreated.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-targCreated.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a target should include created key with a single value that is of format date-time.", + "title": "Implements **target _created_ key** with 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 Annotation includes one or more targets, one or more of which include created key with a single value of date-time format. (Section 3.3.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/createdPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatedPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/createdPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatedPropertyFound" } + ] + } + } + } + } + + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreatedValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreatedValidated.json new file mode 100644 index 00000000000..504c1bfd8a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreatedValidated.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-targCreatedValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A target or target/source has multiple created key values for a target or source, or a single created key value that is not of format date-time.", + "title": "If present all target-level or target/source-level **_created_ keys** have 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 target-level or target/source-level (SR target) created key present or when all created keys have a single value that is of format date-time (Section 3.3.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/createdValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithCreated" } + ] + }, + { + "type": "array", + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/createdValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithCreated" } + ] + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreator.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreator.json new file mode 100644 index 00000000000..e1ee1b4764f --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targCreator.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-targCreator.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a target may include creator key with one or more values.", + "title": "Implements **target _creator_ key** with one or more values - [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when Annotation includes one or more targets, one or more of which include creator key with one or more values. (Section 3.3.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targModified.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targModified.json new file mode 100644 index 00000000000..4c3cf7b6896 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targModified.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-targModified.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a target may include modified key with a single value that is of format date-time.", + "title": "Implements **target _modified_ key** with 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 Annotation includes one or more targets, one or more of which include modified key with a single value of format date-time. (Section 3.3.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/modifiedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemModifiedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceModifiedPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/modifiedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemModifiedPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceModifiedPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targModifiedValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targModifiedValidated.json new file mode 100644 index 00000000000..7e3ec735e0e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targModifiedValidated.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-targModifiedValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A target or target/source has multiple modified key values for a target or source, or a single modified key value that is not of format date-time.", + "title": "If present all target-level or target/source-level **_modified_ keys** have 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 target-level or target/source-level (SR target) modified key present or when all modified keys have a single value that is of format date-time (Section 3.3.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithModified" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithModified" } + ] + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targSingleCreator.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targSingleCreator.json new file mode 100644 index 00000000000..5eb662ba9ca --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.1-targSingleCreator.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.1-targSingleCreator.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a target should include creator key with a single value.", + "title": "Implements **target _creator_ key** with a **single value** [model 3.3.1](https://www.w3.org/TR/annotation-model/#lifecycle-information)", + "description": "True when Annotation includes one or more targets, one or more of which includes creator key with a single value. (Section 3.3.1)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/singleCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemSingleCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceSingleCreatorPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/singleCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemSingleCreatorPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceSingleCreatorPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentEmailImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentEmailImplemented.json new file mode 100644 index 00000000000..d116346a0c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentEmailImplemented.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-bodyCreatorAgentEmailImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Email for Body Creator (Agent) not found. Agents may have one or more email values.", + "title": "Implements Body-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 Body Creator (Agent) is implemented (Section 3.3.2)", + "required": [ "body" ], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithEmailFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithEmailFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithEmailFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithEmailFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithEmailFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithEmailFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentEmail_sha1Implemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentEmail_sha1Implemented.json new file mode 100644 index 00000000000..eb4852ad5af --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentEmail_sha1Implemented.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-bodyCreatorAgentEmail_sha1Implemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Email_sha1 for Body Creator (Agent) not found. Agents may have one or more email_sha1 values.", + "title": "Implements Body-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 Body Creator (Agent) is implemented (Section 3.3.2)", + "required": [ "body" ], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithEmail_sha1Found" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithEmail_sha1Found" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithEmail_sha1Found" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithEmail_sha1Found" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithEmail_sha1Found" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithEmail_sha1Found" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentHomepageImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentHomepageImplemented.json new file mode 100644 index 00000000000..9c83d6d75d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentHomepageImplemented.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-bodyCreatorAgentHomepageImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Homepage for Body Creator (Agent) not found. Agents may have one or more homepage values.", + "title": "Implements Body-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 Body Creator (Agent) is implemented (Section 3.3.2)", + "required": [ "body" ], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithHomepageFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithHomepageFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithHomepageFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithHomepageFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithHomepageFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithHomepageFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentIdImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentIdImplemented.json new file mode 100644 index 00000000000..777a499ae21 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentIdImplemented.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-bodyCreatorAgentIdImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Id for Body Creator (Agent) not found or more than 1 found. Agents should have exactly one id of format uri.", + "title": "Implements Body-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 Body Creator (Agent) has exactly one id (Section 3.3.2)", + "required": [ "body" ], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithIdFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithIdFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithIdFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithIdFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithIdFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithIdFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentNameImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentNameImplemented.json new file mode 100644 index 00000000000..babb04d65b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentNameImplemented.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-bodyCreatorAgentNameImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Name for Body Creator (Agent) not found. Agents may have one or more name values.", + "title": "Implements Body-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 Body Creator (Agent) is implemented (Section 3.3.2)", + "required": [ "body" ], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithNameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithNameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithNameFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithNameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithNameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithNameFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentNicknameImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentNicknameImplemented.json new file mode 100644 index 00000000000..252ec088550 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentNicknameImplemented.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-bodyCreatorAgentNicknameImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Nickname for Body Creator (Agent) not found. Agents should have exactly one nickname value.", + "title": "Implements Body-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 Body Creator (Agent) is implemented (Section 3.3.2)", + "required": [ "body" ], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithSingularNicknameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithSingularNicknameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithSingularNicknameFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithSingularNicknameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithSingularNicknameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithSingularNicknameFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentSingleNameImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentSingleNameImplemented.json new file mode 100644 index 00000000000..ac0b0f9ad09 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentSingleNameImplemented.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-bodyCreatorAgentSingleNameImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Single name for Body Creator (Agent) not found. Agents should have exactly one name value.", + "title": "Implements Body-level creator (Agent) **_name_ 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 name for Body Creator (Agent) is implemented (Section 3.3.2)", + "required": [ "body" ], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithSingularNameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithSingularNameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithSingularNameFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithSingularNameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithSingularNameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithSingularNameFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentTypeImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentTypeImplemented.json new file mode 100644 index 00000000000..8392a3a6895 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-bodyCreatorAgentTypeImplemented.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-bodyCreatorAgentTypeImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Type (Person, Organization, Software) for Body Creator (Agent) not found. Agents should have one or more type values.", + "title": "Implements Body-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 Body Creator (Agent) is implemented (Section 3.3.2)", + "required": [ "body" ], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithTypeFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithTypeFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithTypeFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithTypeFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithTypeFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithTypeFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentEmailImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentEmailImplemented.json new file mode 100644 index 00000000000..133da131d82 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentEmailImplemented.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-targCreatorAgentEmailImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Email for Target Creator (Agent) not found. Agents may have one or more email values.", + "title": "Implements Target-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 Target Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithEmailFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithEmailFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithEmailFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithEmailFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithEmailFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithEmailFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentEmail_sha1Implemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentEmail_sha1Implemented.json new file mode 100644 index 00000000000..1c34b43e0f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentEmail_sha1Implemented.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-targCreatorAgentEmail_sha1Implemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Email_sha1 for Target Creator (Agent) not found. Agents may have one or more email_sha1 values.", + "title": "Implements Target-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 Target Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithEmail_sha1Found" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithEmail_sha1Found" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithEmail_sha1Found" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithEmail_sha1Found" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithEmail_sha1Found" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithEmail_sha1Found" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentHomepageImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentHomepageImplemented.json new file mode 100644 index 00000000000..bc79f1a5e36 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentHomepageImplemented.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-targCreatorAgentHomepageImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Homepage for Target Creator (Agent) not found. Agents may have one or more homepage values.", + "title": "Implements Target-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 Target Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithHomepageFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithHomepageFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithHomepageFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithHomepageFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithHomepageFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithHomepageFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentIdImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentIdImplemented.json new file mode 100644 index 00000000000..bed81643477 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentIdImplemented.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-targCreatorAgentIdImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Id for Target Creator (Agent) not found or more than 1 found. Agents should have exactly one id of format uri.", + "title": "Implements Target-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 Target Creator (Agent) has exactly one id (Section 3.3.2)", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithIdFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithIdFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithIdFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithIdFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithIdFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithIdFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentNameImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentNameImplemented.json new file mode 100644 index 00000000000..15c91f92e6d --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentNameImplemented.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-targCreatorAgentNameImplemented.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Name for Target Creator (Agent) not found. Agents may have one or more name values.", + "title": "Implements Target-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 Target Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithNameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithNameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithNameFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithNameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithNameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithNameFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentNicknameImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentNicknameImplemented.json new file mode 100644 index 00000000000..7c84087f4e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentNicknameImplemented.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-targCreatorAgentNicknameImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Nickname for Target Creator (Agent) not found. Agents should have exactly one nickname value.", + "title": "Implements Target-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 Target Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithSingularNicknameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithSingularNicknameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithSingularNicknameFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithSingularNicknameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithSingularNicknameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithSingularNicknameFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentSingleNameImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentSingleNameImplemented.json new file mode 100644 index 00000000000..7f5428f5480 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentSingleNameImplemented.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-targCreatorAgentSingleNameImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Single name for Target Creator (Agent) not found. Agents should have exactly one name value.", + "title": "Implements Target-level creator (Agent) **_name_ 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 name for Target Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithSingularNameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithSingularNameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithSingularNameFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithSingularNameFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithSingularNameFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithSingularNameFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentTypeImplemented.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentTypeImplemented.json new file mode 100644 index 00000000000..b9f6c8bae49 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.2-targCreatorAgentTypeImplemented.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.2-targCreatorAgentTypeImplemented.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "Type (Person, Organization, Software) for Target Creator (Agent) not found. Agents should have one or more type values.", + "title": "Implements Target-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 Target Creator (Agent) is implemented (Section 3.3.2)", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithTypeFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithTypeFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithTypeFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/creatorAgentWithTypeFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCreatorAgentWithTypeFound" }, + { "$ref": "otherProperties.json#/definitions/itemCreatorAgentWithTypeFound" } + ] + } + } + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.3-bodyAudience.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.3-bodyAudience.json new file mode 100644 index 00000000000..8572c2257f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.3-bodyAudience.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.3-bodyAudience.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a body may include audience key which has one or more values with each audience instance described using schema.org/Audience classes and properties.", + "title": "Implements **body _audience_ key** which has one or more values with each audience instance described using **[schema.org/Audience](http://schema.org/Audience) classes and properties** - [model 3.3.3](https://www.w3.org/TR/annotation-model/#intended-audience)", + "description": "True when Annotation includes one or more bodies, one or more of which include audience key which has one or more values with each audience instance described using schema.org/Audience classes and properties.. (Section 3.3.3)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/audiencePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemAudiencePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceAudiencePropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/audiencePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemAudiencePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceAudiencePropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.3-targAudience.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.3-targAudience.json new file mode 100644 index 00000000000..df84e2b4203 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.3-targAudience.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.3-targAudience.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a target may include audience key which has one or more values with each audience instance described using schema.org/Audience classes and properties.", + "title": "Implements **target _audience_ key** which has one or more values with each audience instance described using **[schema.org/Audience](http://schema.org/Audience) classes and properties** - [model 3.3.3](https://www.w3.org/TR/annotation-model/#intended-audience)", + "description": "True when Annotation includes one or more targets, one or more of which include audience key which has one or more values with each audience instance described using schema.org/Audience classes and properties.. (Section 3.3.3)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/audiencePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemAudiencePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceAudiencePropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/audiencePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemAudiencePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceAudiencePropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.4-bodyAccessibility.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.4-bodyAccessibility.json new file mode 100644 index 00000000000..3d4d42cd9d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.4-bodyAccessibility.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.4-bodyAccessibility.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Body may include accessibility key which has one or more values.", + "title": "Implements **body _accessibility_ key** which has one or more values - [model 3.3.4](#https://www.w3.org/TR/annotation-model/#accessibility-of-content)", + "description": "True when Annotation includes one or more Bodies, one or more of which include accessibility key which has one or more values. (Section 3.3.4)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/accessibilityPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemAccessibilityPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceAccessibilityPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/accessibilityPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemAccessibilityPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceAccessibilityPropertyFound" } + ] + } + } + } + } + + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.4-targAccessibility.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.4-targAccessibility.json new file mode 100644 index 00000000000..4f04e3d1d3c --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.4-targAccessibility.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.4-targAccessibility.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Target may include accessibility key which has one or more values.", + "title": "Implements **target _accessibility_ key** which has one or more values - [model 3.3.4](#https://www.w3.org/TR/annotation-model/#accessibility-of-content)", + "description": "True when Annotation includes one or more Targets, one or more of which include accessibility key which has one or more values. (Section 3.3.4)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/accessibilityPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemAccessibilityPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceAccessibilityPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/accessibilityPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemAccessibilityPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceAccessibilityPropertyFound" } + ] + } + } + } + } + + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyChoiceSetNoPurpose.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyChoiceSetNoPurpose.json new file mode 100644 index 00000000000..bb2a56b5359 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyChoiceSetNoPurpose.json @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.5-bodyChoiceSetNoPurpose.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "A Choice or Set body cannot include an purpose key. purpose key is only valid with Specific Resources and Embedded Textual Bodies.", + "title": "If a **Choice or Set** is a body, it does NOT have a **_purpose_ key** - [model 3.3.5](https://www.w3.org/TR/annotation-model/#motivation-and-purpose)", + "description": "True when no Choice or Set bodies or when none of the Choice or Set bodies include the purpose key. (Section 3.3.5)", + "type": "object", + "properties": + { + "body": + { + "allOf": [ + { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithPurpose" } }, + { "items": { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithPurpose" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyEWRNoPurpose.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyEWRNoPurpose.json new file mode 100644 index 00000000000..5e5fc0e0d6f --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyEWRNoPurpose.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.5-bodyEWRNoPurpose.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "The description of an External Web Resource body cannot include an purpose key. purpose key is only valid with Specific Resources and Embedded Textual Bodies.", + "title": "If an **External Web Resource** is a body, it does NOT have an **_purpose_ key** - [model 3.3.5](https://www.w3.org/TR/annotation-model/#motivation-and-purpose)", + "description": "True when no External Web Resource bodies or when none of the External Web Recource bodies include the purpose key. (Section 3.3.5)", + "type": "object", + "properties": + { + "body": + { + "allOf": [ + { "not": { "$ref": "bodyTarget.json#/definitions/ewrWithPurpose" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/ewrWithPurpose" } } }, + { "not": { "$ref": "bodyTarget.json#/definitions/sourceEwrWithPurpose" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/sourceEwrWithPurpose" } } }, + { "not": { "$ref": "bodyTarget.json#/definitions/itemEwrWithPurpose" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/itemEwrWithPurpose" } } } + ] } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyPurpose.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyPurpose.json new file mode 100644 index 00000000000..eb62c492c4e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-bodyPurpose.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.5-bodyPurpose.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Body may include purpose key with one or more values that are each drawn from model's list of Motivations.", + "title": "Implements **body _purpose_ key** with one or more values are each drawn from **model's list of Motivations** [model 3.3.5](https://www.w3.org/TR/annotation-model/#motivation-and-purpose)", + "description": "True when Annotation includes one or more Bodies, one or more of which include purpose key with one or more values that are each drawn from model's list of Motivations. (Section 3.3.5)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/purposePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemPurposePropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/purposePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemPurposePropertyFound" } + ] + } + } + } + } + + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targChoiceSetNoPurpose.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targChoiceSetNoPurpose.json new file mode 100644 index 00000000000..f74e9b8412f --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targChoiceSetNoPurpose.json @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.5-targChoiceSetNoPurpose.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "A Choice or Set target cannot include an purpose key. purpose key is only valid with Specific Resources and Embedded Textual Bodies.", + "title": "If a **Choice or Set** is a target, it does NOT have a **_purpose_ key** - [model 3.3.5](https://www.w3.org/TR/annotation-model/#motivation-and-purpose)", + "description": "True when no Choice or Set targets or when none of the Choice or Set targets include the purpose key. (Section 3.3.5)", + "type": "object", + "properties": + { + "target": + { + "allOf": [ + { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithPurpose" } }, + { "items": { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithPurpose" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targEWRNoPurpose.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targEWRNoPurpose.json new file mode 100644 index 00000000000..3e2e2e5e930 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targEWRNoPurpose.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.5-targEWRNoPurpose.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "The description of an External Web Resource target cannot include an purpose key. purpose key is only valid with Specific Resources and Embedded Textual Bodies.", + "title": "If an **External Web Resource** is a target, it does NOT have an **_purpose_ key** - [model 3.3.5](https://www.w3.org/TR/annotation-model/#motivation-and-purpose)", + "description": "True when no External Web Resource targets or when none of the External Web Recource targets include the purpose key. (Section 3.3.5)", + "type": "object", + "properties": + { + "target": + { + "allOf": [ + { "not": { "$ref": "bodyTarget.json#/definitions/ewrWithPurpose" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/ewrWithPurpose" } } }, + { "not": { "$ref": "bodyTarget.json#/definitions/sourceEwrWithPurpose" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/sourceEwrWithPurpose" } } }, + { "not": { "$ref": "bodyTarget.json#/definitions/itemEwrWithPurpose" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/itemEwrWithPurpose" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targPurpose.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targPurpose.json new file mode 100644 index 00000000000..b3894864e27 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.5-targPurpose.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.5-targPurpose.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Target may include purpose key with one or more values that are each drawn from model's list of Motivations.", + "title": "Implements **target _purpose_ key** with one or more values are each drawn from **model's list of Motivations** [model 3.3.5](https://www.w3.org/TR/annotation-model/#motivation-and-purpose)", + "description": "True when Annotation includes one or more Targets, one or more of which include purpose key with one or more values that are each drawn from model's list of Motivations. (Section 3.3.5)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/purposePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemPurposePropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/purposePropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemPurposePropertyFound" } + ] + } + } + } + } + + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-bodyRights.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-bodyRights.json new file mode 100644 index 00000000000..2c254fe011d --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-bodyRights.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-bodyRights.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a body may include rights key with one or more values each of format uri.", + "title": "Implements **body _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 Annotation includes one or more Bodies, one or more of which include rights key with one or more values that are each of format uri. (Section 3.3.6)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/rightsPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemRightsPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceRightsPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/rightsPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemRightsPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceRightsPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-bodyRightsValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-bodyRightsValidated.json new file mode 100644 index 00000000000..7f63268c6c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-bodyRightsValidated.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.6-bodyRightsValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A body or body/source has one or more rights key values that are not of format uri.", + "title": "If present all body-level or body/source-level **_rights_ key values** are strings of **format uri** - [model 3.3.6](https://www.w3.org/TR/annotation-model/#rights-information)", + "description": "True when no body-level or body/source-level (SR body) rights key present or when all rights key values are strings of format uri (Section 3.3.6)", + "type": "object", + "properties": + { + "body": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithRights" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithRights" } + ] + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-targRights.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-targRights.json new file mode 100644 index 00000000000..23906035568 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-targRights.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.2.1-targRights.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a target may include rights key with one or more values each of format uri.", + "title": "Implements **target _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 Annotation includes one or more Targets, one or more of which include rights key with one or more values that are each of format uri. (Section 3.3.6)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/rightsPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemRightsPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceRightsPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/rightsPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemRightsPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceRightsPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-targRightsValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-targRightsValidated.json new file mode 100644 index 00000000000..d4e564f97ef --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.6-targRightsValidated.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.6-targRightsValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A target or target/source has one or more rights key values that are not of format uri.", + "title": "If present all target-level or target/source-level **_rights_ key values** are strings of **format uri** - [model 3.3.6](https://www.w3.org/TR/annotation-model/#rights-information)", + "description": "True when no target-level or target/source-level (SR target) rights key present or when all rights key values are strings of format uri (Section 3.3.6)", + "type": "object", + "properties": + { + "target": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithRights" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithRights" } + ] + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyCanonical.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyCanonical.json new file mode 100644 index 00000000000..7d4376ae0b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyCanonical.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.7-bodyCanonical.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a body rresource may include canonical key with a single value that is of format uri.", + "title": "Implements **body _canonical_ key** with a **single value** that is of **format uri** [model 3.3.7](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more bodies, one or more of which include canonical key with a single value of format uri. (Section 3.3.7)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/canonicalPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCanonicalPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCanonicalPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/canonicalPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCanonicalPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCanonicalPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyCanonicalValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyCanonicalValidated.json new file mode 100644 index 00000000000..b783df471d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyCanonicalValidated.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.7-bodyCanonicalValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A body or body/source has multiple canonical key values for a body or source, or a single canonical key value that is not of format uri.", + "title": "If present all body-level or body/source-level **_canonical_ keys** have a **single value** which is a string of **format uri** - [model 3.3.](https://www.w3.org/TR/annotation-model/#other-identities)", + "description": "True when no body-level or body/source-level (SR body) canonical key present or when all canonical keys have a single value which is a string of format uri (Section 3.3.7)", + "type": "object", + "properties": + { + "body": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/canonicalValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithCanonical" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/canonicalValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithCanonical" } + ] + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyVia.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyVia.json new file mode 100644 index 00000000000..92190090301 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyVia.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.7-bodyVia.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a body resource may include via key with one or more values that are each of format uri.", + "title": "Implements **body _via_ key** which has one or more values, each of which is a **string of format uri** - [model 3.3.7](https://www.w3.org/TR/annotation-model/#other-identities)", + "description": "True when Annotation includes one or more bodies, one or more of which include via key with one or more values that are each of format uri. (Section 3.3.7)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "oneOf": [ + { "$ref": "otherProperties.json#/definitions/viaPropertyFound" }, + { "not": + { "items": + { "not": + { "$ref": "otherProperties.json#/definitions/viaPropertyFound" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyViaValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyViaValidated.json new file mode 100644 index 00000000000..1e9bef0a056 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-bodyViaValidated.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.7-bodyViaValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A body or body/source has one or more via key values that are not of format uri.", + "title": "If present all body-level or body/source-level **_via_ key values** are strings of **format uri** - [model 3.3.7](https://www.w3.org/TR/annotation-model/#other-identities)", + "description": "True when no body-level or body/source-level (SR body) via key present or when all via key values are strings of format uri (Section 3.3.7)", + "type": "object", + "properties": + { + "body": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/viaValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithVia" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/viaValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithVia" } + ] + } + ] + } + } + ] + } + }} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targCanonical.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targCanonical.json new file mode 100644 index 00000000000..f7fb58e254f --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targCanonical.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.7-targCanonical.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a target rresource may include canonical key with a single value that is of format uri.", + "title": "Implements **target _canonical_ key** with a **single value** that is of **format uri** [model 3.3.7](https://www.w3.org/TR/annotation-model/#bodies-and-targets)", + "description": "True when Annotation includes one or more targets, one or more of which include canonical key with a single value of format uri. (Section 3.3.7)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/canonicalPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCanonicalPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCanonicalPropertyFound" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "otherProperties.json#/definitions/canonicalPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/itemCanonicalPropertyFound" }, + { "$ref": "otherProperties.json#/definitions/sourceCanonicalPropertyFound" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targCanonicalValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targCanonicalValidated.json new file mode 100644 index 00000000000..2ecc4782567 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targCanonicalValidated.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.7-targCanonicalValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A target or target/source has multiple canonical key values for a target or source, or a single canonical key value that is not of format uri.", + "title": "If present all target-level or target/source-level **_canonical_ keys** have a **single value** which is a string of **format uri** - [model 3.3.](https://www.w3.org/TR/annotation-model/#other-identities)", + "description": "True when no target-level or target/source-level (SR target) canonical key present or when all canonical keys have a single value which is a string of format uri (Section 3.3.7)", + "type": "object", + "properties": + { + "target": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/canonicalValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithCanonical" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/canonicalValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithCanonical" } + ] + } + ] + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targVia.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targVia.json new file mode 100644 index 00000000000..c6625e73718 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targVia.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.7-targVia.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a target resource may include via key with one or more values that are each of format uri.", + "title": "Implements **target _via_ key** which has one or more values, each of which is a **string of format uri** - [model 3.3.7](https://www.w3.org/TR/annotation-model/#other-identities)", + "description": "True when Annotation includes one or more targets, one or more of which include via key with one or more values that are each of format uri. (Section 3.3.7)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "$ref": "otherProperties.json#/definitions/viaPropertyFound" }, + { "not": + { "items": + { "not": + { "$ref": "otherProperties.json#/definitions/viaPropertyFound" } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targViaValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targViaValidated.json new file mode 100644 index 00000000000..77e9b3c65a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/3.3.7-targViaValidated.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "3.3.7-targViaValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: A target or target/source has one or more via key values that are not of format uri.", + "title": "If present all target-level or target/source-level **_via_ key values** are strings of **format uri** - [model 3.3.7](https://www.w3.org/TR/annotation-model/#other-identities)", + "description": "True when no target-level or target/source-level (SR target) via key present or when all via key values are strings of format uri (Section 3.3.7)", + "type": "object", + "properties": + { + "target": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/viaValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithVia" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "allOf": + [ + { "$ref": "otherProperties.json#/definitions/viaValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/sourceWithVia" } + ] + } + ] + } + } + ] + } + }} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyChoiceSetFound.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyChoiceSetFound.json new file mode 100644 index 00000000000..3f6751b51ce --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyChoiceSetFound.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4-bodyChoiceSetFound.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Body may be a Choice or Set.", + "title": "If a **Choice or Set** is a body, it does NOT have a **_source_ key** - [model 4](https://www.w3.org/TR/annotation-model/#specific-resources)", + "description": "True when no Choice or Set bodies or when none of the Choice or Set bodies include the source key. (Section 4)", + "type": "object", + "properties": + { + "body": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/choiceOrSetDetected" } , + { "type": "Array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "choiceSet.json#/definitions/choiceOrSetDetected" } } } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyChoiceSetNoSource.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyChoiceSetNoSource.json new file mode 100644 index 00000000000..d1823952ff1 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyChoiceSetNoSource.json @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4-bodyChoiceSetNoSource.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "A Choice or Set body cannot include a source key. source key is only valid with Specific Resources.", + "title": "If a **Choice or Set** is a body, it does NOT have a **_source_ key** - [model 4](https://www.w3.org/TR/annotation-model/#specific-resources)", + "description": "True when no Choice or Set bodies or when none of the Choice or Set bodies include the source key. (Section 4)", + "type": "object", + "properties": + { + "body": + { + "allOf": [ + { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithSource" } }, + { "items": { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithSource" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyEmbeddedTextualNoSource.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyEmbeddedTextualNoSource.json new file mode 100644 index 00000000000..659d314823e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodyEmbeddedTextualNoSource.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4-bodyEmbeddedTextualNoSource.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "An Embedded Textual body cannot include a source key. source key is only valid with Specific Resources.", + "title": "If an **Embedded Textual Body** is a body, it does NOT have a **_source_ key** - [model 4](https://www.w3.org/TR/annotation-model/#specific-resources)", + "description": "True when no Embedded Textual bodies or when none of the Embedded Textual bodies include the source key. (Section 4)", + "type": "object", + "properties": + { + "body": + { + "allOf": [ + { "not": { "$ref": "bodyTarget.json#/definitions/embeddedTextualBodyWithSource" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/embeddedTextualBodyWithSource" } } }, + { "not": { "$ref": "bodyTarget.json#/definitions/itemETBWithSource" } }, + { "items": { "not": { "$ref": "bodyTarget.json#/definitions/itemETBWithSource" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodySpecificResource.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodySpecificResource.json new file mode 100644 index 00000000000..b2b591821d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodySpecificResource.json @@ -0,0 +1,34 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4-bodySpecificResource.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Specific Resource may be used as an Annotation Body (not found).", + "title": "Implements **Specific Resource** with **_source_ and at least one of _purpose, selector, state, style, renderedVia, scope_ keys** as a body of the Annotation [model 4](https://www.w3.org/TR/annotation-model/#specific-resources)", + "description": "True when Annotation includes one or more Specific Resources as Annotation body(ies). (Section 4)", + "type": "object", + "required": ["body"], + "properties": + { + "body": + { + "anyOf": [ + { "$ref": "specificResource.json#/definitions/specificeResourceDetected" }, + { "$ref": "specificResource.json#/definitions/itemSpecificResourceDetected"}, + { "not": + { + "items": + { "not": + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/specificeResourceDetected" }, + { "$ref": "specificResource.json#/definitions/itemSpecificResourceDetected"} + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodySpecificResourceNoValue.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodySpecificResourceNoValue.json new file mode 100644 index 00000000000..bff1e8c642c --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-bodySpecificResourceNoValue.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4-bodySpecificResourceNoValue.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "An Specific Resource body cannot include a value key. value key is only valid with Embedded Textual Body.", + "title": "If a **Specific Resource** is a body, it does NOT have a **_value_ key** - [model 4](https://www.w3.org/TR/annotation-model/#specific-resources)", + "description": "True when no Specific Resource bodies or when none of the Specific Resource bodies include the value key. (Section 4)", + "type": "object", + "properties": + { + "body": + { + "allOf": [ + { "not": { "$ref": "specificResource.json#/definitions/specificResourceWithValue" } }, + { "items": { "not": { "$ref": "specificResource.json#/definitions/specificResourceWithValue" } } }, + { "not": { "$ref": "specificResource.json#/definitions/itemSRWithValue" } }, + { "items": { "not": { "$ref": "specificResource.json#/definitions/itemSRWithValue" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targChoiceSetFound.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targChoiceSetFound.json new file mode 100644 index 00000000000..6b67481dcdd --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targChoiceSetFound.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4-targChoiceSetFound.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Target may be a Choice or Set.", + "title": "Implements a **Choice or Set** as target - [model 3.2.7](https://www.w3.org/TR/annotation-model/#choice-of-bodies-and-targets)", + "description": "True when Choice or Set is a target. (Section 3.2.7)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "$ref": "choiceSet.json#/definitions/choiceOrSetDetected" } , + { "type": "Array", + "minItems": 1, + "not": + { "items": { "not": { "$ref": "choiceSet.json#/definitions/choiceOrSetDetected" } } } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targChoiceSetNoSource.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targChoiceSetNoSource.json new file mode 100644 index 00000000000..136e5895eab --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targChoiceSetNoSource.json @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4-targChoiceSetNoSource.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "A Choice or Set target cannot include a source key. source key is only valid with Specific Resources.", + "title": "If a **Choice or Set** is a target, it does not have a **_source_ key** - [model 4](https://www.w3.org/TR/annotation-model/#specific-resources)", + "description": "True when no Choice or Set targets or when none of the Choice or Set targets include the source key. (Section 4)", + "type": "object", + "properties": + { + "target": + { + "allOf": [ + { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithSource" } }, + { "items": { "not": { "$ref": "choiceSet.json#/definitions/choiceSetWithSource" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targSpecificResource.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targSpecificResource.json new file mode 100644 index 00000000000..2e7a9f30bc4 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targSpecificResource.json @@ -0,0 +1,33 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4-targSpecificResource.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "A Specific Resource may be used as an Annotation Target (not found).", + "title": "Implements **Specific Resource** with **_source_ and at least one of _purpose, selector, state, style, renderedVia, scope_ keys** as a target of the Annotation [model 4](https://www.w3.org/TR/annotation-model/#specific-resources)", + "description": "True when Annotation includes one or more Specific Resources as Annotation target(ies). (Section 4)", + "type": "object", + "properties": + { + "target": + { + "anyOf": [ + { "$ref": "specificResource.json#/definitions/specificeResourceDetected" }, + { "$ref": "specificResource.json#/definitions/itemSpecificResourceDetected"}, + { "not": + { + "items": + { "not": + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/specificeResourceDetected" }, + { "$ref": "specificResource.json#/definitions/itemSpecificResourceDetected"} + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targSpecificResourceNoValue.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targSpecificResourceNoValue.json new file mode 100644 index 00000000000..8c1ab2a86fe --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4-targSpecificResourceNoValue.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4-targSpecificResourceNoValue.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "An Specific Resource target cannot include a value key. value key is only valid with Specific Resources.", + "title": "If a **Specific Resource** is a target, it does NOT have a **_value_ key** - [model 4](https://www.w3.org/TR/annotation-model/#specific-resources)", + "description": "True when no Specific Resource targets or when none of the Specific Resource targets include the value key. (Section 4)", + "type": "object", + "properties": + { + "target": + { + "allOf": [ + { "not": { "$ref": "specificResource.json#/definitions/specificResourceWithValue" } }, + { "items": { "not": { "$ref": "specificResource.json#/definitions/specificResourceWithValue" } } }, + { "not": { "$ref": "specificResource.json#/definitions/itemSRWithValue" } }, + { "items": { "not": { "$ref": "specificResource.json#/definitions/itemSRWithValue" } } } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.4-bodyStyleClass.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.4-bodyStyleClass.json new file mode 100644 index 00000000000..54b51a06357 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.4-bodyStyleClass.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.4-bodyStyleClass.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource body may include styleClass key with one or more values.", + "title": "Implements **Specific Resource body _styleClass_ key** which has one or more values - [model 4.4](https://www.w3.org/TR/annotation-model/#styles)", + "description": "True when Annotation includes one or more Specific Resource bodies, one or more of which include styleClass key with one or more values. (Section 4.4)", + "type": "object", + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "specificResource.json#/definitions/itemStyleClassPropertyDetected" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "specificResource.json#/definitions/itemStyleClassPropertyDetected" } + ] + } + } + } + } + ] + } + }, + "required": ["body"] +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.4-targStyleClass.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.4-targStyleClass.json new file mode 100644 index 00000000000..cde8fa4d3f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.4-targStyleClass.json @@ -0,0 +1,35 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.4-targStyleClass.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource target may include styleClass key with one or more values.", + "title": "Implements **Specific Resource target _styleClass_ key** which has one or more values - [model 4.4](https://www.w3.org/TR/annotation-model/#styles)", + "description": "True when Annotation includes one or more Specific Resource targets, one or more of which include styleClass key with one or more values. (Section 4.4)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "specificResource.json#/definitions/itemStyleClassPropertyDetected" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "specificResource.json#/definitions/itemStyleClassPropertyDetected" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.5-bodyRenderedVia.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.5-bodyRenderedVia.json new file mode 100644 index 00000000000..8db2447e05e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.5-bodyRenderedVia.json @@ -0,0 +1,35 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.5-bodyRenderedVia.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource body may include renderedVia key with one or more values.", + "title": "Implements **Specific Resource body _renderedVia_ key** which has one or more values - [model 4.5](https://www.w3.org/TR/annotation-model/#rendering-software)", + "description": "True when Annotation includes one or more Specific Resource bodies, one or more of which include renderedVia key with one or more values. (Section 4.4)", + "type": "object", + "properties": + { + "body": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/renderedViaDetected" }, + { "$ref": "specificResource.json#/definitions/itemRenderedViaPropertyDetected" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/renderedViaDetected" }, + { "$ref": "specificResource.json#/definitions/itemRenderedViaPropertyDetected" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.5-targRenderedVia.json b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.5-targRenderedVia.json new file mode 100644 index 00000000000..0b9a4554133 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/bodiesTargets/4.5-targRenderedVia.json @@ -0,0 +1,35 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.5-targRenderedVia.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource target may include renderedVia key with one or more values.", + "title": "Implements **Specific Resource target _renderedVia_ key** which has one or more values - [model 4.5](https://www.w3.org/TR/annotation-model/#rendering-software)", + "description": "True when Annotation includes one or more Specific Resource targets, one or more of which include renderedVia key with one or more values. (Section 4.4)", + "type": "object", + "properties": + { + "target": + { + "oneOf": [ + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/renderedViaDetected" }, + { "$ref": "specificResource.json#/definitions/itemRenderedViaPropertyDetected" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/renderedViaDetected" }, + { "$ref": "specificResource.json#/definitions/itemRenderedViaPropertyDetected" } + ] + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-TextDataPositionSelectorValid.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-TextDataPositionSelectorValid.json new file mode 100644 index 00000000000..7b3f4c89db1 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-TextDataPositionSelectorValid.json @@ -0,0 +1,110 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2-textDataPositionSelectorValid.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains a Text Position or Data Position selector that is NOT of format uri and NOT an object having a value key with a single sting value.", + "title": "If present all **Selectors of _type_ TextPositionSelector or DataPositionSelector** have both a **_start_ key** and an **_end_ key**, each with a **single non-negative integer value** [model 4.2](https://www.w3.org/TR/annotation-model/#selectors)", + "description": "True when no Fragment, Css or XPath selectors present or all such selectors values are of format uri or are objects having a both start and end keys, each with a single non-negative integer value. (Section 4.2)", + "type": "object", + "patternProperties": + { + "^(body|target)$": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + } + ] + } + } + ] + } + }, + "definitions": + { + "selectorSchema": + { + "type": "object", + "properties": + { + "selector": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/textPositionSelectorTypeValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/dataPositionSelectorTypeValidIfPresent" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/textPositionSelectorTypeValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/dataPositionSelectorTypeValidIfPresent" } + ] + } + ] + } + } + ] + } + } + }, + + "itemsSchema": + { + "type": "object", + "properties": + { + "items": + { + "type": "array", + "minItems": 1, + "items": { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + {"$ref": "#/definitions/selectorSchema" } + ] + } + } + } + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-fragmentCssXPathSelectorValid.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-fragmentCssXPathSelectorValid.json new file mode 100644 index 00000000000..0bda0fe38c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-fragmentCssXPathSelectorValid.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2-fragmentCssXPathSelectorValid.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains a Fragment, Css or XPath selector that is NOT of format uri and NOT an object having a value key with a single sting value.", + "title": "If present all **Selectors of _type_ FragmentSelector, CssSelector, or XPathSelector** have a **_value_ key** with a **single value** - [model 4.2](https://www.w3.org/TR/annotation-model/#selectors)", + "description": "True when no Fragment, Css or XPath selectors present or all such selectors values are of format uri or are objects having a value key with a single value. (Section 4.2)", + "type": "object", + "patternProperties": + { + "^(body|target)$": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + } + ] + } + } + ] + } + }, + "definitions": + { + "selectorSchema": + { + "type": "object", + "properties": + { + "selector": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/fragmentSelectorTypeValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/cssSelectorTypeValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/xpathSelectorTypeValidIfPresent" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/fragmentSelectorTypeValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/cssSelectorTypeValidIfPresent" }, + { "$ref": "specificResource.json#/definitions/xpathSelectorTypeValidIfPresent" } + ] + } + ] + } + } + ] + } + } + }, + + "itemsSchema": + { + "type": "object", + "properties": + { + "items": + { + "type": "array", + "minItems": 1, + "items": { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + {"$ref": "#/definitions/selectorSchema" } + ] + } + } + } + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-selectorFound.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-selectorFound.json new file mode 100644 index 00000000000..bddf35543d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-selectorFound.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.-selectorFound.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include a Selector .", + "title": "Implements **Specific Resource Selector** - [model 4.2](https://www.w3.org/TR/annotation-model/#selectors)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a Selector. (Section 4.2)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/selectorDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/selectorDetected" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-selectorValidIfPresent.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-selectorValidIfPresent.json new file mode 100644 index 00000000000..b2721a3c118 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2-selectorValidIfPresent.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2-selectorValidIfPresent.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains one or more Specific Resources selectors having value(s) which is(are) not of format uri, nor an object having a type key with a single value which is one of 'FragmentSelector', 'CssSelector', 'XPathSelector', 'TextQuoteSelector', 'TextPositionSelector', 'DataPositionSelector', 'SvgSelector', 'RangeSelector'.", + "title": "If present **Specific Resource _selector_ key** has one or more values each of which is of **format uri** or an object having a **_type_ key** with a **single value** which is one of **'FragmentSelector', 'CssSelector', 'XPathSelector', 'TextQuoteSelector', 'TextPositionSelector', 'DataPositionSelector', 'SvgSelector', 'RangeSelector'** - [model 4.2](https://www.w3.org/TR/annotation-model/#selectors)", + "description": "True when no Specific Resources selector present or all Specific Resource selector values included in the Annotation (if any) are of format uri or or are objects having a type key with a single value which is one of 'FragmentSelector', 'CssSelector', 'XPathSelector', 'TextQuoteSelector', 'TextPositionSelector', 'DataPositionSelector', 'SvgSelector', 'RangeSelector'. (Section 4.2)", + "type": "object", + "patternProperties": + { + "^(body|target)$": + {"oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/selectorDefined" }, + { "$ref": "specificResource.json#/definitions/itemSelectorValidIfPresent" } + ] + }, + { "type": "array", + "minItems": 1, + "items": + {"oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/selectorDefined" }, + { "$ref": "specificResource.json#/definitions/itemSelectorValidIfPresent" } + ] + } + ] + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.1-conformsTo.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.1-conformsTo.json new file mode 100644 index 00000000000..a440b948653 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.1-conformsTo.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.1-conformsTo.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a FragmentSelector should include conformsTo key with a single value that is of format uri.", + "title": "Implements **Specific Resource _conformsTo_ key** with a **single value** which is of **format uri** on a **Specific Resource FragmentSelector** - [model 4.2.1](https://www.w3.org/TR/annotation-model/#fragment-selector)", + "description": "True when Annotation includes one or more FragmentSelectors, one or more of which include conformsTo key with a single value of format uri. (Section 4.2.1)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/conformsToPropertyFound" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/conformsToPropertyFound" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.1-fragmentSelector.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.1-fragmentSelector.json new file mode 100644 index 00000000000..df9f9968bc1 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.1-fragmentSelector.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.1-fragmentSelector.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include fragmentSelector .", + "title": "Implements **Specific Resource Fragment Selector** - [model 4.2.1](https://www.w3.org/TR/annotation-model/#fragment-selector)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a fragmentSelector. (Section 4.2.1)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/fragmentSelectorDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/fragmentSelectorDetected" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.2-cssSelector.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.2-cssSelector.json new file mode 100644 index 00000000000..aa422920908 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.2-cssSelector.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.2-cssSelector.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include cssSelector .", + "title": "Implements **Specific Resource CSS Selector** - [model 4.2.2](https://www.w3.org/TR/annotation-model/#css-selector)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a cssSelector. (Section 4.2.2)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/cssSelectorDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/cssSelectorDetected" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.3-xpathSelector.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.3-xpathSelector.json new file mode 100644 index 00000000000..53b8bb76a38 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.3-xpathSelector.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.3-xpathSelector.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include xpathSelector .", + "title": "Implements **Specific Resource XPath Selector** - [model 4.2.3](https://www.w3.org/TR/annotation-model/#xpath-selector)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a xpathSelector. (Section 4.2.3)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/xpathSelectorDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/xpathSelectorDetected" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-prefix.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-prefix.json new file mode 100644 index 00000000000..31961d778c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-prefix.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.4-prefix.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a TextQuoteSelector should include prefix key with a single value .", + "title": "Implements **Specific Resource _prefix_ key** with a **single string value** on a **Specific Resource TextQuoteSelector** - [model 4.2.4](https://www.w3.org/TR/annotation-model/#text-quote-selector)", + "description": "True when Annotation includes one or more TextQuoteSelectors, one or more of which include prefix key with a single value . (Section 4.2.4)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/prefixPropertyFound" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/prefixPropertyFound" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-suffix.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-suffix.json new file mode 100644 index 00000000000..88a52b175c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-suffix.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.4-suffix.json", + "assertionType": "should", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a TextQuoteSelector should include suffix key with a single value .", + "title": "Implements **Specific Resource _suffix_ key** with a **single string value** on a **Specific Resource TextQuoteSelector** - [model 4.2.4](https://www.w3.org/TR/annotation-model/#text-quote-selector)", + "description": "True when Annotation includes one or more TextQuoteSelectors, one or more of which include suffix key with a single value . (Section 4.2.4)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/suffixPropertyFound" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/suffixPropertyFound" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-textQuoteSelector.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-textQuoteSelector.json new file mode 100644 index 00000000000..65d2faeebb6 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-textQuoteSelector.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.4-textQuoteSelector.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include textQuoteSelector .", + "title": "Implements **Specific Resource Text Quote Selector** - [model 4.2.4](https://www.w3.org/TR/annotation-model/#text-quote-selector)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a textQuoteSelector. (Section 4.2.4)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/textQuoteSelectorDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/textQuoteSelectorDetected" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-textQuoteSelectorValid.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-textQuoteSelectorValid.json new file mode 100644 index 00000000000..c61c5cc8f47 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.4-textQuoteSelectorValid.json @@ -0,0 +1,107 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.4-textQuoteSelectorValid.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains a Text Quote selector that is NOT of format uri and NOT an object having an exact key with a single sting value.", + "title": "If present all **Selectors of _type_ TextQuoteSelector** have an **_exact_ key** with a **single value** - [model 4.2.4](https://www.w3.org/TR/annotation-model/#text-quote-selector)", + "description": "True when no Text Quote selectors present or all such selectors values are of format uri or are objects having an exact key with a single value. (Section 4.2.4)", + "type": "object", + "patternProperties": + { + "^(body|target)$": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + } + ] + } + } + ] + } + }, + "definitions": + { + "selectorSchema": + { + "type": "object", + "properties": + { + "selector": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/textQuoteSelectorTypeValidIfPresent" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/textQuoteSelectorTypeValidIfPresent" } ] + } + ] + } + } + ] + } + } + }, + + "itemsSchema": + { + "type": "object", + "properties": + { + "items": + { + "type": "array", + "minItems": 1, + "items": { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + {"$ref": "#/definitions/selectorSchema" } + ] + } + } + } + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.5-textPositionSelector.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.5-textPositionSelector.json new file mode 100644 index 00000000000..b709b9298c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.5-textPositionSelector.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.5-textPositionSelector.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include textPositionSelector .", + "title": "Implements **Specific Resource Text Position Selector** - [model 4.2.5](https://www.w3.org/TR/annotation-model/#text-position-selector)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a textPositionSelector. (Section 4.2.5)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/textPositionSelectorDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/textPositionSelectorDetected" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.6-dataPositionSelector.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.6-dataPositionSelector.json new file mode 100644 index 00000000000..1735eb04582 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.6-dataPositionSelector.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.6-dataPositionSelector.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include dataPositionSelector .", + "title": "Implements **Specific Resource Data Position Selector** - [model 4.2.6](https://www.w3.org/TR/annotation-model/#data-position-selector)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a dataPositionSelector. (Section 4.2.6)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/dataPositionSelectorDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/dataPositionSelectorDetected" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.7-svgSelector.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.7-svgSelector.json new file mode 100644 index 00000000000..45b0e828bee --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.7-svgSelector.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.7-svgSelector.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include svgSelector .", + "title": "Implements **Specific Resource SVG Selector** - [model 4.2.7](https://www.w3.org/TR/annotation-model/#svg-selector)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a svgSelector. (Section 4.2.7)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/svgSelectorDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/svgSelectorDetected" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.7-svgSelectorValid.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.7-svgSelectorValid.json new file mode 100644 index 00000000000..807a9efd4b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.7-svgSelectorValid.json @@ -0,0 +1,107 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.7-svgSelectorValid.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains a SVG selector that is NOT of format uri and NOT an object having either a value or an id key.", + "title": "If present all **Selectors of _type_ SvgSelector** have either a **_value_ key** or an **_id_ key** with a **single value** of format uri [model 4.2.7](https://www.w3.org/TR/annotation-model/#svg-selector)", + "description": "True when no SVG selectors present or all such selectors values are of format uri or are objects having either a value or an id key. (Section 4.2.7)", + "type": "object", + "patternProperties": + { + "^(body|target)$": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + } + ] + } + } + ] + } + }, + "definitions": + { + "selectorSchema": + { + "type": "object", + "properties": + { + "selector": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/svgSelectorTypeValidIfPresent" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/svgSelectorTypeValidIfPresent" } ] + } + ] + } + } + ] + } + } + }, + + "itemsSchema": + { + "type": "object", + "properties": + { + "items": + { + "type": "array", + "minItems": 1, + "items": { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + {"$ref": "#/definitions/selectorSchema" } + ] + } + } + } + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.8-rangeSelector.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.8-rangeSelector.json new file mode 100644 index 00000000000..a55bf842e84 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.8-rangeSelector.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.8-rangeSelector.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include rangeSelector .", + "title": "Implements **Specific Resource Range Selector** - [model 4.2.8](https://www.w3.org/TR/annotation-model/#range-selector)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a rangeSelector. (Section 4.2.8)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/rangeSelectorDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/rangeSelectorDetected" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.8-rangeSelectorValid.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.8-rangeSelectorValid.json new file mode 100644 index 00000000000..97a17af1469 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.2.8-rangeSelectorValid.json @@ -0,0 +1,107 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.2.8-rangeSelectorValid.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains a Range selector that is NOT of format uri and NOT an object having both startSelector and endSelector keys.", + "title": "If present all **Selectors of _type_ RangeSelector** have both a **_startSelector_ key** and an **_endSelector_ key**, each with a **single value** which is a **Selector** - [model 4.2.8](https://www.w3.org/TR/annotation-model/#range-selector)", + "description": "True when no Range selectors present or all such selectors values are of format uri or are objects having both startSelector and endSelector keys. (Section 4.2.8)", + "type": "object", + "patternProperties": + { + "^(body|target)$": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + } + ] + } + } + ] + } + }, + "definitions": + { + "selectorSchema": + { + "type": "object", + "properties": + { + "selector": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/rangeSelectorTypeValidIfPresent" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/rangeSelectorTypeValidIfPresent" } ] + } + ] + } + } + ] + } + } + }, + + "itemsSchema": + { + "type": "object", + "properties": + { + "items": + { + "type": "array", + "minItems": 1, + "items": { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + {"$ref": "#/definitions/selectorSchema" } + ] + } + } + } + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3-stateFound.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3-stateFound.json new file mode 100644 index 00000000000..568e0fd2fea --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3-stateFound.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.3-stateFound.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include a State .", + "title": "Implements **Specific Resource State** - [model 4.3](https://www.w3.org/TR/annotation-model/#states)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a State. (Section 4.3)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/selectorSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "selectorSchema": + { "type": "object", + "properties": + { "selector": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/stateDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/stateDetected" } } + } + } + ] + } + }, + "required": [ "selector" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/selectorSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3-stateValidIfPresent.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3-stateValidIfPresent.json new file mode 100644 index 00000000000..0435526c8d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3-stateValidIfPresent.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.3-stateValidIfPresent.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains one or more Specific Resources states having value(s) which is(are) not of format uri, nor an object having a type key with a single value which is one of 'TimeState' or 'HttpRequestState'.", + "title": "If present **Specific Resource _state_ key** has one or more values each of which is of **format uri** or an object having a **_type_ key** with a **single value** which is one of **'TimeState' or 'HttpRequestState'** - [model 4.3](https://www.w3.org/TR/annotation-model/#states)", + "description": "True when no Specific Resources state present or all Specific Resource state values included in the Annotation (if any) are of format uri or or are objects having a type key with a single value which is one of 'TimeState' or 'HttpRequestState'. (Section 4.3)", + "type": "object", + "patternProperties": + { + "^(body|target)$": + {"oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/stateDefined" }, + { "$ref": "specificResource.json#/definitions/itemStateValidIfPresent" } + ] + }, + { "type": "array", + "minItems": 1, + "items": + {"oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/stateDefined" }, + { "$ref": "specificResource.json#/definitions/itemStateValidIfPresent" } + ] + } + ] + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-cached.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-cached.json new file mode 100644 index 00000000000..40f02af9bcb --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-cached.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.3.1-cached.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a TimeState may include cached key with a single value that is of format uri.", + "title": "Implements **Specific Resource _cached_ key** with one or more values each of **format uri** on a **Specific Resource TimeState** - [model 4.3.1](https://www.w3.org/TR/annotation-model/#time-state)", + "description": "True when Annotation includes one or more TimeStates, one or more of which include cached key with a single value of format uri. (Section 4.3.1)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "stateSchema": + { "type": "object", + "properties": + { "state": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/cachedPropertyFound" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/cachedPropertyFound" } } + } + } + ] + } + }, + "required": [ "state" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/stateSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-timeState.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-timeState.json new file mode 100644 index 00000000000..49b2034549d --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-timeState.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.3.1-timeStateState.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include timeState State .", + "title": "Implements **Specific Resource Time State** - [model 4.3.1](https://www.w3.org/TR/annotation-model/#time-state)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a timeState State. (Section 4.3.1)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "stateSchema": + { "type": "object", + "properties": + { "state": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/timeStateDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/timeStateDetected" } } + } + } + ] + } + }, + "required": [ "state" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/stateSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-timeStateValid.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-timeStateValid.json new file mode 100644 index 00000000000..ca973d30da9 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.1-timeStateValid.json @@ -0,0 +1,107 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.3.1-timeStateValid.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains a Time State that is NOT of format uri and NOT an object having sourceDate key or (alternatively, non concurrently) both sourceDateStart and sourceDateEnd keys.", + "title": "If present all **States of _type_ TimeState** each have either (but not both) a **_souceDate_ key** or paired **_sourceDateStart_ and _sourceDateEnd_ keys,** each of which is a **single value** of **format date-time**- [model 4.3.1](https://www.w3.org/TR/annotation-model/#time-state)", + "description": "True when no Time States present or all such states values are of format uri or are objects having sourceDate key or (alternatively, non concurrently) both sourceDateStart and sourceDateEnd keys. (Section 4.3.1)", + "type": "object", + "patternProperties": + { + "^(body|target)$": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + } + ] + } + } + ] + } + }, + "definitions": + { + "stateSchema": + { + "type": "object", + "properties": + { + "state": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/timeStateTypeValidIfPresent" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/timeStateTypeValidIfPresent" } ] + } + ] + } + } + ] + } + } + }, + + "itemsSchema": + { + "type": "object", + "properties": + { + "items": + { + "type": "array", + "minItems": 1, + "items": { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + {"$ref": "#/definitions/stateSchema" } + ] + } + } + } + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.2-httpRequestStateValid.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.2-httpRequestStateValid.json new file mode 100644 index 00000000000..b4ba2242ee7 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.2-httpRequestStateValid.json @@ -0,0 +1,107 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.3.2-httpRequestStateValid.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains a HTTP Request Header State that is NOT of format uri and NOT an object having a value key.", + "title": "If present all **States of _type_ HttpRequestState** have a **_value_ key** - [model 4.3.2](https://www.w3.org/TR/annotation-model/#request-header-state)", + "description": "True when no HTTP Request Header States present or all such states values are of format uri or are objects having value key. (Section 4.3.2)", + "type": "object", + "patternProperties": + { + "^(body|target)$": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemsSchema" } + ] + } + ] + } + } + ] + } + }, + "definitions": + { + "stateSchema": + { + "type": "object", + "properties": + { + "state": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/requestHeaderStateTypeValidIfPresent" } + ] + }, + { + "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + { + "type":"object", + "allOf": + [ + { "$ref": "specificResource.json#/definitions/requestHeaderStateTypeValidIfPresent" } ] + } + ] + } + } + ] + } + } + }, + + "itemsSchema": + { + "type": "object", + "properties": + { + "items": + { + "type": "array", + "minItems": 1, + "items": { + "oneOf": + [ + {"$ref": "id.json#/definitions/stringUri" }, + {"$ref": "#/definitions/stateSchema" } + ] + } + } + } + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.2-requestHeaderState.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.2-requestHeaderState.json new file mode 100644 index 00000000000..66a6a5f9791 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.2-requestHeaderState.json @@ -0,0 +1,112 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.3.2-requestHeaderStateState.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include requestHeaderState State .", + "title": "Implements **Specific Resource Request Header State** - [model 4.3.2](https://www.w3.org/TR/annotation-model/#request-header-state)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a requestHeaderState State. (Section 4.3.2)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "#/definitions/stateSchema" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "stateSchema": + { "type": "object", + "properties": + { "state": + { "oneOf": + [ + { "type": "object", + "$ref": "specificResource.json#/definitions/requestHeaderStateDetected" + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/requestHeaderStateDetected" } } + } + } + ] + } + }, + "required": [ "state" ] + }, + + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "#/definitions/stateSchema" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.3-refinedBy.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.3-refinedBy.json new file mode 100644 index 00000000000..a9582597aa0 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.3-refinedBy.json @@ -0,0 +1,90 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.3.3-refinedBy.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource selector or state may include refinedBy key with one or more values.", + "title": "Implements **Specific Resource _refinedBy_ key** [model 4.2.9](https://www.w3.org/TR/annotation-model/#refinement-of-selection), [model 4.3.3](https://www.w3.org/TR/annotation-model/#refinement-of-state)", + "description": "True when Annotation includes one or more Specific Resource selectors or states, one or more of which include refinedBy key with value(s). (Section 4.3.3)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "specificResource.json#/definitions/refinedByDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "specificResource.json#/definitions/refinedByDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "specificResource.json#/definitions/refinedByDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "specificResource.json#/definitions/refinedByDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/refinedByDetected" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.3-refinedByValidated.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.3-refinedByValidated.json new file mode 100644 index 00000000000..5476e4a5d22 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.3.3-refinedByValidated.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.3-stateValidated.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains one or more Specific Resources states having value(s) which is(are) not of format uri, nor an object having a type key with a single value which is one of 'TimeState' or 'HttpRequestState'.", + "title": "If present **Specific Resource _state_ key** has one or more values each of which is of **format uri** or an object having a **_type_ key** with a **single value** which is one of **'TimeState' or 'HttpRequestState'** - [model 4.3](https://www.w3.org/TR/annotation-model/#states)", + "description": "True when no Specific Resources state present or all Specific Resource state values included in the Annotation (if any) are of format uri or or are objects having a type key with a single value which is one of 'TimeState' or 'HttpRequestState'. (Section 4.3)", + "type": "object", + "patternProperties": + { + "^(body|target)$": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "specificResource.json#/definitions/checkForRefinedBy" }, + { "$ref": "specificResource.json#/definitions/itemRefinedByValidIfPresent" } + ] + }, + { "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { + "allOf": + [ + { "$ref": "specificResource.json#/definitions/checkForRefinedBy" }, + { "$ref": "specificResource.json#/definitions/itemRefinedByValidIfPresent" } + ] + } + ] + } + } + ] + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.4-styleClass.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.4-styleClass.json new file mode 100644 index 00000000000..079d002aabc --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.4-styleClass.json @@ -0,0 +1,90 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.4-styleClass.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include styleClass key with one or more values.", + "title": "Implements **Specific Resource _styleClass_ key** with one or more values on a **Specific Resource** - [model 4.4](https://www.w3.org/TR/annotation-model/#styles)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which include styleClass key with value(s). (Section 4.4)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/styleClassDetected" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.4-styleClassValidIfPresent.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.4-styleClassValidIfPresent.json new file mode 100644 index 00000000000..5af382bd057 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.4-styleClassValidIfPresent.json @@ -0,0 +1,87 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.4-styleClassValidIfPresent.json", + "assertionType": "must", + "expectedResult": "valid", + "onUnexpectedResult" : "failAndContinue", + "errorMessage": "ERROR: Annotation contains one or more Specific Resources with styleClass key, but does not contain an Annotation-level stylesheet key.", + "title": "If any **Specific Resource _styleClass_ keys** are present, a **_stylesheet_ key** (a key of Annotation) with a **single value** is also present [model 4.4](https://www.w3.org/TR/annotation-model/#styles)", + "description": "True when no Specific Resources styleClass present or all Specific Resource styleClass values are strings / array of strings and Annotation has a stylesheet key. (Section 4.4)", + "type": "object", + "anyOf": + [ + { "required": ["stylesheet"] }, + { "not": + { + "anyOf": + [ + { "$ref": "#/definitions/bodyHasStyleClass" }, + { "$ref": "#/definitions/targHasStyleClass" } + ] + } + } + ], + "definitions": + { + "bodyHasStyleClass": + { + "properties": + { + "body": + { + "oneOf": + [ + { "anyOf": + [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "specificResource.json#/definitions/itemStyleClassPropertyDetected" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "specificResource.json#/definitions/itemStyleClassPropertyDetected" } + ] + } + } + } + } + ] + } + }, + "required": ["body"] + }, + + "targHasStyleClass": + { + "properties": + { + "target": + { + "oneOf": + [ + { "anyOf": + [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "specificResource.json#/definitions/itemStyleClassPropertyDetected" } + ] + }, + { "not": + { "items": + { "not": + { "anyOf": [ + { "$ref": "specificResource.json#/definitions/styleClassDetected" }, + { "$ref": "specificResource.json#/definitions/itemStyleClassPropertyDetected" } + ] + } + } + } + } + ] + } + } + } + } +} diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.5-renderedVia.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.5-renderedVia.json new file mode 100644 index 00000000000..008c7312045 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.5-renderedVia.json @@ -0,0 +1,90 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.5-renderedVia.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include renderedVia key with one or more values.", + "title": "Implements **Specific Resource _renderedVia_ key** with one or more values on a **Specific Resource** - [model 4.5](https://www.w3.org/TR/annotation-model/#rendering-software)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which include renderedVia key with value(s). (Section 4.5)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "specificResource.json#/definitions/renderedViaDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "specificResource.json#/definitions/renderedViaDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "specificResource.json#/definitions/renderedViaDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "specificResource.json#/definitions/renderedViaDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/renderedViaDetected" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.6-scope.json b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.6-scope.json new file mode 100644 index 00000000000..fcc237bd3c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-model/annotations/specificResource/4.6-scope.json @@ -0,0 +1,90 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "4.6-scope.json", + "assertionType": "may", + "expectedResult": "valid", + "onUnexpectedResult" : "passAndContinue", + "errorMessage": "The description of a Specific Resource may include scope key with one or more values that is of format uri.", + "title": "Implements **Specific Resource _scope_ key** - [model 4.6](https://www.w3.org/TR/annotation-model/#scope-of-a-resource)", + "description": "True when Annotation includes one or more Specific Resources, one or more of which include scope key with value(s) of format uri. (Section 4.6)", + "type": "object", + "anyOf": + [ + { "properties": + { "body": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "specificResource.json#/definitions/scopeDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "specificResource.json#/definitions/scopeDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + }, + "required": [ "body" ] + }, + { "properties": + { "target": + { "oneOf": + [ + { "type": "object", + "oneOf": + [ + { "$ref": "specificResource.json#/definitions/scopeDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + }, + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": + { "oneOf": + [ + { "$ref": "specificResource.json#/definitions/scopeDetected" }, + { "$ref": "#/definitions/itemSchema" } + ] + } + } + } + } + ] + } + } + } + ], + "definitions": + { + "itemSchema": + { "type": "object", + "properties": + { "items": + { "type": "array", + "minItems": 1, + "not": + { "items": + { "not": { "$ref": "specificResource.json#/definitions/scopeDetected" } } + } + } + }, + "required": [ "items" ] + } + } +} \ No newline at end of file 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 3e4fc843912..c3d97541efd 100644 --- a/tests/wpt/web-platform-tests/annotation-model/definitions/specificResource.json +++ b/tests/wpt/web-platform-tests/annotation-model/definitions/specificResource.json @@ -61,10 +61,10 @@ "required": ["items"] }, - "selectorDetected": + "selectorDefined": { "title": "Definition: selector", - "description": "True when object tested has selector with value matching one or more of the selectors described in the model (Section 4.2)", + "description": "True when object tested has no selector, or has selector identified by uri, or has selector(s) with value matching one or more of the selectors described in the model (Section 4.2)", "type": "object", "properties": { @@ -74,13 +74,14 @@ { "$ref": "id.json#/definitions/stringUri" }, { "type": "object", "anyOf": [ + {"$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"} ] }, @@ -92,13 +93,14 @@ { "$ref": "id.json#/definitions/stringUri" }, { "type": "object", "anyOf": [ + {"$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"} ] } @@ -107,184 +109,401 @@ } ] } - }, + } + }, + + "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" } + ] + } + } + } + }, + + "selectorDetected": + { + "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", "required": ["selector"] }, + "fragmentSelectorTypeDetected": + { + "type": "object", + "properties": + { + "type": { "type": "string", "enum": ["FragmentSelector"] } + }, + "required": ["type"] + }, + "fragmentSelectorDetected": { "title": "Detection: fragment selector", "description": "True when object is a fragment selelctor (Section 4.2.1)", + "allOf": + [ + { "$ref": "#/definitions/fragmentSelectorTypeDetected"}, + { + "type": "object", + "properties": + { + "value": { "type": "string" }, + "conformsTo": { "type": "string", "format": "uri"} + }, + "required": ["value"] + } + ] + }, + + "conformsToPropertyFound": + { + "title": "Detection: fragment selector with conformsTo key", + "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" } + ] + }, + + "cssSelectorTypeDetected": + { "type": "object", "properties": { - "type": { "type": "string", "enum": ["FragmentSelector"] }, - "value": { "type": "string" }, - "conformsTo": { "type": "string", "format": "uri"} + "type": { "type": "string", "enum": ["CssSelector"] } }, - "required": ["value", "type"] + "required": ["type"] }, "cssSelectorDetected": { "title": "Detection: CssSelector selector", "description": "True when object is a CssSelector selelctor (Section 4.2.2)", + "allOf": + [ + { "$ref": "#/definitions/cssSelectorTypeDetected" }, + { + "type": "object", + "properties": + { + "value": { "type": "string" } + }, + "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" } + ] + }, + + "xpathSelectorTypeDetected": + { "type": "object", "properties": { - "type": { "type": "string", "enum": ["CssSelector"] }, - "value": { "type": "string" } + "type": { "type": "string", "enum": ["XPathSelector"] } }, - "required": ["value", "type"] + "required": ["type"] }, "xpathSelectorDetected": { "title": "Detection: XPath selector", "description": "True when object is a XPath selelctor (Section 4.2.3)", + "allOf": + [ + { "$ref": "#/definitions/xpathSelectorTypeDetected" }, + { + "type": "object", + "properties": + { + "value": { "type": "string" } + }, + "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" } + ] + }, + + "textQuoteSelectorTypeDetected": + { "type": "object", "properties": { - "type": { "type": "string", "enum": ["XPathSelector"] }, - "value": { "type": "string" } + "type": { "type": "string", "enum": ["TextQuoteSelector"] } }, - "required": ["value", "type"] + "required": ["type"] }, "textQuoteSelectorDetected": { "title": "Detection: text quote selector", "description": "True when object is a text quote selelctor (Section 4.2.4)", + "allOf": + [ + { "$ref": "#/definitions/textQuoteSelectorTypeDetected" }, + { + "type": "object", + "properties": + { + "exact": { "type": "string" }, + "prefix": { "type": "string" }, + "suffix": { "type": "string" } + }, + "required": ["exact"] + } + ] + }, + + "prefixPropertyFound": + { + "title": "Detection: text quote selector with prefix key", + "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": + { + "title": "Detection: text quote selector with suffix key", + "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" } + ] + }, + + "textPositionSelectorTypeDetected": + { "type": "object", "properties": { - "type": { "type": "string", "enum": ["TextQuoteSelector"] }, - "exact": { "type": "string" }, - "prefix": { "type": "string" }, - "suffix": { "type": "string" } + "type": { "type": "string", "enum": ["TextPositionSelector"] } }, - "required": ["exact", "type"] + "required": ["type"] }, "textPositionSelectorDetected": { "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"] + } + ] + }, + + "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" } + ] + }, + + "dataPositionSelectorTypeDetected": + { "type": "object", "properties": { - "type": { "type": "string", "enum": ["TextPositionSelector"] }, - "start": { "type": "integer", "minimum": 0 }, - "end": { "type": "integer","minimum": 0 } + "type": { "type": "string", "enum": ["DataPositionSelector"] } }, - "required": ["start", "end", "type"] + "required": ["type"] }, "dataPositionSelectorDetected": { - "title": "Detection: data position selector", - "description": "True when object is a data position selelctor (Section 4.2.6)", + "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"] + } + ] + }, + + "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" } + ] + }, + + "svgSelectorTypeDetected": + { "type": "object", "properties": { - "type": { "type": "string", "enum": ["DataPositionSelector"] }, - "start": { "type": "integer", "minimum": 0 }, - "end": { "type": "integer", "minimum": 0 } + "type": { "type": "string", "enum": ["SvgSelector"] } }, - "required": ["start", "end", "type"] + "required": ["type"] }, "svgSelectorDetected": { "title": "Detection: svg selector", "description": "True when object is a svg selelctor (Section 4.2.7)", + "allOf": + [ + { "$ref": "#/definitions/svgSelectorTypeDetected" }, + { + "type": "object", + "properties": + { + "value": { "type": "string" }, + "id": { "$ref": "id.json#/definitions/arraySingleStringUri" } + }, + "oneOf": [ + {"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" } + ] + }, + + "rangeSelectorTypeDetected": + { "type": "object", "properties": { - "type": { "type": "string", "enum": ["SvgSelector"] }, - "value": { "type": "string" }, - "id": { "$ref": "id.json#/definitions/arraySingleStringUri" } + "type": { "type": "string", "enum": ["RangeSelector"] } }, - "required": ["type"], - "oneOf": [ - {"required": ["value"] }, - {"required": ["id"] } - ] + "required": ["type"] }, "rangeSelectorDetected": { "title": "Detection: range selector", "description": "True when object is a range selelctor (Section 4.2.9)", - "type": "object", - "properties": - { - "type": { "type": "string", "enum": ["RangeSelector"] } - }, - "patternProperties": - { - "^(startSelector|endSelector)$": - { "type": "object", - "oneOf": [ - {"$ref": "#/definitions/fragmentSelectorDetected"}, - {"$ref": "#/definitions/cssSelectorDetected"}, - {"$ref": "#/definitions/xpathSelectorDetected"}, - {"$ref": "#/definitions/textQuoteSelectorDetected"}, - {"$ref": "#/definitions/textPositionSelectorDetected"}, - {"$ref": "#/definitions/dataPositionSelectorDetected"}, - {"$ref": "#/definitions/svgSelectorDetected"} - ] - } - }, - "required": ["type", "startSelector", "endSelector"] - }, - - "refinedByDetected": - { - "title": "Detection: refinedBy selector or state", - "description": "True when object is a refinedBy selelctor or state (Section 4.2.8, 4.3.3)", - "oneOf": + "allOf": [ - { "$ref": "id.json#/definitions/arraySingleStringUri" }, + { "$ref": "#/definitions/rangeSelectorTypeDetected" }, { "type": "object", - "oneOf": [ - {"$ref": "#/definitions/fragmentSelectorDetected"}, - {"$ref": "#/definitions/cssSelectorDetected"}, - {"$ref": "#/definitions/xpathSelectorDetected"}, - {"$ref": "#/definitions/textQuoteSelectorDetected"}, - {"$ref": "#/definitions/textPositionSelectorDetected"}, - {"$ref": "#/definitions/dataPositionSelectorDetected"}, - {"$ref": "#/definitions/rangeSelectorDetected"}, - {"$ref": "#/definitions/svgSelectorDetected"}, - {"$ref": "#/definitions/timeStateDetected"}, - {"$ref": "#/definitions/requestHeaderStateDetected"} - ] - }, - { - "type": "array", - "minItems": 1, - "items": + "patternProperties": { - "oneOf": [ - { "$ref": "id.json#/definitions/arraySingleStringUri" }, - {"$ref": "#/definitions/fragmentSelectorDetected"}, - {"$ref": "#/definitions/cssSelectorDetected"}, + "^(startSelector|endSelector)$": + { "type": "object", + "oneOf": [ + {"$ref": "#/definitions/fragmentSelectorDetected"}, + {"$ref": "#/definitions/cssSelectorDetected"}, {"$ref": "#/definitions/xpathSelectorDetected"}, - {"$ref": "#/definitions/textQuoteSelectorDetected"}, + {"$ref": "#/definitions/textQuoteSelectorDetected"}, {"$ref": "#/definitions/textPositionSelectorDetected"}, - {"$ref": "#/definitions/dataPositionSelectorDetected"}, - {"$ref": "#/definitions/rangeSelectorDetected"}, - {"$ref": "#/definitions/svgSelectorDetected"}, - {"$ref": "#/definitions/timeStateDetected"}, - {"$ref": "#/definitions/requestHeaderStateDetected"} - ] - } + {"$ref": "#/definitions/dataPositionSelectorDetected"}, + {"$ref": "#/definitions/svgSelectorDetected"} + ] + } + }, + "required": ["startSelector", "endSelector"] } ] }, - "stateDetected" : + "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" } + ] + }, + + "stateDefined" : { "title": "Definition: state", "description": "True when object tested has state with value matching one or more of the state classes described in the model (Section 4.3)", @@ -323,59 +542,309 @@ } }, - "timeStateDetected": + "itemStateValidIfPresent": { - "title": "Definition: time state", - "description": "True when object is a time state (Section 4.3.1)", + "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": { - "type": { "type": "string", "enum": ["TimeState"] }, - "sourceDate": - { "oneOf": [ - { "type": "string", - "format": "date-time"}, - { "type": "array", - "minItems": 1, - "items": - {"type": "string", "format": "date-time"} + "items": + { "type": "array", + "minItems": 1, + "items": + { + "oneOf": + [ + { "$ref": "id.json#/definitions/stringUri" }, + { "$ref": "#/definitions/stateDefined" } + ] } - ] - }, - "sourceDateStart": { "type": "string", "format": "date-time"}, - "sourceDateEnd": { "type": "string", "format": "date-time"}, - "cached": { "type": "string", "format": "uri"} - }, - "required": ["type"], - "dependencies" : + } + } + }, + + "stateDetected": + { + "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", + "required": ["state"] + }, + + "timeStateTypeDetected": + { + "type": "object", + "properties": { - "sourceDateStart" : ["sourceDateEnd"], - "sourceDateEnd": ["sourceDateStart"] + "type": { "type": "string", "enum": ["TimeState"] } }, - "not": - { "required": [ "sourceDate", "sourceDateStart", "sourceDateEnd" ] } + "required": ["type"] + }, + + "timeStateDetected": + { + "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"} + }, + "oneOf": + [ + { "required": ["sourceDate"] }, + { "required": ["sourceDateStart", "sourceDateEnd"] } + ], + "not": + { "required": [ "sourceDate", "sourceDateStart", "sourceDateEnd" ] } + } + ] + }, + + "cachedPropertyFound": + { + "title": "Detection: time state with cached key", + "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" } + ] + }, + + "requestHeaderStateTypeDetected": + { + "type": "object", + "properties": + { + "type": { "type": "string", "enum": ["HttpRequestState"] } + }, + "required": ["type"] }, "requestHeaderStateDetected": { - "title": "Definition: request header state", + "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"} + }, + "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" } + ] + }, + + "refinedByDefined": + { + "title": "Definition: refinedBy", + "description": "True when object tested has no refinedBy, or has refinedBy identified by uri, or has refinedBy(s) with value matching one or more of the refinedBys described in the model (Section 4.2)", "type": "object", "properties": { - "type": { "type": "string", "enum": ["HttpRequestState"] }, - "value": { "type": "string"} - }, - "required": ["type", "value"] + "refinedBy": + { + "oneOf": [ + { "$ref": "id.json#/definitions/stringUri" }, + { "type": "object", + "anyOf": [ + {"$ref": "id.json#/definitions/idValueFound"}, + {"$ref": "#/definitions/fragmentSelectorDetected"}, + {"$ref": "#/definitions/cssSelectorDetected"}, + {"$ref": "#/definitions/xpathSelectorDetected"}, + {"$ref": "#/definitions/textQuoteSelectorDetected"}, + {"$ref": "#/definitions/textPositionSelectorDetected"}, + {"$ref": "#/definitions/dataPositionSelectorDetected"}, + {"$ref": "#/definitions/rangeSelectorDetected"}, + {"$ref": "#/definitions/svgSelectorDetected"}, + {"$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/fragmentSelectorDetected"}, + {"$ref": "#/definitions/cssSelectorDetected"}, + {"$ref": "#/definitions/xpathSelectorDetected"}, + {"$ref": "#/definitions/textQuoteSelectorDetected"}, + {"$ref": "#/definitions/textPositionSelectorDetected"}, + {"$ref": "#/definitions/dataPositionSelectorDetected"}, + {"$ref": "#/definitions/rangeSelectorDetected"}, + {"$ref": "#/definitions/svgSelectorDetected"}, + {"$ref": "#/definitions/timeStateDetected"}, + {"$ref": "#/definitions/requestHeaderStateDetected"} + ] + } + ] + } + } + ] + } + } + }, + + "checkForRefinedBy": + { + "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" } + ] + } + } + ] + } + } + }, + + "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" } + ] + } + } + } + }, + + "refinedByDetected": + { + "title": "Detection: refinedBy ", + "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"] + } + ] + }, + + "refinedByWithinStateSelector": + { + "oneOf": + [ + { "type": "object", + "$ref": "#/definitions/refinedByDefined", + "required": ["refinedBy"] + }, + { "type": "array", + "minItems": 1, + "not": + { + "items": + {"not": + { "type": "object", + "$ref": "#/definitions/refinedByDefined", + "required": ["refinedBy"] + } + } + } + } + ] }, "styleClassDefinition": { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Definition: styleClass property value", - "description": "True when the body/target has no styleClass property or has a styleClass property that is a string values (Section 4.4)", - "type": "object", - "properties": { - "styleClass": { "type": "string" } + "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"] } }, @@ -383,10 +852,10 @@ { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Collate: styleClass key with qualifying body/target classes", "description": "Supports implementation check of styleClass (if/when) used on Specific Resources (Sections 4.4)", + "type": "object", "allOf": [ - { "$ref": "#/definitions/sourceDetected" }, - { "required": ["styleClass"]}, - { "$ref": "#/definitions/styleClassDefinition"} + { "$ref": "#/definitions/styleClassDefinition" }, + { "required": ["styleClass"] } ] }, diff --git a/tests/wpt/web-platform-tests/annotation-model/tools/template_js b/tests/wpt/web-platform-tests/annotation-model/tools/template_js index 29b76b323f1..4be9fc8534e 100644 --- a/tests/wpt/web-platform-tests/annotation-model/tools/template_js +++ b/tests/wpt/web-platform-tests/annotation-model/tools/template_js @@ -2,6 +2,7 @@ {{TESTTITLE}} + diff --git a/tests/wpt/web-platform-tests/annotation-model/tools/template_manual b/tests/wpt/web-platform-tests/annotation-model/tools/template_manual index 01bac92a824..d7c3315c507 100644 --- a/tests/wpt/web-platform-tests/annotation-model/tools/template_manual +++ b/tests/wpt/web-platform-tests/annotation-model/tools/template_manual @@ -2,6 +2,7 @@ {{TESTTITLE}} + @@ -30,13 +31,13 @@ var runningTest = new JSONtest( {

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

-

Specifically, the following assertions will be evaluated:

-

+

Specifically, the following assertions will be evaluated:

+
diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno1.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno1.json new file mode 100644 index 00000000000..905349bb468 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno1.json @@ -0,0 +1,7 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno1", + "type": "Annotation", + "body": "http://example.org/post1", + "target": "http://example.com/page1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno1.jsonld b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno1.jsonld new file mode 100644 index 00000000000..0e1729ae721 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno1.jsonld @@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "/annotations/anno1.jsonld", + "type": "Annotation", + "created": "2015-01-31T12:03:45Z", + "body": { + "type": "TextualBody", + "value": "I like this page!" + }, + "target": "/index.html" +} diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno10.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno10.json new file mode 100644 index 00000000000..766fddf3ac8 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno10.json @@ -0,0 +1,19 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno10", + "type": "Annotation", + "body": { + "type": "Choice", + "items": [ + { + "id": "http://example.org/note1", + "language": "en" + }, + { + "id": "http://example.org/note2", + "language": "fr" + } + ] + }, + "target": "http://example.org/website1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno11.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno11.json new file mode 100644 index 00000000000..7461493f46e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno11.json @@ -0,0 +1,18 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno11", + "type": "Annotation", + "motivation": "commenting", + "body": { + "type": "TextualBody", + "value": "These pages together provide evidence of the conspiracy" + }, + "target": { + "type": "Composite", + "items": [ + "http://example.com/page1", + "http://example.org/page6", + "http://example.net/page4" + ] + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno12.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno12.json new file mode 100644 index 00000000000..a8039b207df --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno12.json @@ -0,0 +1,19 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno12", + "type": "Annotation", + "motivation": "tagging", + "body": { + "type": "TextualBody", + "value": "important" + }, + "target": { + "type": "List", + "items": [ + "http://example.com/book/page1", + "http://example.com/book/page2", + "http://example.com/book/page3", + "http://example.com/book/page4" + ] + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno13.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno13.json new file mode 100644 index 00000000000..8bf663330da --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno13.json @@ -0,0 +1,16 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno13", + "type": "Annotation", + "motivation": "classifying", + "body": "http://example.org/vocab/art/portrait", + "target": { + "type": "Independents", + "items": [ + "http://example.com/image1", + "http://example.net/image2", + "http://example.com/image4", + "http://example.org/image9" + ] + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno14.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno14.json new file mode 100644 index 00000000000..102225b729e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno14.json @@ -0,0 +1,16 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno14", + "type": "Annotation", + "creator": "http://example.org/user1", + "created": "2015-01-28T12:00:00Z", + "modified": "2015-01-29T09:00:00Z", + "generator": "http://example.org/client1", + "generated": "2015-02-04T12:00:00Z", + "body": { + "id": "http://example.net/review1", + "creator": "http://example.net/user2", + "created": "2014-06-02T17:00:00Z" + }, + "target": "http://example.com/restaurant1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno15.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno15.json new file mode 100644 index 00000000000..1280eef4cd9 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno15.json @@ -0,0 +1,20 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno15", + "type": "Annotation", + "creator": { + "id": "http://example.org/user1", + "type": "Person", + "name": "My Pseudonym", + "nickname": "pseudo", + "email_sha1": "58bad08927902ff9307b621c54716dcc5083e339" + }, + "generator": { + "id": "http://example.org/client1", + "type": "Software", + "name": "Code v2.1", + "homepage": "http://example.org/client1/homepage1" + }, + "body": "http://example.net/review1", + "target": "http://example.com/restaurant1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno16.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno16.json new file mode 100644 index 00000000000..f110169c345 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno16.json @@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno16", + "type": "Annotation", + "audience": { + "id": "http://example.edu/roles/teacher", + "type": "schema:EducationalAudience", + "schema:educationalRole": "teacher" + }, + "body": "http://example.net/classnotes1", + "target": "http://example.com/textbook1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno17.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno17.json new file mode 100644 index 00000000000..056b8e4f534 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno17.json @@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno17", + "type": "Annotation", + "motivation": "commenting", + "body": "http://example.net/comment1", + "target": { + "id": "http://example.com/video1", + "type": "Video", + "accessibility": "captions" + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno18.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno18.json new file mode 100644 index 00000000000..cdf50fcd8f3 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno18.json @@ -0,0 +1,19 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno18", + "type": "Annotation", + "motivation": "bookmarking", + "body": [ + { + "type": "TextualBody", + "value": "readme", + "purpose": "tagging" + }, + { + "type": "TextualBody", + "value": "A good description of the topic that bears further investigation", + "purpose": "describing" + } + ], + "target": "http://example.com/page1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno19.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno19.json new file mode 100644 index 00000000000..bd572ce6883 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno19.json @@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno19", + "type": "Annotation", + "rights": "https://creativecommons.org/publicdomain/zero/1.0/", + "body": { + "id": "http://example.net/review1", + "rights": "http://creativecommons.org/licenses/by-nc/4.0/" + }, + "target": "http://example.com/product1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno2.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno2.json new file mode 100644 index 00000000000..f950f2db8d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno2.json @@ -0,0 +1,17 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno2", + "type": "Annotation", + "body": { + "id": "http://example.org/analysis1.mp3", + "format": "audio/mpeg", + "language": "fr" + }, + "target": { + "id": "http://example.gov/patent1.pdf", + "format": "application/pdf", + "language": ["en", "ar"], + "textDirection": "ltr", + "processingLanguage": "en" + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno2.jsonld b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno2.jsonld new file mode 100644 index 00000000000..22e96e11c86 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno2.jsonld @@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "/annotations/anno2.jsonld", + "type": "Annotation", + "created": "2015-02-31T12:03:45Z", + "body": { + "type": "TextualBody", + "value": "Great resource!" + }, + "target": "http://www.w3c.org/" +} diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno20.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno20.json new file mode 100644 index 00000000000..17fcc7185a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno20.json @@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno20", + "type": "Annotation", + "canonical": "urn:uuid:dbfb1861-0ecf-41ad-be94-a584e5c4f1df", + "via": "http://other.example.org/anno1", + "body": { + "id": "http://example.net/review1", + "rights": "http://creativecommons.org/licenses/by/4.0/" + }, + "target": "http://example.com/product1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno21.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno21.json new file mode 100644 index 00000000000..9ae284df040 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno21.json @@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno21", + "type": "Annotation", + "body": { + "type": "SpecificResource", + "purpose": "tagging", + "source": "http://example.org/city1" + }, + "target": { + "id": "http://example.org/photo1", + "type": "Image" + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno22.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno22.json new file mode 100644 index 00000000000..767080c05e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno22.json @@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno22", + "type": "Annotation", + "body": { + "source": "http://example.org/page1", + "selector": "http://example.org/paraselector1" + }, + "target": { + "source": "http://example.com/dataset1", + "selector": "http://example.org/dataselector1" + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno23.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno23.json new file mode 100644 index 00000000000..53b6c676b15 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno23.json @@ -0,0 +1,15 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno23", + "type": "Annotation", + "body": { + "source": "http://example.org/video1", + "purpose": "describing", + "selector": { + "type": "FragmentSelector", + "conformsTo": "http://www.w3.org/TR/media-frags/", + "value": "t=30,60" + } + }, + "target": "http://example.org/image1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno24.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno24.json new file mode 100644 index 00000000000..6cca6cb0a6d --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno24.json @@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno24", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1.html", + "selector": { + "type": "CssSelector", + "value": "#elemid > .elemclass + p" + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno25.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno25.json new file mode 100644 index 00000000000..0e48d3be6a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno25.json @@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno25", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1.html", + "selector": { + "type": "XPathSelector", + "value": "/html/body/p[2]/table/tr[2]/td[3]/span" + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno26.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno26.json new file mode 100644 index 00000000000..1777fd781b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno26.json @@ -0,0 +1,15 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno26", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/page1", + "selector": { + "type": "TextQuoteSelector", + "exact": "anotation", + "prefix": "this is an ", + "suffix": " that has some" + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno27.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno27.json new file mode 100644 index 00000000000..4844979a241 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno27.json @@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno27", + "type": "Annotation", + "body": "http://example.org/review1", + "target": { + "source": "http://example.org/ebook1", + "selector": { + "type": "TextPositionSelector", + "start": 412, + "end": 795 + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno28.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno28.json new file mode 100644 index 00000000000..2dd1bc7afcc --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno28.json @@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno28", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/diskimg1", + "selector": { + "type": "DataPositionSelector", + "start": 4096, + "end": 4104 + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno29.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno29.json new file mode 100644 index 00000000000..77914acaeb2 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno29.json @@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno29", + "type": "Annotation", + "body": "http://example.org/road1", + "target": { + "source": "http://example.org/map1", + "selector": { + "id": "http://example.org/svg1", + "type": "SvgSelector" + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno3.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno3.json new file mode 100644 index 00000000000..548825c76bc --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno3.json @@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno3", + "type": "Annotation", + "body": { + "id": "http://example.org/video1", + "type": "Video" + }, + "target": { + "id": "http://example.org/website1", + "type": "Text" + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno3.jsonld b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno3.jsonld new file mode 100644 index 00000000000..ef1bc83b55f --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno3.jsonld @@ -0,0 +1,8 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "/annotations/anno3.jsonld", + "type": "Annotation", + "target": "http://w3c.org/", + "body": "https://en.wikipedia.org/wiki/World_Wide_Web_Consortium", + "movivation": "describing" +} diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno30.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno30.json new file mode 100644 index 00000000000..1a7619afc1e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno30.json @@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno30", + "type": "Annotation", + "body": "http://example.org/road1", + "target": { + "source": "http://example.org/map1", + "selector": { + "type": "SvgSelector", + "value": " ... " + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno31.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno31.json new file mode 100644 index 00000000000..ee6902c3968 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno31.json @@ -0,0 +1,20 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno31", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/page1.html", + "selector": { + "type": "RangeSelector", + "startSelector": { + "type": "XPathSelector", + "value": "//table[1]/tr[1]/td[2]" + }, + "endSelector": { + "type": "XPathSelector", + "value": "//table[1]/tr[1]/td[4]" + } + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno32.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno32.json new file mode 100644 index 00000000000..f7c189ceb63 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno32.json @@ -0,0 +1,19 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno32", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/page1", + "selector": { + "type": "FragmentSelector", + "value": "para5", + "refinedBy": { + "type": "TextQuoteSelector", + "exact": "Selected Text", + "prefix": "text before the ", + "suffix": " and text after it" + } + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno33.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno33.json new file mode 100644 index 00000000000..f2866eef56e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno33.json @@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno33", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1", + "state": { + "id": "http://example.org/state1" + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno34.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno34.json new file mode 100644 index 00000000000..c3df38c2823 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno34.json @@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno34", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/page1", + "state": { + "type": "TimeState", + "cached": "http://archive.example.org/copy1", + "sourceDate": "2015-07-20T13:30:00Z" + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno35.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno35.json new file mode 100644 index 00000000000..39050abb133 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno35.json @@ -0,0 +1,13 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno35", + "type": "Annotation", + "body": "http://example.org/description1", + "target": { + "source": "http://example.org/resource1", + "state": { + "type": "HttpRequestState", + "value": "Accept: application/pdf" + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno36.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno36.json new file mode 100644 index 00000000000..77581efb3df --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno36.json @@ -0,0 +1,22 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno36", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/ebook1", + "state": { + "type": "TimeState", + "sourceDate": "2016-02-01T12:05:23Z", + "refinedBy": { + "type": "HttpRequestState", + "value": "Accept: application/pdf", + "refinedBy": { + "type": "FragmentSelector", + "value": "page=10", + "conformsTo": "http://tools.ietf.org/rfc/rfc3778" + } + } + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno37.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno37.json new file mode 100644 index 00000000000..96796db9a0b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno37.json @@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno37", + "type": "Annotation", + "stylesheet": "http://example.org/style1", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.org/document1", + "styleClass": "red" + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno38.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno38.json new file mode 100644 index 00000000000..67f24b80eae --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno38.json @@ -0,0 +1,14 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno38", + "type": "Annotation", + "stylesheet": { + "type": "CssStylesheet", + "value": ".red { color: red }" + }, + "body": "http://example.org/body1", + "target": { + "source": "http://example.org/target1", + "styleClass": "red" + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno39.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno39.json new file mode 100644 index 00000000000..27e639cd343 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno39.json @@ -0,0 +1,15 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno39", + "type": "Annotation", + "body": "http://example.org/comment1", + "target": { + "source": "http://example.edu/article.pdf", + "selector": "http://example.org/selectors/html-selector1", + "renderedVia": { + "id": "http://example.com/pdf-to-html-library", + "type": "Software", + "schema:softwareVersion": "2.5" + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno4.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno4.json new file mode 100644 index 00000000000..5655fb39e13 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno4.json @@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno4", + "type": "Annotation", + "body": "http://example.org/description1", + "target": { + "id": "http://example.com/image1#xywh=100,100,300,300", + "type": "Image", + "format": "image/jpeg" + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno40.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno40.json new file mode 100644 index 00000000000..63b47f145c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno40.json @@ -0,0 +1,10 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno40", + "type": "Annotation", + "body": "http://example.org/note1", + "target": { + "source": "http://example.org/image1", + "scope": "http://example.org/page1" + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno41.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno41.json new file mode 100644 index 00000000000..80afc748948 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno41.json @@ -0,0 +1,82 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno41", + "type": "Annotation", + "motivation": "commenting", + "creator": { + "id": "http://example.org/user1", + "type": "Person", + "name": "A. Person", + "nickname": "user1" + }, + "created": "2015-10-13T13:00:00Z", + "generator": { + "id": "http://example.org/client1", + "type": "Software", + "name": "Code v2.1", + "homepage": "http://example.org/homepage1" + }, + "generated": "2015-10-14T15:13:28Z", + "stylesheet": { + "id": "http://example.org/stylesheet1", + "type": "CssStylesheet" + }, + "body": [ + { + "type": "TextualBody", + "purpose": "tagging", + "value": "love" + }, + { + "type": "Choice", + "items": [ + { + "type": "TextualBody", + "purpose": "describing", + "value": "I really love this particular bit of text in this XML. No really.", + "format": "text/plain", + "language": "en", + "creator": "http://example.org/user1" + }, + { + "type": "SpecificResource", + "purpose": "describing", + "source": { + "id": "http://example.org/comment1", + "type": "Audio", + "format": "audio/mpeg", + "language": "de", + "creator": { + "id": "http://example.org/user2", + "type": "Person" + } + } + } + ] + } + ], + "target": { + "type": "SpecificResource", + "styleClass": "mystyle", + "source": "http://example.com/document1", + "state": [ + { + "type": "HttpRequestState", + "value": "Accept: application/xml", + "refinedBy": { + "type": "TimeState", + "sourceDate": "2015-09-25T12:00:00Z" + } + } + ], + "selector": { + "type": "FragmentSelector", + "value": "xpointer(/doc/body/section[2]/para[1])", + "refinedBy": { + "type": "TextPositionSelector", + "start": 6, + "end": 27 + } + } + } +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno5.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno5.json new file mode 100644 index 00000000000..85532e87850 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno5.json @@ -0,0 +1,12 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno5", + "type":"Annotation", + "body": { + "type" : "TextualBody", + "value" : "

j'adore !

", + "format" : "text/html", + "language" : "fr" + }, + "target": "http://example.org/photo1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno6.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno6.json new file mode 100644 index 00000000000..9ae0d88eaee --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno6.json @@ -0,0 +1,7 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno6", + "type":"Annotation", + "bodyValue": "Comment text", + "target": "http://example.org/target1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno7.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno7.json new file mode 100644 index 00000000000..9f821d22fb2 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno7.json @@ -0,0 +1,11 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno7", + "type":"Annotation", + "body": { + "type": "TextualBody", + "value": "Comment text", + "format": "text/plain" + }, + "target": "http://example.org/target1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno8.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno8.json new file mode 100644 index 00000000000..3187af65746 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno8.json @@ -0,0 +1,6 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno8", + "type": "Annotation", + "target": "http://example.org/ebook1" +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno9.json b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno9.json new file mode 100644 index 00000000000..8d72da3563f --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/anno9.json @@ -0,0 +1,16 @@ +{ + "@context": "http://www.w3.org/ns/anno.jsonld", + "id": "http://example.org/anno9", + "type": "Annotation", + "body": [ + "http://example.org/description1", + { + "type": "TextualBody", + "value": "tag1" + } + ], + "target": [ + "http://example.org/image1", + "http://example.org/image2" + ] +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/annotation.headers b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/annotation.headers new file mode 100755 index 00000000000..e69ef1cde2b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/annotation.headers @@ -0,0 +1,4 @@ +Content-Type: application/ld+json; profile="http://www.w3.org/ns/anno.jsonld" +Link: ; rel="type" +Allow: GET,HEAD,OPTIONS,DELETE,PUT +Vary: Accept 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 new file mode 100755 index 00000000000..e07c9bce15b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/annotation.options.headers @@ -0,0 +1,3 @@ +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.headers b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/collection.headers new file mode 100755 index 00000000000..a6dc59ecb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/collection.headers @@ -0,0 +1,5 @@ +Content-Type: application/ld+json; profile="http://www.w3.org/ns/anno.jsonld" +Link: ; rel="type" +Link: ; rel="http://www.w3.org/ns/ldp#constrainedBy" +Allow: POST,GET,OPTIONS,HEAD +Vary: Accept, Prefer 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 new file mode 100755 index 00000000000..1280684795e --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/collection.options.headers @@ -0,0 +1,3 @@ +Content-Type: text/plain +Allow: POST,GET,OPTIONS,HEAD,DELETE,PUT +Vary: Accept, Prefer diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/cors.headers b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/cors.headers new file mode 100755 index 00000000000..816bc214a5b --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/cors.headers @@ -0,0 +1,4 @@ +Access-Control-Allow-Headers: Content-Type, Prefer +Access-Control-Allow-Methods: GET,HEAD,OPTIONS,DELETE,PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Allow, Vary, Link, Content-Type, Location, Content-Location, Prefer diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/page.headers b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/page.headers new file mode 100644 index 00000000000..7cb1c19c652 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/annotations/page.headers @@ -0,0 +1,3 @@ +Content-Type: application/ld+json; profile="http://www.w3.org/ns/anno.jsonld" +Allow: GET,OPTIONS,HEAD +Vary: Accept, Prefer diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/index.html b/tests/wpt/web-platform-tests/annotation-protocol/files/index.html new file mode 100644 index 00000000000..146fd3aed48 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/index.html @@ -0,0 +1,26 @@ + + + + + + Annotate This Page + + + +

Test Your Annotation Client Today!

+ +
A conforming Web Annotation Protocol client SHOULD be able to: +
    +
  • start from this page
  • +
  • discover the recommended AnnotationCollection
  • +
  • read existing annotations from that AnnotationCollection
  • +
  • create, update, and delete annotations from that AnnotationCollection
  • +
+
+ +

Interoperability between systems has two basic aspects: the syntax and semantics of the data that is moved between the systems, and the transport mechanism for that movement. The HTTP protocol and the Web architecture provides us with a great starting point for a standardized transport layer, and can be used to move content between systems easily and effectively. Building upon these foundations allows us to make use of existing technology and patterns to ensure consistency and ease of development.

+ +

The Web Annotation Protocol describes a transport mechanism for creating, managing, and retrieving Annotations. Annotations in this specification are assumed to follow the requirements of the Web Annotation Data Model [annotation-model] and Web Annotation Vocabulary [annotation-vocab]. This specification builds upon REST principles and the Linked Data Platform [ldp] recommendation, and familiarity with it is recommended.

+ + + diff --git a/tests/wpt/web-platform-tests/annotation-protocol/files/index.html.headers b/tests/wpt/web-platform-tests/annotation-protocol/files/index.html.headers new file mode 100644 index 00000000000..2b5c176a69d --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/files/index.html.headers @@ -0,0 +1 @@ +Link: ; rel="http://www.w3.org/ns/oa#annotationService" diff --git a/tests/wpt/web-platform-tests/annotation-protocol/requirements.txt b/tests/wpt/web-platform-tests/annotation-protocol/requirements.txt new file mode 100644 index 00000000000..f800ea081e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/requirements.txt @@ -0,0 +1 @@ +wptserve 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 new file mode 100755 index 00000000000..e74e323f794 --- /dev/null +++ b/tests/wpt/web-platform-tests/annotation-protocol/tools/protocol-server.py @@ -0,0 +1,435 @@ +# protocol-server +# +# a reference implementation of the Web Annotation Protocol +# +# Developed by Benjamin Young (@bigbulehat) and Shane McCarron (@halindrome). +# Sponsored by Spec-Ops (https://spec-ops.io) +# +# Copyright (c) 2016 Spec-Ops +# +# for license information, see http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html + +import os +import sys + +here = os.path.abspath(os.path.split(__file__)[0]) +repo_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir)) + +sys.path.insert(0, os.path.join(repo_root, "tools")) +sys.path.insert(0, os.path.join(repo_root, "tools", "six")) +sys.path.insert(0, os.path.join(repo_root, "tools", "html5lib")) +sys.path.insert(0, os.path.join(repo_root, "tools", "wptserve")) +sys.path.insert(0, os.path.join(repo_root, "tools", "pywebsocket", "src")) +sys.path.insert(0, os.path.join(repo_root, "tools", "py")) +sys.path.insert(0, os.path.join(repo_root, "tools", "pytest")) +sys.path.insert(0, os.path.join(repo_root, "tools", "webdriver")) + +import hashlib +import json +import urlparse +import uuid + +import wptserve + +myprotocol = 'http' +myhost = 'localhost' +port = 8080 +doc_root = os.path.join(repo_root, "annotation-protocol", "files", "") +container_path = doc_root + 'annotations/' + +URIroot = myprotocol + '://' + myhost + ':{0}'.format(port) + +per_page = 10 + +MEDIA_TYPE = 'application/ld+json; profile="http://www.w3.org/ns/anno.jsonld"' +# Prefer header variants +PREFER_MINIMAL_CONTAINER = "http://www.w3.org/ns/ldp#PreferMinimalContainer" +PREFER_CONTAINED_IRIS = "http://www.w3.org/ns/oa#PreferContainedIRIs" +PREFER_CONTAINED_DESCRIPTIONS = \ + "http://www.w3.org/ns/oa#PreferContainedDescriptions" + + +# dictionary for annotations that we create on the fly +tempAnnotations = {} + +def extract_preference(prefer): + """Extracts the parameters from a Prefer header's value + >>> extract_preferences('return=representation;include="http://www.w3.org/ns/ldp#PreferMinimalContainer http://www.w3.org/ns/oa#PreferContainedIRIs"') + {"return": "representation", "include": ["http://www.w3.org/ns/ldp#PreferMinimalContainer", "http://www.w3.org/ns/oa#PreferContainedIRIs"]} + """ + obj = {} + if prefer: + params = prefer.split(';') + for p in params: + key, value = p.split('=') + obj[key] = value.strip('"').split(' ') + return obj + + +def dump_json(obj): + return json.dumps(obj, indent=4, sort_keys=True) + +def add_cors_headers(resp): + headers_file = doc_root + 'annotations/cors.headers' + resp.headers.update(load_headers_from_file(headers_file)) + +def load_headers_from_file(path): + headers = [] + with open(path, 'r') as header_file: + data = header_file.read() + headers = [tuple(item.strip() for item in line.split(":", 1)) + for line in data.splitlines() if line] + return headers + +def annotation_files(): + files = [] + for file in os.listdir(container_path): + if file.endswith('.jsonld') or file.endswith('.json'): + files.append(file) + for item in list(tempAnnotations.keys()): + files.append(item) + return files + + +def annotation_iris(skip=0): + iris = [] + for filename in annotation_files(): + iris.append(URIroot + '/annotations/' + filename) + return iris[skip:][:per_page] + + +def annotations(skip=0): + annotations = [] + files = annotation_files() + for file in files: + if file.startswith("temp-"): + annotations.append(json.loads(tempAnnotations[file])) + else: + with open(container_path + file, 'r') as annotation: + annotations.append(json.load(annotation)) + return annotations + + +def total_annotations(): + return len(annotation_files()) + + +@wptserve.handlers.handler +def collection_get(request, response): + """Annotation Collection handler. NOTE: This also routes paging requests""" + + # Paginate if requested + qs = urlparse.parse_qs(request.url_parts.query) + if 'page' in qs: + return page(request, response) + + # stub collection + collection_json = { + "@context": [ + "http://www.w3.org/ns/anno.jsonld", + "http://www.w3.org/ns/ldp.jsonld" + ], + "id": URIroot + "/annotations/", + "type": ["BasicContainer", "AnnotationCollection"], + "total": 0, + "label": "A Container for Web Annotations", + "first": URIroot + "/annotations/?page=0" + } + + last_page = (total_annotations() / per_page) - 1 + collection_json['last'] = URIroot + "/annotations/?page={0}".format(last_page) + + # Default Container format SHOULD be PreferContainedDescriptions + preference = extract_preference(request.headers.get('Prefer')) + if 'include' in preference: + preference = preference['include'] + else: + preference = None + + collection_json['total'] = total_annotations() + # TODO: calculate last page and add it's page number + + if (qs.get('iris') and qs.get('iris')[0] is '1') \ + or (preference and PREFER_CONTAINED_IRIS in preference): + return_iris = True + else: + return_iris = False + + # only PreferContainedIRIs has unqiue content + if return_iris: + collection_json['id'] += '?iris=1' + collection_json['first'] += '&iris=1' + collection_json['last'] += '&iris=1' + + if preference and PREFER_MINIMAL_CONTAINER not in preference: + if return_iris: + collection_json['first'] = annotation_iris() + else: + collection_json['first'] = annotations() + + collection_headers_file = doc_root + 'annotations/collection.headers' + add_cors_headers(response) + response.headers.update(load_headers_from_file(collection_headers_file)) + # this one's unique per request + response.headers.set('Content-Location', collection_json['id']) + return dump_json(collection_json) + + +@wptserve.handlers.handler +def collection_head(request, response): + container_path = doc_root + request.request_path + if os.path.isdir(container_path): + response.status = 200 + else: + response.status = 404 + + add_cors_headers(response) + headers_file = doc_root + 'annotations/collection.headers' + for header, value in load_headers_from_file(headers_file): + response.headers.append(header, value) + + response.content = None + + +@wptserve.handlers.handler +def collection_options(request, response): + container_path = doc_root + request.request_path + if os.path.isdir(container_path): + response.status = 200 + else: + response.status = 404 + + add_cors_headers(response) + headers_file = doc_root + 'annotations/collection.options.headers' + 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", + "id": URIroot + "/annotations/", + "type": "AnnotationPage", + "partOf": { + "id": URIroot + "/annotations/", + "total": 42023 + }, + "next": URIroot + "/annotations/", + "items": [ + ] + } + + add_cors_headers(response) + headers_file = doc_root + 'annotations/collection.headers' + response.headers.update(load_headers_from_file(headers_file)) + + qs = urlparse.parse_qs(request.url_parts.query) + page_num = int(qs.get('page')[0]) + page_json['id'] += '?page={0}'.format(page_num) + + total = total_annotations() + so_far = (per_page * (page_num+1)) + remaining = total - so_far + + if page_num != 0: + page_json['prev'] = URIroot + '/annotations/?page={0}'.format(page_num-1) + + page_json['partOf']['total'] = total + + if remaining > per_page: + page_json['next'] += '?page={0}'.format(page_num+1) + else: + del page_json['next'] + + if qs.get('iris') and qs.get('iris')[0] is '1': + page_json['items'] = annotation_iris(so_far) + page_json['id'] += '&iris=1' + if 'prev' in page_json: + page_json['prev'] += '&iris=1' + if 'next' in page_json: + page_json['next'] += '&iris=1' + else: + page_json['items'] = annotations(so_far) + + return dump_json(page_json) + + +@wptserve.handlers.handler +def annotation_get(request, response): + """Individual Annotations""" + requested_file = doc_root + request.request_path[1:] + base = os.path.basename( requested_file ) + + headers_file = doc_root + 'annotations/annotation.headers' + + if base.startswith("temp-") and tempAnnotations[base]: + response.headers.update(load_headers_from_file(headers_file)) + response.headers.set('Etag', hashlib.sha1(base).hexdigest()) + data = dump_json(tempAnnotations[base]) + if data != "" : + response.content = data + response.status = 200 + else: + response.content = "" + response.status = 404 + elif os.path.isfile(requested_file): + response.headers.update(load_headers_from_file(headers_file)) + # Calculate ETag using Apache httpd's default method (more or less) + # http://www.askapache.info//2.3/mod/core.html#fileetag + statinfo = os.stat(requested_file) + etag = "{0}{1}{2}".format(statinfo.st_ino, statinfo.st_mtime, + statinfo.st_size) + # obfuscate so we don't leak info; hexdigest for string compatibility + response.headers.set('Etag', hashlib.sha1(etag).hexdigest()) + + with open(requested_file, 'r') as data_file: + data = data_file.read() + response.content = data + response.status = 200 + else: + response.content = 'Not Found' + response.status = 404 + + add_cors_headers(response) + + +@wptserve.handlers.handler +def annotation_head(request, response): + requested_file = doc_root + request.request_path[1:] + base = os.path.basename(requested_file) + + headers_file = doc_root + 'annotations/annotation.options.headers' + + if base.startswith("temp-") and tempAnnotations[base]: + response.status = 200 + response.headers.update(load_headers_from_file(headers_file)) + elif os.path.isfile(requested_file): + response.status = 200 + response.headers.update(load_headers_from_file(headers_file)) + else: + response.status = 404 + + add_cors_headers(response) + response.content = "Annotation Options\n" + +@wptserve.handlers.handler +def annotation_options(request, response): + requested_file = doc_root + request.request_path[1:] + base = os.path.basename(requested_file) + + headers_file = doc_root + 'annotations/annotation.options.headers' + + if base.startswith("temp-") and tempAnnotations[base]: + response.status = 200 + response.headers.update(load_headers_from_file(headers_file)) + elif os.path.isfile(requested_file): + response.status = 200 + response.headers.update(load_headers_from_file(headers_file)) + else: + 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) + incoming = json.loads(body) + id = "temp-"+str(uuid.uuid4()) + if 'id' in incoming: + incoming['canonical'] = incoming['id'] + incoming['id'] = URIroot + '/annotations/' + id + + return incoming + + +@wptserve.handlers.handler +def annotation_post(request, response): + incoming = create_annotation(request.body) + newID = incoming['id'] + key = os.path.basename(newID) + + print "post:" + newID + print "post:" + key + + tempAnnotations[key] = dump_json(incoming) + + headers_file = doc_root + 'annotations/annotation.headers' + response.headers.update(load_headers_from_file(headers_file)) + response.headers.append('Location', newID) + add_cors_headers(response) + response.content = dump_json(incoming) + response.status = 201 + +@wptserve.handlers.handler +def annotation_put(request, response): + incoming = create_annotation(request.body) + + # remember it in our local cache too + # tempAnnotations[request.request_path[1:]] = dump_jason(incoming) + newID = incoming['id'] + key = os.path.basename(newID) + + print "put:" + newID + print "put:" + key + + tempAnnotations[key] = dump_json(incoming) + + headers_file = doc_root + 'annotations/annotation.headers' + response.headers.update(load_headers_from_file(headers_file)) + response.headers.append('Location', incoming['id']) + add_cors_headers(response) + response.content = dump_json(incoming) + response.status = 200 + + +@wptserve.handlers.handler +def annotation_delete(request, response): + base = os.path.basename(request.request_path[1:]) + requested_file = doc_root + request.request_path[1:] + + add_cors_headers(response) + + headers_file = doc_root + 'annotations/annotation.headers' + + try: + if base.startswith("temp-"): + if tempAnnotations[base]: + del tempAnnotations[base] + else: + os.remove(requested_file) + response.headers.update(load_headers_from_file(headers_file)) + response.status = 204 + response.content = '' + except OSError: + response.status = 404 + response.content = 'Not Found' + +if __name__ == '__main__': + print 'http://' + myhost + ':{0}/'.format(port) + + routes = [ + ("GET", "", wptserve.handlers.file_handler), + ("GET", "index.html", wptserve.handlers.file_handler), + + # container/collection responses + ("HEAD", "annotations/", collection_head), + ("OPTIONS", "annotations/", collection_options), + ("GET", "annotations/", collection_get), + + # create annotations in the collection + ("POST", "annotations/", annotation_post), + + # single annotation responses + ("HEAD", "annotations/*", annotation_head), + ("OPTIONS", "annotations/*", annotation_options), + ("GET", "annotations/*", annotation_get), + ("PUT", "annotations/*", annotation_put), + ("DELETE", "annotations/*", annotation_delete) + ] + + httpd = wptserve.server.WebTestHttpd(host=myhost, bind_hostname=myhost, port=port, doc_root=doc_root, + routes=routes) + httpd.start(block=True) diff --git a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/picture/picture-isvalid.html b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/picture/picture-isvalid.html index e8a76edf25c..302ce107e9a 100644 --- a/tests/wpt/web-platform-tests/conformance-checkers/html/elements/picture/picture-isvalid.html +++ b/tests/wpt/web-platform-tests/conformance-checkers/html/elements/picture/picture-isvalid.html @@ -20,7 +20,6 @@ x -xxx
diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html new file mode 100644 index 00000000000..225951285b3 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html @@ -0,0 +1,55 @@ + + +SecurityPolicyViolationEvent IDL Tests + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html b/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html new file mode 100644 index 00000000000..1ed625f63bb --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html @@ -0,0 +1,84 @@ + + + +Custom Elements: HTMLElement must allow subclassing + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/diff-manifest.py b/tests/wpt/web-platform-tests/diff-manifest.py new file mode 100755 index 00000000000..801733cc69d --- /dev/null +++ b/tests/wpt/web-platform-tests/diff-manifest.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python + +import difflib +import json +import os +import subprocess +import sys + + +def call(*args): + return subprocess.check_output(args) + + +def get_manifest(rev): + call("git", "checkout", rev) + call("./manifest", "-r") + with open("MANIFEST.json", "r") as fp: + return fp.readlines() + + +def main(): + after = get_manifest("HEAD") + + call("git", "fetch", "origin", "master:master") + merge_base = call("git", "merge-base", "master", "HEAD").strip() + before = get_manifest(merge_base) + + diff = difflib.unified_diff(before, after, + fromfile='before.json', tofile='after.json') + for line in diff: + sys.stdout.write(line) + + +if __name__ == "__main__": + main() diff --git a/tests/wpt/web-platform-tests/docs/configuration.md b/tests/wpt/web-platform-tests/docs/configuration.md index b526c986942..6d5bbbca8b4 100644 --- a/tests/wpt/web-platform-tests/docs/configuration.md +++ b/tests/wpt/web-platform-tests/docs/configuration.md @@ -18,12 +18,13 @@ your following entries are required: ``` -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 +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 +0.0.0.0 nonexistent-origin.web-platform.test ``` ## Cloning the Repository @@ -39,11 +40,11 @@ update all submodules: ## Font Files -Many layout tests require a set of test-specific fonts, notably -Ahem. These are available from the -[CSS Fonts](http://www.w3.org/Style/CSS/Test/Fonts/) website. These -must be installed according to the normal font-install procedure for -your operating system. +A number of tests rely upon a set of custom fonts, with +[Ahem](https://github.com/w3c/csswg-test/raw/master/fonts/ahem/ahem.ttf) +being required to be installed according to the normal font-install +procedure for your operating system. Other tests which require other +fonts explicitly state this and provide links to required fonts. ## Running the Test Server @@ -76,3 +77,21 @@ like: ``` "ssl": {"openssl": {"binary": "/path/to/openssl"}} ``` + +### Windows Notes + +Running wptserve with SSL enabled on Windows typically requires +installing an OpenSSL distribution. +[Shining Light](https://slproweb.com/products/Win32OpenSSL.html) +provide a convenient installer that is known to work, but requires a +little extra setup. + +After installation ensure that the path to OpenSSL is on your `%Path%` +environment variable. + +Then set the path to the default OpenSSL configuration file (usually +something like `C:\OpenSSL-Win32\bin\openssl.cfg` in the server +configuration. To do this copy `config.default.json` in the +web-platform-tests root to `config.json`. Then edit the JSON so that +the key `ssl/openssl/base_conf_path` has a value that is the path to +the OpenSSL config file. diff --git a/tests/wpt/web-platform-tests/docs/css-metadata.md b/tests/wpt/web-platform-tests/docs/css-metadata.md index 24a7a6324e4..aacc868d48d 100644 --- a/tests/wpt/web-platform-tests/docs/css-metadata.md +++ b/tests/wpt/web-platform-tests/docs/css-metadata.md @@ -1,125 +1,4 @@ -CSS tests have some particular requirements for metadata. - -## Title element - -``` html -[Test Area]: [Title/Scope of Test] -or -[Test Area] Reference File -``` - -The title appears in the generated index, so make sure it is -concise and descriptive. The role of the title is to -identify what specific detail of a feature or combination of -features is being tested, so that someone looking through an index -can see quickly what's tested in which file. In most cases, this -description should not require more than 5 or 6 words. There is no -need to provide the chapter or section in the title. For reference -file, the titles should not be specific to a test case as these -files may be used by multiple different tests. - -Bad examples: - -``` html -CSS Test: Border Conflict Resolution -CSS Regions auto-height Reference -``` - -Good examples: - -``` html -CSS Test: Border Conflict Resolution (width) - hidden/double - -CSS Reference File -``` - -For CSS specifications other than CSS 2.1, you can include the -module name somewhere before the colon, like "CSS Selectors Test:" -or "CSS Test (Selectors):". Do not include the module version -number, since the test might get reused for the next version. - -### Credits - -``` html - -``` - -Credits provide a way to identify the person or organization that -created the test and/or holds copyright in the test. This is useful -for reviewing purposes and for asking questions about the individual -test. A test can have multiple author credits if necessary. - -Example 1: - -``` html - -``` - -Example 2: - -``` html - -``` - -Example 3: - -``` html - -``` - -### Reviewer - -``` html - -``` - -If a test has passed review, then the reviewer should note this by -adding his or her name as a reviewer, along with the date of the -review. A test can have multiple reviewers if necessary. A reviewer -must be a person, not an organization. - -Example 1: - -``` html - -``` - -Example 2: - -``` html - -``` - -If a test would pass review with some (non-metadata) changes and the -reviewer chooses to make these changes, then the reviewer should add -his or her name as a reviewer-author, along with the date of the -review, when checking in those changes. This indicates that the -reviewer-author approves of the original author's test when taken -with these proposed changes, and that someone else (possibly the -original author) must review the changes. The test is fully reviewed -only when the latest reviewer did not also contribute changes to the -test at the time of the review. - -Example of a fully-reviewed test: - -``` html - - - -``` - -This test was written by Bert Bos, then reviewed by Boris Zbarsky, -who made some corrections before deeming it acceptable. Those -corrections were then reviewed and accepted by Bert Bos. +CSS tests have some additional requirements for metadata. ### Specification Links @@ -163,58 +42,6 @@ href="http://www.w3.org/TR/CSS21/visudet.html#line-height" /> href="http://www.w3.org/TR/CSS21/colors.html#background-properties" /> ``` -### Reference Links - -*Reftests only* - -``` html - - -``` - -The reference link elements are used in reftests and provide -the list of reference file(s) that the test should be compared to. - -* ```match``` references must be files that render identically to - the test, but use an alternate means to do so -* Multiple match references are used when the test can match any of - the reference files - * If a test requires multiple match references that all need to - match (for example, to catch when a reference fails in the same - way the test does), then chain the references together, i.e.: - place reference links to the additional match references in the - reference files. It is recommended that the chained reference - files form a loop (e.g.: a → b → c → a) so that a test linking - to any reference in the chain will find all the references. -* ```mismatch``` references are files that render differently than - the test file. A test may have any number of mismatch references. - The test is considered to fail if it renders the same as any of - the mismatch references. - * Note that reference files may themselves have mismatch - references. In that case the reference file must not render the - same as any of its mismatch references in order to be considered - valid. If a reference is considered invalid (by the fact of not - matching any of its match references, or matching any of its - mismatch references), then a test that refers to the reference - will be considered to have failed. -* Reference files may be dedicated reference files, images, or other - tests - -Example 1: - -``` html - -``` - -Example 2: - -``` html - - - - -``` - ### Requirement Flags diff --git a/tests/wpt/web-platform-tests/docs/review-process.md b/tests/wpt/web-platform-tests/docs/review-process.md index d14b0f24c88..4977f3ad6ba 100644 --- a/tests/wpt/web-platform-tests/docs/review-process.md +++ b/tests/wpt/web-platform-tests/docs/review-process.md @@ -21,22 +21,6 @@ All new code submissions must use the GitHub pull request workflow. The GitHub UI for code review may be used, but other tools may also be used as long as the review is clearly linked. -### Critic - -[Critic][critic] is a code review tool that is frequently used for -reviewing web-platform-tests submissions. Although it has a steeper -learning curve than the GitHub tools, it has more features that aid in -conducting non-trivial reviews. - -If you want to use Critic to review code, visit the [homepage][critic] -and log (authentication is via GitHub). On the homepage, click "Add -Filter". In the resulting dialog, select the web-platform-tests -repository and add the path of the folder(s) where you want to review -code, e.g. `/` to review any submissions or `XMLHttpRequest/` to -review only submissions in the `XHMLHttpRequest` directory. Ensure that -your email address is added so that you receive notifications of new -reviews matching your filters, and activity on existing reviews. - ## Labels Pull requests get automatically labelled in the GitHub repository. Check @@ -53,4 +37,3 @@ shows the number of open review requests, and can be filtered by testsuite. [style]: ./test-style-guidelines.html [review-checklist]: ./review-checklist.html [issues]: https://github.com/w3c/web-platform-tests/issues -[critic]: https://critic.hoppipolla.co.uk diff --git a/tests/wpt/web-platform-tests/dom/interfaces.html b/tests/wpt/web-platform-tests/dom/interfaces.html index 529c44cbd4d..618eca1f9a1 100644 --- a/tests/wpt/web-platform-tests/dom/interfaces.html +++ b/tests/wpt/web-platform-tests/dom/interfaces.html @@ -212,6 +212,7 @@ interface Node : EventTarget { readonly attribute boolean isConnected; readonly attribute Document? ownerDocument; + Node getRootNode(optional GetRootNodeOptions options); readonly attribute Node? parentNode; readonly attribute Element? parentElement; boolean hasChildNodes(); @@ -248,6 +249,9 @@ interface Node : EventTarget { Node removeChild(Node child); }; +dictionary GetRootNodeOptions { + boolean composed = false; +}; [Constructor, Exposed=Window] diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html b/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html index 805e1fea9a8..29a2c010ef6 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html @@ -72,6 +72,7 @@ test(function() { * interfaces that it is known some UA does or did not throw for. */ var someNonCreateableEvents = [ + "AnimationPlaybackEvent", "AnimationPlayerEvent", "ApplicationCacheErrorEvent", "AudioProcessingEvent", diff --git a/tests/wpt/web-platform-tests/dom/nodes/rootNode.html b/tests/wpt/web-platform-tests/dom/nodes/rootNode.html new file mode 100644 index 00000000000..66343e7e272 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/nodes/rootNode.html @@ -0,0 +1,82 @@ + + + + +Node.prototype.getRootNode() + + + + + + + + diff --git a/tests/wpt/web-platform-tests/domxpath/evaluator-constructor.html b/tests/wpt/web-platform-tests/domxpath/evaluator-constructor.html index e69b84b6f1b..8239d9c395e 100644 --- a/tests/wpt/web-platform-tests/domxpath/evaluator-constructor.html +++ b/tests/wpt/web-platform-tests/domxpath/evaluator-constructor.html @@ -11,7 +11,6 @@ test(function() { assert_true(x instanceof XPathEvaluator); }, "Constructor with 'new'"); test(function() { - var x = XPathEvaluator(); - assert_true(x instanceof XPathEvaluator); + assert_throws(new TypeError(), "var x = XPathEvaluator()"); }, "Constructor without 'new'"); diff --git a/tests/wpt/web-platform-tests/encrypted-media/EncryptedMediaExtensions.idl b/tests/wpt/web-platform-tests/encrypted-media/EncryptedMediaExtensions.idl index 107dffeba86..fbe898b2060 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/EncryptedMediaExtensions.idl +++ b/tests/wpt/web-platform-tests/encrypted-media/EncryptedMediaExtensions.idl @@ -4,6 +4,7 @@ // which this IDL was extracted. // // https://www.w3.org/TR/2016/WD-encrypted-media-20160610/ +// + commit 5499821932391ae2c2e53756ae7ab9fae89d5863 // partial interface Navigator { @@ -86,15 +87,15 @@ enum MediaKeyMessageType { "individualization-request" }; -[ Constructor (DOMString type, optional MediaKeyMessageEventInit eventInitDict)] +[Constructor(DOMString type, MediaKeyMessageEventInit eventInitDict)] interface MediaKeyMessageEvent : Event { readonly attribute MediaKeyMessageType messageType; readonly attribute ArrayBuffer message; }; dictionary MediaKeyMessageEventInit : EventInit { - MediaKeyMessageType messageType = "license-request"; - ArrayBuffer message; + required MediaKeyMessageType messageType; + required ArrayBuffer message; }; // partial interface HTMLMediaElement : EventTarget { @@ -105,7 +106,7 @@ partial interface HTMLMediaElement { Promise setMediaKeys (MediaKeys? mediaKeys); }; -[ Constructor (DOMString type, optional MediaEncryptedEventInit eventInitDict)] +[Constructor(DOMString type, optional MediaEncryptedEventInit eventInitDict)] interface MediaEncryptedEvent : Event { readonly attribute DOMString initDataType; readonly attribute ArrayBuffer? initData; diff --git a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-syntax.html b/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-syntax.html index 13240922fe3..0c960c86184 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-syntax.html +++ b/tests/wpt/web-platform-tests/encrypted-media/Google/encrypted-media-syntax.html @@ -8,7 +8,6 @@ -
diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-persistent-usage-record.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-persistent-usage-record.html index 64ce9b87171..a2eb397d64d 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-persistent-usage-record.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-persistent-usage-record.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, persistent-usage-record session with Clear Key, mp4, event sequence @@ -44,8 +43,8 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: 'keyids', - initData: getInitData(contentitem,'keyids'), - duration: 2 }; + initData: getInitData(contentitem,'keyids') + }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-destroy-persistent-license.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-destroy-persistent-license.html index bb0e59a44dc..85510b24bb5 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-destroy-persistent-license.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-destroy-persistent-license.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: persistent-license, playback, retrieve, playback and destroy with Clear Key, mp4 diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html index 165b1faa30b..c612b8cd98d 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: persistent-usage-record, playback and retrieve record in new window, Clear Key, mp4 @@ -45,7 +44,6 @@ videoType: contentitem.video.type, initDataType: 'keyids', initData: getInitData(contentitem,'keyids'), - duration: 2, windowscript: 'resources/retrieve-persistent-usage-record.html' }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-events.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-events.html index 422b8bd6e97..c4d4ea37de6 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-events.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-events.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful playback, Temporary session with Clear Key, mp4, validating events @@ -44,8 +43,8 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: 'keyids', - initData: getInitData(contentitem,'keyids'), - duration: 2 }; + initData: getInitData(contentitem,'keyids') + }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.html index fe3f96dbf41..29d1a2eed5d 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, multiple keys for audio/video @@ -23,7 +22,7 @@ - + @@ -45,8 +44,8 @@ videoType: contentitem.video.type, initDataType: 'keyids', initData: getInitData(contentitem,'keyids'), - duration: 2, - testcase: 'audio/video' }; + testcase: 'multikey audio/video' }; + runTest(config); 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-multisession.html similarity index 91% rename from tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.html rename to tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multisession.html index 6c37eb267ac..8f32120f14e 100644 --- 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-multisession.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, multiple keys in sequence @@ -23,7 +22,7 @@ - + @@ -45,8 +44,7 @@ videoType: contentitem.video.type, initDataType: 'keyids', initData: getMultikeyInitDatas(contentitem,'keyids'), - duration: 5, - testcase: 'sequential' }; + testcase: 'multikey video' }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.html index a4052fe2763..bade71626bb 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4 @@ -45,7 +44,6 @@ videoType: contentitem.video.type, initDataType: 'keyids', initData: getInitData(contentitem,'keyids'), - duration: 2, testcase: SETMEDIAKEYS_AFTER_SRC }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.html index 2e0e0e65753..1085ce4e772 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4 @@ -45,7 +44,6 @@ videoType: contentitem.video.type, initDataType: 'keyids', initData: getInitData(contentitem,'keyids'), - duration: 2, testcase: SETMEDIAKEYS_AFTER_UPDATE }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.html index 1cf3f122c14..7f362f44251 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4 @@ -45,7 +44,6 @@ videoType: contentitem.video.type, initDataType: 'keyids', initData: getInitData(contentitem,'keyids'), - duration: 2, testcase: SETMEDIAKEYS_IMMEDIATELY }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.html index f8c17b91e5c..a49bc28d3d0 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4 @@ -45,7 +44,6 @@ videoType: contentitem.video.type, initDataType: 'keyids', initData: getInitData(contentitem,'keyids'), - duration: 2, testcase: SETMEDIAKEYS_ONENCRYPTED }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-two-videos.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-two-videos.html index 99e5ef3465c..95de680e477 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-two-videos.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-two-videos.html @@ -47,7 +47,7 @@ videoType: contentitem.video.type, initDataType: 'keyids', initData: getInitData(contentitem,'keyids'), - duration: 2 }; + }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.html index 119350f808a..94d35daa510 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, play, wait for key, continue play @@ -44,8 +43,8 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: 'keyids', - initData: getMultikeyInitDatas(contentitem,'keyids'), - duration: 5 }; + initData: getMultikeyInitDatas(contentitem,'keyids') + }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary.html index d6ff85c37fd..909f2af6406 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4 @@ -45,7 +44,7 @@ videoType: contentitem.video.type, initDataType: 'keyids', initData: getInitData(contentitem,'keyids'), - duration: 2 }; + testcase: 'single key' }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-not-callable-after-createsession.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-not-callable-after-createsession.html index 452c252735b..29dc214921d 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/clearkey-not-callable-after-createsession.html +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-not-callable-after-createsession.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Test MediaKeySession not callable immediately after CreateSession(). 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 282b41f0ab0..31c6e3d6c60 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 @@ -148,20 +148,35 @@ function getProprietaryInitDatas( contentitem ) .map( function( k ) { return k.initData; } ) }; } -// Returns a promise that resolves to true or false depending on whether the content is supported with the key system and one of the initDataTypes -function isContentSupportedForInitDataTypes( keysystem, intiDataTypes, contentitem ) +// Returns a promise that resolves to the following object +// { supported: boolean, // whether the content is supported at all +// content: , // the content item description +// initDataTypes: +// } +// +// Note: we test initData types one at a time since some versions of Edge don't support testing several at once +// +function isContentSupportedForInitDataTypes( keysystem, initDataTypes, contentitem ) { - var configuration = { initDataTypes : intiDataTypes, - audioCapabilities: [ { contentType: contentitem.audio.type } ], - videoCapabilities: [ { contentType: contentitem.video.type } ] - }; - return navigator.requestMediaKeySystemAccess( keysystem, [ configuration ] ) - .then( function( access ) { - return { content: contentitem, supported: true, initDataTypes: access.getConfiguration().initDataTyes }; - }, - function() { - return { content: contentitem, supported: false }; - } ); + return Promise.all( initDataTypes.map( function( initDataType ) { + var configuration = { initDataTypes : [ initDataType ], + audioCapabilities: [ { contentType: contentitem.audio.type } ], + videoCapabilities: [ { contentType: contentitem.video.type } ] + }; + return navigator.requestMediaKeySystemAccess( keysystem, [ configuration ] ).then( function( access ) { + return { supported: true, initDataType: access.getConfiguration().initDataTypes[ 0 ] }; + }, function() { + return { supported: false }; + } ); + } ) ).then( function( results ) { + + var initDataTypes = results.filter( function( result ) { return result.supported; } ) + .map( function( result ) { return result.initDataType; } ); + + return initDataTypes.length > 0 ? + { content: contentitem, supported: true, initDataTypes: initDataTypes } + : { content: contentitem, supported: false }; + } ); } // Returns a promise that resolves to { content:, supported:, initDataTypes: } object @@ -196,4 +211,4 @@ function getSimpleConfigurationForContent( contentitem ) return { initDataTypes: [ 'keyids', 'webm', 'cenc' ], audioCapabilities: [ { contentType: contentitem.audio.type } ], videoCapabilities: [ { contentType: contentitem.video.type } ] }; -} \ No newline at end of file +} diff --git a/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_enc_2keys_2sess.mp4 b/tests/wpt/web-platform-tests/encrypted-media/content/video_512x288_h264-360k_enc_2keys_2sess.mp4 index d33f2a6c16014c75ebd2eef87d13e2d5a0d74972..f59284cfefeb44833a90f3d7046db49db7af7058 100644 GIT binary patch delta 54 zcmeD0mOaoUJE4M!ecQ&Wt?ZlYcrHF>VPIh2)*SqyJ@^A75HkTWGZ3=?G3)l=4{SD} E0DWy2PXGV_ delta 155 zcmX@mB-`IDJE4M!hjnAsR`$scm=y)y6^HqqSTW&4#rurHU)~S9CkwK8GgfYnW$9FlQ)a$YSthuwd|FaAGh4@{JfW7%CXF8L}D5fUL~TqHKp5MJpIw7`z!A y86p`BfWlEgiBN{n&2QO-pRg>CSwF3r?JRHDY(fEFoiM}z diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-check-initdata-type.html b/tests/wpt/web-platform-tests/encrypted-media/drm-check-initdata-type.html index e168b789325..6b3324027b8 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-check-initdata-type.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-check-initdata-type.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session 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 dc71eecfeb5..118ed204a36 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-events.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-events.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Events with DRM diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-generate-request-disallowed-input.html b/tests/wpt/web-platform-tests/encrypted-media/drm-generate-request-disallowed-input.html index 39ae5aea265..70c46edc7cc 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-generate-request-disallowed-input.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-generate-request-disallowed-input.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Test handling of invalid initData for generateRequest() 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 3cd3c83d8d0..40aab914182 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,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, multiple keys for audio/video @@ -45,7 +44,7 @@ content: contentitem, messagehandler: handler.messagehandler, initDataType: contentitem.initDataType, - initData: getProprietaryInitDatas(contentitem).initDatas.map( base64DecodeToUnit8Array ), + initData: getProprietaryInitDatas(contentitem).initDatas.map( base64DecodeToUnit8Array ) }; runTest(config); 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 c15a30a5132..de2cfd2a552 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-keystatuses.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-keystatuses.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Verify MediaKeySession.keyStatuses with multiple sessions, DRM @@ -42,7 +41,7 @@ content: contentitem, messagehandler: handler.messagehandler, initDataType: contentitem.initDataType, - initData: base64DecodeToUnit8Array( getProprietaryInitDatas(contentitem).initDatas[ 0 ] ), + initData: base64DecodeToUnit8Array( getProprietaryInitDatas(contentitem).initDatas[ 0 ] ) }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-destroy-persistent-license.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-destroy-persistent-license.html index fc9f0d77aa1..59350fb159e 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-destroy-persistent-license.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-destroy-persistent-license.html @@ -18,7 +18,7 @@ - + @@ -43,8 +43,8 @@ videoPath: contentitem.video.path, audioType: contentitem.audio.type, videoType: contentitem.video.type, - initDataType: contentitem.initDataType, - duration: 2 }; + initDataType: contentitem.initDataType + }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-license-events.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-license-events.html index 31a13c15617..3df5fffd2a9 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-license-events.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-license-events.html @@ -35,7 +35,7 @@ - + @@ -43,7 +43,7 @@ videoPath: contentitem.video.path, audioType: contentitem.audio.type, videoType: contentitem.video.type, - initDataType: contentitem.initDataType, + initDataType: contentitem.initDataType }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-usage-record-events.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-usage-record-events.html index e8b9b709866..b0c82621a35 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-usage-record-events.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-usage-record-events.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, persistent-usage-record session with DRM, mp4, event sequence @@ -45,8 +44,8 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: contentitem.initDataType, - servercertificate: handler.servercertificate, - duration: 2 }; + servercertificate: handler.servercertificate + }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-usage-record.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-usage-record.html index 9d1cb6a118d..1a9f8fb6fad 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-usage-record.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-persistent-usage-record.html @@ -45,8 +45,8 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: contentitem.initDataType, - servercertificate: handler.servercertificate, - duration: 2 }; + servercertificate: handler.servercertificate + }; runTest(config); 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 5c8c14aa96a..3a164617462 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 @@ -19,7 +19,7 @@ - + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-persistent-license.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-persistent-license.html index 7403eef3a7c..416093c1491 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-persistent-license.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-persistent-license.html @@ -19,7 +19,7 @@ - + diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.html index b9f7cd20be4..da5048f29a5 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: persistent-usage-record, playback and retrieve record in new window, DRM, mp4 @@ -46,7 +45,6 @@ videoType: contentitem.video.type, initDataType: contentitem.initDataType, servercertificate: handler.servercertificate, - duration: 2, windowscript: 'resources/drm-retrieve-persistent-usage-record.html' }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-events.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-events.html index 243b1ceccf4..9846eeeecdc 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-events.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-events.html @@ -44,8 +44,8 @@ videoPath: contentitem.video.path, audioType: contentitem.audio.type, videoType: contentitem.video.type, - initDataType: contentitem.initDataType, - duration: 2 }; + initDataType: contentitem.initDataType + }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey.html index 2fd6b45457c..b29139ed2ce 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey.html @@ -2,8 +2,7 @@ - - Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, multiple keys + Encrypted Media Extensions: Successful playback, temporary session with DRM, mp4, multiple keys @@ -23,7 +22,7 @@ - + @@ -45,9 +44,8 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: contentitem.initDataType, - duration: 2, - testcase: 'audio/video' }; - + testcase: 'multikey audio/video' + }; runTest(config); 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-multisession.html similarity index 92% rename from tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html rename to tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multisession.html index 1e68161ae81..4289af4a3c4 100644 --- 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-multisession.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Verify MediaKeySession.keyStatuses with multiple sessions, DRM @@ -23,7 +22,7 @@ - + @@ -46,8 +45,7 @@ videoType: contentitem.video.type, initDataType: contentitem.initDataType, initData: getProprietaryInitDatas(contentitem).initDatas.map( base64DecodeToUnit8Array ), - duration: 5, - testcase: 'sequential' }; + testcase: 'multikey video' }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.html index 5df1cc7cf2b..20dda66adff 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4 @@ -45,7 +44,6 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: contentitem.initDataType, - duration: 2, testcase: SETMEDIAKEYS_AFTER_SRC }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.html index dc94fb96e36..4f81da08dd8 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4 @@ -45,7 +44,6 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: contentitem.initDataType, - duration: 2, testcase: SETMEDIAKEYS_AFTER_UPDATE }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.html index bc371321f23..c97c571b666 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4 @@ -45,7 +44,6 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: contentitem.initDataType, - duration: 2, testcase: SETMEDIAKEYS_IMMEDIATELY }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.html index c17442a7883..c16809b8567 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4 @@ -45,7 +44,6 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: contentitem.initDataType, - duration: 2, testcase: SETMEDIAKEYS_ONENCRYPTED }; 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 2e914bfdde0..6109662b765 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,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, two videos @@ -46,8 +45,8 @@ videoPath: contentitem.video.path, audioType: contentitem.audio.type, videoType: contentitem.video.type, - initDataType: contentitem.initDataType, - duration: 2 }; + initDataType: contentitem.initDataType + }; runTest(config); diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-waitingforkey.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-waitingforkey.html index 2f21eb2c614..bf970db674c 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-waitingforkey.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary-waitingforkey.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Verify MediaKeySession.keyStatuses with multiple sessions, DRM @@ -20,7 +19,7 @@ - + @@ -35,16 +34,18 @@ diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary.html b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary.html index 60fd50b1807..592f2a8a151 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary.html +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-mp4-playback-temporary.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4 @@ -45,7 +44,7 @@ audioType: contentitem.audio.type, videoType: contentitem.video.type, initDataType: contentitem.initDataType, - duration: 2 }; + testcase: 'single key' }; runTest(config); 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 a40519225f7..e147560248c 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,6 @@ - Encrypted Media Extensions: Test MediaKeySession not callable immediately after CreateSession(). diff --git a/tests/wpt/web-platform-tests/encrypted-media/resources/clearkey-retrieve-destroy-persistent-license.html b/tests/wpt/web-platform-tests/encrypted-media/resources/clearkey-retrieve-destroy-persistent-license.html index 8ea67c661b6..b1bec547e99 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/resources/clearkey-retrieve-destroy-persistent-license.html +++ b/tests/wpt/web-platform-tests/encrypted-media/resources/clearkey-retrieve-destroy-persistent-license.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: persistent-license, retrieve and destroy, ClearKey diff --git a/tests/wpt/web-platform-tests/encrypted-media/resources/clearkey-retrieve-persistent-license.html b/tests/wpt/web-platform-tests/encrypted-media/resources/clearkey-retrieve-persistent-license.html index f74e6a2bedf..78ca4e1bb3a 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/resources/clearkey-retrieve-persistent-license.html +++ b/tests/wpt/web-platform-tests/encrypted-media/resources/clearkey-retrieve-persistent-license.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: persistent-license, retrieve and playback, ClearKey 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 68f87616bc1..21a05e87943 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 @@ -2,7 +2,6 @@ - Encrypted Media Extensions: persistent-license, retrieve and destroy, drm diff --git a/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-license.html b/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-license.html index bf162dc7f85..6f3ed80ffa5 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-license.html +++ b/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-license.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: persistent-license, retrieve and playback, DRM diff --git a/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-usage-record.html b/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-usage-record.html index 8831e6999cf..935f777488a 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-usage-record.html +++ b/tests/wpt/web-platform-tests/encrypted-media/resources/drm-retrieve-persistent-usage-record.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Retrieve stored persistent-usage-record diff --git a/tests/wpt/web-platform-tests/encrypted-media/resources/retrieve-persistent-usage-record.html b/tests/wpt/web-platform-tests/encrypted-media/resources/retrieve-persistent-usage-record.html index 3bfbb52e540..339e3c3aed5 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/resources/retrieve-persistent-usage-record.html +++ b/tests/wpt/web-platform-tests/encrypted-media/resources/retrieve-persistent-usage-record.html @@ -2,7 +2,6 @@ - Encrypted Media Extensions: Retrieve stored persistent-usage-record diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/generate-request-disallowed-input.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/generate-request-disallowed-input.js index 66108a8a780..cbacc018b98 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/generate-request-disallowed-input.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/generate-request-disallowed-input.js @@ -1,25 +1,25 @@ function runTest(config,qualifier) { - // Create a session and call generateRequest() temporary, |initDataType| - // and |initData|. generateRequest() should fail temporary, an - // InvalidAccessError. Returns a promise that resolves successfully - // if the error happened, rejects otherwise. - function test_session(keysystem,initDataType, initData) + // Create a "temporary" session for |keysystem| and call generateRequest() + // with the provided initData. generateRequest() should fail with an + // TypeError. Returns a promise that is resolved + // if the error occurred and rejected otherwise. + function test_session(keysystem, initDataType, initData) { return isInitDataTypeSupported(initDataType).then(function(result) { // If |initDataType| is not supported, simply succeed. if (!result) return Promise.resolve('Not supported'); - return navigator.requestMediaKeySystemAccess( keysystem, getSimpleConfigurationForInitDataType(initDataType)).then(function(access) { + return navigator.requestMediaKeySystemAccess(keysystem, getSimpleConfigurationForInitDataType(initDataType)).then(function(access) { return access.createMediaKeys(); }).then(function(mediaKeys) { - var mediaKeySession = mediaKeys.createSession(); + var mediaKeySession = mediaKeys.createSession("temporary"); return mediaKeySession.generateRequest(initDataType, initData); }).then(function() { - assert_unreached('generateRequest() succeeded'); + assert_unreached('generateRequest() succeeded unexpectedly'); }, function(error) { - assert_equals(error.name, 'InvalidAccessError'); + assert_equals(error.name, 'TypeError'); return Promise.resolve('success'); }); }) @@ -28,19 +28,19 @@ function runTest(config,qualifier) { promise_test(function() { var initData = new Uint8Array(70000); - return test_session(config.keysystem,'webm', initData); + return test_session(config.keysystem, 'webm', initData); }, testnamePrefix( qualifier, config.keysystem ) + ', temporary, webm, initData longer than 64Kb characters'); promise_test(function() { var initData = new Uint8Array(70000); - return test_session(config.keysystem,'cenc', initData); + return test_session(config.keysystem, 'cenc', initData); }, testnamePrefix( qualifier, config.keysystem ) + ', temporary, cenc, initData longer than 64Kb characters'); promise_test(function() { var initData = new Uint8Array(70000); - return test_session(config.keysystem,'keyids', initData); + return test_session(config.keysystem, 'keyids', initData); }, testnamePrefix( qualifier, config.keysystem ) + ', temporary, keyids, initData longer than 64Kb characters'); promise_test(function() @@ -56,7 +56,7 @@ function runTest(config,qualifier) { 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, 0x00, 0x00, 0x00, 0x00 // datasize ]); - return test_session(config.keysystem,'cenc', initData); + return test_session(config.keysystem, 'cenc', initData); }, testnamePrefix( qualifier, config.keysystem ) + ', temporary, cenc, invalid initdata (invalid pssh)'); promise_test(function() @@ -71,7 +71,7 @@ function runTest(config,qualifier) { 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, 0x00, 0x00, 0x00, 0x00 // datasize ]); - return test_session(config.keysystem,'cenc', initData); + return test_session(config.keysystem, 'cenc', initData); }, testnamePrefix( qualifier, config.keysystem ) + ', temporary, cenc, invalid initdata (not pssh)'); promise_test(function() @@ -79,7 +79,7 @@ function runTest(config,qualifier) { // Valid key ID size must be at least 1 character for keyids. var keyId = new Uint8Array(0); var initData = stringToUint8Array(createKeyIDs(keyId)); - return test_session(config.keysystem,'keyids', initData); + return test_session(config.keysystem, 'keyids', initData); }, testnamePrefix( qualifier, config.keysystem ) + ', temporary, keyids, invalid initdata (too short key ID)'); promise_test(function() @@ -87,6 +87,6 @@ function runTest(config,qualifier) { // Valid key ID size must be less than 512 characters for keyids. var keyId = new Uint8Array(600); var initData = stringToUint8Array(createKeyIDs(keyId)); - return test_session(config.keysystem,'keyids', initData); + return test_session(config.keysystem, 'keyids', initData); }, testnamePrefix( qualifier, config.keysystem ) + ', temporary, keyids, invalid initdata (too long key ID)'); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-usage-record-events.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-usage-record-events.js index 25d47b27afb..b1150f02b35 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-usage-record-events.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-usage-record-events.js @@ -81,7 +81,7 @@ function runTest(config,qualifier) { } function onTimeupdate(event) { - if ( _video.currentTime > ( config.duration || 2 ) && !_timeupdateEvent ) { + if ( _video.currentTime > ( config.duration || 1 ) && !_timeupdateEvent ) { _timeupdateEvent = true; _video.pause(); _mediaKeySession.remove().then( recordEventFunc('remove-done') ).catch(onFailure); diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-usage-record.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-usage-record.js index 633eac82352..ca7fa1d654a 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-usage-record.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-persistent-usage-record.js @@ -19,6 +19,10 @@ function runTest(config,qualifier) { _mediaSource, _releaseSequence = false; + function onFailure(error) { + forceTestFailureFromPromise(test, error); + } + function onMessage(event) { assert_equals( event.target, _mediaKeySession ); // event instance verification failing on CastTV @@ -35,15 +39,13 @@ function runTest(config,qualifier) { } config.messagehandler( event.messageType, event.message ).then( function( response ) { - _mediaKeySession.update( response ).catch(function(error) { - forceTestFailureFromPromise(test, error); - }).then(function() { + _mediaKeySession.update( response ).then(function() { if(event.messageType === 'license-request') { - _video.setMediaKeys(_mediaKeys); + return _video.setMediaKeys(_mediaKeys); } else if(event.messageType === 'license-release') { test.done(); } - }); + }).catch(onFailure); }); } @@ -55,9 +57,7 @@ function runTest(config,qualifier) { waitForEventAndRunStep('message', _mediaKeySession, onMessage, test); _mediaKeySession.generateRequest( config.initData ? config.initDataType : event.initDataType, config.initData || event.initData ) - .catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + .catch(onFailure); } function onClosed(event) { @@ -66,18 +66,13 @@ function runTest(config,qualifier) { } function onTimeupdate(event) { - if ( _video.currentTime > ( config.duration || 2 ) && !_releaseSequence ) { - + if ( _video.currentTime > ( config.duration || 1 ) && !_releaseSequence ) { _video.removeEventListener('timeupdate', onTimeupdate ); - _video.pause(); - _releaseSequence = true; _mediaKeySession.closed.then( test.step_func( onClosed ) ); - _mediaKeySession.remove().catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + _mediaKeySession.remove().catch(onFailure); _video.removeEventListener('timeupdate', onTimeupdate ); } @@ -95,7 +90,6 @@ function runTest(config,qualifier) { }).then(function(mediaKeys) { _mediaKeys = mediaKeys; _mediaKeySession = _mediaKeys.createSession( 'persistent-usage-record' ); - waitForEventAndRunStep('encrypted', _video, onEncrypted, test); waitForEventAndRunStep('playing', _video, onPlaying, test); }).then(function() { @@ -106,8 +100,6 @@ function runTest(config,qualifier) { _mediaSource = source; _video.src = URL.createObjectURL(_mediaSource); _video.play(); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); }, testname); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-retrieve-persistent-usage-record.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-retrieve-persistent-usage-record.js index 4dd695634a0..92af9bc8174 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-retrieve-persistent-usage-record.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-retrieve-persistent-usage-record.js @@ -20,6 +20,10 @@ function runTest(config,qualifier) { _sessionId, _isClosing = false; + function onFailure(error) { + forceTestFailureFromPromise(test, error); + } + function onEncrypted(event) { assert_equals(event.target, _video); assert_true(event instanceof window.MediaEncryptedEvent); @@ -28,11 +32,8 @@ function runTest(config,qualifier) { waitForEventAndRunStep('message', _mediaKeySession, onMessage, test); _mediaKeySession.generateRequest( config.initDataType || event.initDataType, config.initData || event.initData ).then( function() { - _sessionId = _mediaKeySession.sessionId; - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); } function onMessage(event) { @@ -43,24 +44,20 @@ function runTest(config,qualifier) { assert_in_array( event.messageType, [ 'license-request', 'individualization-request' ] ); config.messagehandler( event.messageType, event.message ).then( function( response ) { - _mediaKeySession.update( response ).then(function() { _video.setMediaKeys(_mediaKeys); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); }); } function onPlaying(event) { - // Not using waitForEventAndRunStep() to avoid too many // EVENT(onTimeUpdate) logs. _video.addEventListener('timeupdate', onTimeupdate, true); } function onTimeupdate(event) { - if ( !_isClosing && _video.currentTime > ( config.duration || 2 ) ) { + if ( !_isClosing && _video.currentTime > ( config.duration || 1 ) ) { _isClosing = true; _video.removeEventListener('timeupdate', onTimeupdate ); _video.pause(); @@ -75,15 +72,11 @@ function runTest(config,qualifier) { var win = window.open( config.windowscript ); window.addEventListener('message', test.step_func(function( event ) { - event.data.forEach(test.step_func(function( assertion ) { - assert_equals(assertion.actual, assertion.expected, assertion.message); - })); win.close(); - test.done(); })); @@ -91,7 +84,6 @@ function runTest(config,qualifier) { delete config.messagehandler; win.onload = function() { - win.postMessage( { config: config, sessionId: _sessionId }, '*' ); } } @@ -100,14 +92,11 @@ function runTest(config,qualifier) { return access.createMediaKeys(); }).then(function(mediaKeys) { _mediaKeys = mediaKeys; - - _video.setMediaKeys( mediaKeys ); - + return _video.setMediaKeys( mediaKeys ); + }).then(function(){ _mediaKeySession = _mediaKeys.createSession( 'persistent-usage-record' ); - waitForEventAndRunStep('encrypted', _video, onEncrypted, test); waitForEventAndRunStep('playing', _video, onPlaying, test); - }).then(function() { return config.servercertificate ? _mediaKeys.setServerCertificate( config.servercertificate ) : true; }).then(function( success ) { return testmediasource(config); @@ -115,8 +104,6 @@ function runTest(config,qualifier) { _mediaSource = source; _video.src = URL.createObjectURL(_mediaSource); _video.play(); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); }, testname); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-events.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-events.js index ea835a17ae5..095fdba591a 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-events.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-events.js @@ -11,24 +11,23 @@ function runTest(config,qualifier) { sessionTypes: [ 'temporary' ] }; async_test( function( test ) { - var _video = config.video, _mediaKeys, _mediaKeySession, _mediaSource, - _allKeysUsableEvent = false, - _playingEvent = false, _timeupdateEvent = false, _events = [ ]; + function onFailure(error) { + forceTestFailureFromPromise(test, error); + } + function onMessage(event) { assert_equals( event.target, _mediaKeySession ); assert_true( event instanceof window.MediaKeyMessageEvent ); assert_equals( event.type, 'message'); - assert_any( assert_equals, - event.messageType, - [ 'license-request', 'individualization-request' ] ); + assert_in_array( event.messageType, [ 'license-request', 'individualization-request' ] ); if ( event.messageType !== 'individualization-request' ) { _events.push( event.messageType ); @@ -36,13 +35,10 @@ function runTest(config,qualifier) { config.messagehandler( event.messageType, event.message ).then( function( response ) { _events.push( 'license-response' ); - waitForEventAndRunStep('keystatuseschange', _mediaKeySession, onKeyStatusesChange, test); _mediaKeySession.update( response ).then( function() { _events.push('updated'); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); }); } @@ -50,24 +46,21 @@ function runTest(config,qualifier) { assert_equals(event.target, _mediaKeySession ); assert_true(event instanceof window.Event ); assert_equals(event.type, 'keystatuseschange' ); - var hasKeys = false, pendingKeys = false; _mediaKeySession.keyStatuses.forEach( function( value, keyid ) { assert_any( assert_equals, value, [ 'status-pending', 'usable' ] ); - hasKeys = true; pendingKeys = pendingKeys || ( value === 'status-pending' ); }); - if ( !_allKeysUsableEvent && hasKeys && !pendingKeys ) { - _allKeysUsableEvent = true; - _events.push( 'allkeysusable' ); - _video.setMediaKeys(_mediaKeys); - } - if ( !hasKeys ) { _events.push( 'emptykeyslist' ); + } else if (!pendingKeys ) { + _events.push( 'allkeysusable' ); + _video.setMediaKeys(_mediaKeys).catch(onFailure); + } else { + assert_unreached('unexpected ' + event.type + ' event'); } } @@ -80,17 +73,12 @@ function runTest(config,qualifier) { _mediaKeySession.generateRequest( config.initData ? config.initDataType : event.initDataType, config.initData || event.initData ).then( function() { _events.push( 'generaterequest' ); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); } function onClosed(event) { - _events.push( 'closed-promise' ); - setTimeout( test.step_func( function() { - assert_array_equals( _events, [ 'generaterequest', @@ -104,30 +92,23 @@ function runTest(config,qualifier) { 'emptykeyslist' ], "Expected events sequence" ); - - _video.src = ""; - _video.setMediaKeys( null ).then(function(){ - test.done(); - }); + test.done(); } ), 0 ); } function onTimeupdate(event) { - if ( _video.currentTime > ( config.duration || 2 ) && !_timeupdateEvent ) { + if ( _video.currentTime > ( config.duration || 1 ) && !_timeupdateEvent ) { _timeupdateEvent = true; _video.pause(); _mediaKeySession.closed.then( test.step_func( onClosed ) ); _mediaKeySession.close().then( function() { _events.push( 'closed' ); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); } } function onPlaying(event) { - _playingEvent = true; _events.push( 'playing' ); // Not using waitForEventAndRunStep() to avoid too many @@ -149,8 +130,6 @@ function runTest(config,qualifier) { _mediaSource = source; _video.src = URL.createObjectURL(_mediaSource); _video.play(); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); }, testname); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multikey-multisession.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multikey-multisession.js index c649960f035..afea97fc121 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multikey-multisession.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multikey-multisession.js @@ -15,44 +15,47 @@ function runTest(config,qualifier) { var _video = config.video, _mediaKeys, - _mediaKeySessions = [ ], - _mediaSource; + _mediaKeySessions = [ ]; + + function onFailure( error ) { + forceTestFailureFromPromise(test, error); + } function onMessage(event) { + consoleWrite( "message " + event.messageType ); assert_any( assert_equals, event.target, _mediaKeySessions ); assert_true( event instanceof window.MediaKeyMessageEvent ); assert_equals( event.type, 'message'); + assert_in_array( event.messageType, [ 'license-request', 'individualization-request' ] ); - assert_any( assert_equals, - event.messageType, - [ 'license-request', 'individualization-request' ] ); - - config.messagehandler( event.messageType, event.message ) - .then( function( response ) { - - event.target.update( response ) - .catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + config.messagehandler( event.messageType, event.message ).then( function( response ) { + event.target.update( response ).catch(onFailure); }); } + function onWaitingForKey(event) { + consoleWrite( "waitingforkey"); + } + function onPlaying(event) { + consoleWrite( "playing"); + waitForEventAndRunStep('pause', _video, onStopped, test); + waitForEventAndRunStep('waiting', _video, onStopped, test); + waitForEventAndRunStep('stalled', _video, onStopped, test); + } - // Not using waitForEventAndRunStep() to avoid too many - // EVENT(onTimeUpdate) logs. - _video.addEventListener('timeupdate', onTimeupdate, true); - + function onStopped(event) { + consoleWrite( event.type ); + if ( _mediaKeySessions.length < config.initData.length ) { + var mediaKeySession = _mediaKeys.createSession( 'temporary' ); + waitForEventAndRunStep('message', mediaKeySession, onMessage, test); + mediaKeySession.generateRequest( config.initDataType, config.initData[ _mediaKeySessions.length ] ).catch(onFailure); + _mediaKeySessions.push( mediaKeySession ); + } } function onTimeupdate(event) { - if ( _video.currentTime > ( config.duration || 2 ) ) { - - consoleWrite("Session 0:"); - dumpKeyStatuses( _mediaKeySessions[ 0 ].keyStatuses ); - consoleWrite("Session 1:"); - dumpKeyStatuses( _mediaKeySessions[ 1 ].keyStatuses ); - + if ( _video.currentTime > ( config.duration || 1 ) ) { _video.removeEventListener('timeupdate', onTimeupdate); _video.pause(); test.done(); @@ -63,34 +66,24 @@ function runTest(config,qualifier) { return access.createMediaKeys(); }).then(function(mediaKeys) { _mediaKeys = mediaKeys; - - _video.setMediaKeys(_mediaKeys); - + return _video.setMediaKeys(_mediaKeys); + }).then(function(){ + waitForEventAndRunStep('waitingforkey', _video, onWaitingForKey, test); waitForEventAndRunStep('playing', _video, onPlaying, test); - config.initData.forEach( function( initData ) { - - var mediaKeySession = _mediaKeys.createSession( 'temporary' ); - - waitForEventAndRunStep('message', mediaKeySession, onMessage, test); - - _mediaKeySessions.push( mediaKeySession ); - - mediaKeySession.generateRequest( config.initDataType, initData ) - .catch(function(error) { - forceTestFailureFromPromise(test, error); - }); - - } ); + // Not using waitForEventAndRunStep() to avoid too many + // EVENT(onTimeUpdate) logs. + _video.addEventListener('timeupdate', onTimeupdate, true); + var mediaKeySession = _mediaKeys.createSession( 'temporary' ); + waitForEventAndRunStep('message', mediaKeySession, onMessage, test); + _mediaKeySessions.push( mediaKeySession ); + return mediaKeySession.generateRequest( config.initDataType, config.initData[ 0 ] ); }).then(function() { return testmediasource(config); }).then(function(source) { - _mediaSource = source; - _video.src = URL.createObjectURL(_mediaSource); + _video.src = URL.createObjectURL(source); _video.play(); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); }, testname); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multikey.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multisession.js similarity index 54% rename from tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multikey.js rename to tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multisession.js index 07cdaa3f5a3..e4cf7148c67 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multikey.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-multisession.js @@ -1,9 +1,11 @@ function runTest(config,qualifier) { + // This test assumes one session is required for each provided initData + var testname = testnamePrefix( qualifier, config.keysystem ) + ', temporary, ' + /video\/([^;]*)/.exec( config.videoType )[ 1 ] - + ', playback with multiple keys, single session, ' + + ', playback with multiple sessions, ' + config.testcase; var configuration = { initDataTypes: [ config.initDataType ], @@ -18,36 +20,8 @@ function runTest(config,qualifier) { _mediaKeySessions = [ ], _mediaSource; - function onEncrypted(event) { - assert_equals(event.target, _video); - assert_true(event instanceof window.MediaEncryptedEvent); - assert_equals(event.type, 'encrypted'); - - // Only create a session for the first encrypted event - if ( _mediaKeySessions.length > 0 ) return; - - var mediaKeySession = _mediaKeys.createSession( 'temporary' ); - - waitForEventAndRunStep('message', mediaKeySession, onMessage, test); - - var initDataType, initData; - if ( config.initDataType && config.initData ) - { - initDataType = config.initDataType; - initData = config.initData; - } - else - { - initDataType = event.initDataType; - initData = event.initData; - } - - _mediaKeySessions.push( mediaKeySession ); - - mediaKeySession.generateRequest( initDataType, initData ) - .catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + function onFailure( error ) { + forceTestFailureFromPromise(test, error); } function onMessage(event) { @@ -55,33 +29,21 @@ function runTest(config,qualifier) { assert_true( event instanceof window.MediaKeyMessageEvent ); assert_equals( event.type, 'message'); - assert_any( assert_equals, - event.messageType, - [ 'license-request', 'individualization-request' ] ); + assert_in_array( event.messageType, [ 'license-request', 'individualization-request' ] ); - config.messagehandler( event.messageType, event.message ) - .then( function( response ) { - - event.target.update( response ) - .catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + config.messagehandler( event.messageType, event.message ).then( function( response ) { + event.target.update( response ).catch(onFailure); }); } function onPlaying(event) { - // Not using waitForEventAndRunStep() to avoid too many // EVENT(onTimeUpdate) logs. _video.addEventListener('timeupdate', onTimeupdate, true); } function onTimeupdate(event) { - if ( _video.currentTime > ( config.duration || 2 ) ) { - - consoleWrite("Session 0:"); - dumpKeyStatuses( _mediaKeySessions[ 0 ].keyStatuses ); - + if ( _video.currentTime > ( config.duration || 1 ) ) { _video.removeEventListener('timeupdate', onTimeupdate); _video.pause(); test.done(); @@ -92,20 +54,21 @@ function runTest(config,qualifier) { return access.createMediaKeys(); }).then(function(mediaKeys) { _mediaKeys = mediaKeys; - - _video.setMediaKeys(_mediaKeys); - - waitForEventAndRunStep('encrypted', _video, onEncrypted, test); + return _video.setMediaKeys(_mediaKeys); + }).then(function() { waitForEventAndRunStep('playing', _video, onPlaying, test); - }).then(function() { + config.initData.forEach( function( initData ) { + var mediaKeySession = _mediaKeys.createSession( 'temporary' ); + waitForEventAndRunStep('message', mediaKeySession, onMessage, test); + _mediaKeySessions.push( mediaKeySession ); + mediaKeySession.generateRequest( config.initDataType, initData ).catch( onFailure ); + } ); return testmediasource(config); }).then(function(source) { _mediaSource = source; _video.src = URL.createObjectURL(_mediaSource); _video.play(); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); }, testname); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-setMediaKeys.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-setMediaKeys.js index f24c204be7a..4939daad596 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-setMediaKeys.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-setMediaKeys.js @@ -67,7 +67,7 @@ function runTest(config,qualifier) { } function onTimeupdate(event) { - if ( _video.currentTime > ( config.duration || 2 ) ) { + if ( _video.currentTime > ( config.duration || 1 ) ) { _video.pause(); test.done(); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-two-videos.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-two-videos.js index 6d9f4630854..2e6aea3b19e 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-two-videos.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-two-videos.js @@ -13,7 +13,6 @@ function runTest(config,qualifier) { promise_test(function(test) { var promises = config.video.map( function( video ) { return play_video_as_promise( test, video ); } ); - return Promise.all(promises); }, testname ); @@ -23,6 +22,10 @@ function runTest(config,qualifier) { _mediaKeySession, _mediaSource; + function onFailure(error) { + forceTestFailureFromPromise(test, error); + } + function onMessage(event) { assert_equals( event.target, _mediaKeySession ); assert_true( event instanceof window.MediaKeyMessageEvent ); @@ -33,10 +36,7 @@ function runTest(config,qualifier) { [ 'license-request', 'individualization-request' ] ); config.messagehandler( event.messageType, event.message ).then( function( response ) { - - _mediaKeySession.update( response ).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + _mediaKeySession.update( response ).catch(onFailure); }); } @@ -49,18 +49,14 @@ function runTest(config,qualifier) { _mediaKeySession.generateRequest( config.initData ? config.initDataType : event.initDataType, config.initData || event.initData ) - .catch(function(error) { - forceTestFailureFromPromise(test, error); - }); - - _video.setMediaKeys(_mediaKeys); + .catch(onFailure); } function wait_for_timeupdate_message(video) { return new Promise(function(resolve) { video.addEventListener('timeupdate', function listener(event) { - if ( event.target.currentTime > ( config.duration || 2 ) ) + if ( event.target.currentTime > ( config.duration || 1 ) ) { video.removeEventListener('timeupdate', listener); resolve(event); @@ -73,19 +69,16 @@ function runTest(config,qualifier) { return access.createMediaKeys(); }).then(function(mediaKeys) { _mediaKeys = mediaKeys; - _mediaKeySession = _mediaKeys.createSession( 'temporary' ); - - waitForEventAndRunStep('encrypted', _video, onEncrypted, test); - + return _video.setMediaKeys(_mediaKeys); }).then(function() { + _mediaKeySession = _mediaKeys.createSession( 'temporary' ); + waitForEventAndRunStep('encrypted', _video, onEncrypted, test); return testmediasource(config); }).then(function(source) { _mediaSource = source; _video.src = URL.createObjectURL(_mediaSource); _video.play(); return wait_for_timeupdate_message(_video); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); } } diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-waitingforkey.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-waitingforkey.js index fad9ffc698c..0edd04a3a2c 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-waitingforkey.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-waitingforkey.js @@ -41,7 +41,7 @@ function runTest(config,qualifier) { } function onTimeupdate(event) { - if ( _video.currentTime > ( config.duration || 2 ) ) { + if ( _video.currentTime > ( config.duration || 1 ) ) { assert_equals( _mediaKeySessions.length, config.initData.length ); _video.removeEventListener('timeupdate', onTimeupdate); _video.pause(); @@ -60,7 +60,6 @@ function runTest(config,qualifier) { // Not using waitForEventAndRunStep() to avoid too many // EVENT(onTimeUpdate) logs. _video.addEventListener('timeupdate', onTimeupdate, true); - }).then(function() { return testmediasource(config); }).then(function(source) { _mediaSource = source; diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary.js index 9b12598647b..bd77ab5efdd 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary.js +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary.js @@ -3,7 +3,7 @@ function runTest(config,qualifier) { var testname = testnamePrefix( qualifier, config.keysystem ) + ', temporary, ' + /video\/([^;]*)/.exec( config.videoType )[ 1 ] - + ', playback'; + + ', playback, ' + config.testcase; var configuration = { initDataTypes: [ config.initDataType ], audioCapabilities: [ { contentType: config.audioType } ], @@ -17,6 +17,26 @@ function runTest(config,qualifier) { _mediaKeySession, _mediaSource; + function onFailure(error) { + forceTestFailureFromPromise(test, error); + } + + function onEncrypted(event) { + assert_equals(event.target, _video); + assert_true(event instanceof window.MediaEncryptedEvent); + assert_equals(event.type, 'encrypted'); + + // Only create the session for the firs encrypted event + if ( _mediaKeySession !== undefined ) return; + + var initDataType = config.initData ? config.initDataType : event.initDataType; + var initData = config.initData || event.initData; + + _mediaKeySession = _mediaKeys.createSession( 'temporary' ); + waitForEventAndRunStep('message', _mediaKeySession, onMessage, test); + _mediaKeySession.generateRequest( initDataType, initData ).catch(onFailure); + } + function onMessage(event) { assert_equals( event.target, _mediaKeySession ); assert_true( event instanceof window.MediaKeyMessageEvent ); @@ -27,57 +47,36 @@ function runTest(config,qualifier) { [ 'license-request', 'individualization-request' ] ); config.messagehandler( event.messageType, event.message ).then( function( response ) { - - _mediaKeySession.update( response ).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + event.target.update( response ).catch(onFailure); }); } - function onEncrypted(event) { - assert_equals(event.target, _video); - assert_true(event instanceof window.MediaEncryptedEvent); - assert_equals(event.type, 'encrypted'); - - waitForEventAndRunStep('message', _mediaKeySession, onMessage, test); - _mediaKeySession.generateRequest( config.initData ? config.initDataType : event.initDataType, - config.initData || event.initData ) - .catch(function(error) { - forceTestFailureFromPromise(test, error); - }); - - _video.setMediaKeys(_mediaKeys); - } - - function onTimeupdate(event) { - if ( _video.currentTime > ( config.duration || 2 ) ) { - _video.pause(); - test.done(); - } - } - function onPlaying(event) { // Not using waitForEventAndRunStep() to avoid too many // EVENT(onTimeUpdate) logs. _video.addEventListener('timeupdate', onTimeupdate, true); } + function onTimeupdate(event) { + if ( _video.currentTime > ( config.duration || 1 ) ) { + _video.pause(); + test.done(); + } + } + navigator.requestMediaKeySystemAccess(config.keysystem, [ configuration ]).then(function(access) { return access.createMediaKeys(); }).then(function(mediaKeys) { _mediaKeys = mediaKeys; - _mediaKeySession = _mediaKeys.createSession( 'temporary' ); - + return _video.setMediaKeys(_mediaKeys); + }).then(function(){ waitForEventAndRunStep('encrypted', _video, onEncrypted, test); waitForEventAndRunStep('playing', _video, onPlaying, test); - }).then(function() { return testmediasource(config); }).then(function(source) { _mediaSource = source; _video.src = URL.createObjectURL(_mediaSource); _video.play(); - }).catch(function(error) { - forceTestFailureFromPromise(test, error); - }); + }).catch(onFailure); }, testname); } diff --git a/tests/wpt/web-platform-tests/encrypted-media/util/drm-messagehandler.js b/tests/wpt/web-platform-tests/encrypted-media/util/drm-messagehandler.js index ab5da718bd4..c56925c263e 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/util/drm-messagehandler.js +++ b/tests/wpt/web-platform-tests/encrypted-media/util/drm-messagehandler.js @@ -11,8 +11,7 @@ drmconfig = { "com.widevine.alpha": [ { "serverURL": "https://lic.staging.drmtoday.com/license-proxy-widevine/cenc/", "servertype" : "drmtoday", - "userId" : "12345", - "merchant" : "cablelabs", + "merchant" : "w3c-eme-test", } ], "com.microsoft.playready": [ { "serverURL": "http://playready-testserver.azurewebsites.net/rightsmanager.asmx", @@ -30,8 +29,7 @@ drmconfig = { "serverURL": "https://lic.staging.drmtoday.com/license-proxy-headerauth/drmtoday/RightsManager.asmx", "servertype" : "drmtoday", "sessionTypes" : [ "temporary", "persistent-usage-record", "persistent-license" ], - "userId" : "12345", - "merchant" : "cablelabs" + "merchant" : "w3c-eme-test" } ] }; @@ -135,19 +133,9 @@ MessageHandler.prototype.messagehandler = function messagehandler( messageType, return serverURL; }, getCustomHeaders : function( drmconfig, sessionType, messageType ) { - - var customToken; - if ( messageType === 'license-request' ) { - var customToken = { outputProtection: { digital : false, analogue: false, enforce: false }, - profile: { purchase: { } }, - storeLicense: ( sessionType === 'persistent-license' ) }; - } else { - customToken = {}; - } - - var customHeader = { userId: drmconfig.userId, - merchant: drmconfig.merchant, - sessionId: btoa( JSON.stringify( customToken )) }; + var customHeader = { merchant: drmconfig.merchant, + userId: "purchase", + sessionId: "a0d0f0p" + ( ( sessionType === 'persistent-license' ) ? "1" : "0" ) }; return { "dt-custom-data" : btoa( JSON.stringify( customHeader ) ) }; } }, diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/accept-header.js b/tests/wpt/web-platform-tests/fetch/api/basic/accept-header.js index 33226e8562a..3cf9ba3b001 100644 --- a/tests/wpt/web-platform-tests/fetch/api/basic/accept-header.js +++ b/tests/wpt/web-platform-tests/fetch/api/basic/accept-header.js @@ -11,4 +11,28 @@ promise_test(function() { }); }, "Request through fetch should have 'accept' header with value '*/*'"); +promise_test(function() { + return fetch(RESOURCES_DIR + "inspect-headers.py?headers=Accept", {"headers": [["Accept", "custom/*"]]}).then(function(response) { + assert_equals(response.status, 200, "HTTP status is 200"); + assert_equals(response.type , "basic", "Response's type is basic"); + assert_equals(response.headers.get("x-request-accept"), "custom/*", "Request has accept header with value 'custom/*'"); + }); +}, "Request through fetch should have 'accept' header with value 'custom/*'"); + +promise_test(function() { + return fetch(RESOURCES_DIR + "inspect-headers.py?headers=Accept-Language").then(function(response) { + assert_equals(response.status, 200, "HTTP status is 200"); + assert_equals(response.type , "basic", "Response's type is basic"); + assert_true(response.headers.has("x-request-accept-language")); + }); +}, "Request through fetch should have a 'accept-language' header"); + +promise_test(function() { + return fetch(RESOURCES_DIR + "inspect-headers.py?headers=Accept-Language", {"headers": [["Accept-Language", "bzh"]]}).then(function(response) { + assert_equals(response.status, 200, "HTTP status is 200"); + assert_equals(response.type , "basic", "Response's type is basic"); + assert_equals(response.headers.get("x-request-accept-language"), "bzh", "Request has accept header with value 'bzh'"); + }); +}, "Request through fetch should have 'accept-language' header with value 'bzh'"); + done(); diff --git a/tests/wpt/web-platform-tests/fetch/api/cors/cors-preflight-referrer.js b/tests/wpt/web-platform-tests/fetch/api/cors/cors-preflight-referrer.js index 1039fcd1351..bb6505058e2 100644 --- a/tests/wpt/web-platform-tests/fetch/api/cors/cors-preflight-referrer.js +++ b/tests/wpt/web-platform-tests/fetch/api/cors/cors-preflight-referrer.js @@ -5,12 +5,15 @@ if (this.document === undefined) { importScripts("../resources/utils.js"); } -function corsPreflightReferrer(desc, corsUrl, referrerPolicy, expectedReferrer) { +function corsPreflightReferrer(desc, corsUrl, referrerPolicy, referrer, expectedReferrer) { var uuid_token = token(); var url = corsUrl; var urlParameters = "?token=" + uuid_token + "&max_age=0"; var requestInit = {"mode": "cors", "referrerPolicy": referrerPolicy}; + if (referrer) + requestInit.referrer = referrer; + /* Force preflight */ requestInit["headers"] = {"x-force-preflight": ""}; urlParameters += "&allow_headers=x-force-preflight"; @@ -23,19 +26,28 @@ function corsPreflightReferrer(desc, corsUrl, referrerPolicy, expectedReferrer) assert_equals(resp.headers.get("x-did-preflight"), "1", "Preflight request has been made"); assert_equals(resp.headers.get("x-preflight-referrer"), expectedReferrer, "Preflight's referrer is correct"); assert_equals(resp.headers.get("x-referrer"), expectedReferrer, "Request's referrer is correct"); + assert_equals(resp.headers.get("x-control-request-headers"), "", "Access-Control-Allow-Headers value"); }); }); - }, desc); + }, desc + " and referrer: " + (referrer ? "'" + referrer + "'" : "default")); } var corsUrl = get_host_info().HTTP_REMOTE_ORIGIN + dirname(location.pathname) + RESOURCES_DIR + "preflight.py"; var origin = get_host_info().HTTP_ORIGIN + "/"; -corsPreflightReferrer("Referrer policy: no-referrer", corsUrl, "no-referrer", ""); -corsPreflightReferrer("Referrer policy: \"\"", corsUrl, "", location.toString()) +corsPreflightReferrer("Referrer policy: no-referrer", corsUrl, "no-referrer", undefined, ""); +corsPreflightReferrer("Referrer policy: no-referrer", corsUrl, "no-referrer", "myreferrer", ""); -corsPreflightReferrer("Referrer policy: origin", corsUrl, "origin", origin); -corsPreflightReferrer("Referrer policy: origin-when-cross-origin", corsUrl, "origin-when-cross-origin", origin); -corsPreflightReferrer("Referrer policy: unsafe-url", corsUrl, "unsafe-url", location.toString()); +corsPreflightReferrer("Referrer policy: \"\"", corsUrl, "", undefined, location.toString()) +corsPreflightReferrer("Referrer policy: \"\"", corsUrl, "", "myreferrer", new URL("myreferrer", location).toString()); + +corsPreflightReferrer("Referrer policy: origin", corsUrl, "origin", undefined, origin); +corsPreflightReferrer("Referrer policy: origin", corsUrl, "origin", "myreferrer", origin); + +corsPreflightReferrer("Referrer policy: origin-when-cross-origin", corsUrl, "origin-when-cross-origin", undefined, origin); +corsPreflightReferrer("Referrer policy: origin-when-cross-origin", corsUrl, "origin-when-cross-origin", "myreferrer", origin); + +corsPreflightReferrer("Referrer policy: unsafe-url", corsUrl, "unsafe-url", undefined, location.toString()); +corsPreflightReferrer("Referrer policy: unsafe-url", corsUrl, "unsafe-url", "myreferrer", new URL("myreferrer", location).toString()); done(); diff --git a/tests/wpt/web-platform-tests/fetch/api/cors/cors-preflight.js b/tests/wpt/web-platform-tests/fetch/api/cors/cors-preflight.js index d89c7b9b99d..24366ff2009 100644 --- a/tests/wpt/web-platform-tests/fetch/api/cors/cors-preflight.js +++ b/tests/wpt/web-platform-tests/fetch/api/cors/cors-preflight.js @@ -52,7 +52,7 @@ function corsPreflight(desc, corsUrl, method, allowed, headers, safeHeaders) { assert_in_array(header[0].toLowerCase(), actualHeaders, "Preflight asked permission for header: " + header); let accessControlAllowHeaders = headerNames(headers).sort().join(","); - assert_equals(resp.headers.get("x-control-request-headers").replace(new RegExp(" ", "g"), ""), accessControlAllowHeaders, "Access-Control-Allow-Headers value"); + assert_equals(resp.headers.get("x-control-request-headers"), accessControlAllowHeaders, "Access-Control-Allow-Headers value"); return fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token); } }); diff --git a/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-to-dataurl.js b/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-to-dataurl.js index 89779c7d972..c3bae3f6bb0 100644 --- a/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-to-dataurl.js +++ b/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-to-dataurl.js @@ -7,29 +7,24 @@ var dataURL = "data:text/plain;base64,cmVzcG9uc2UncyBib2R5"; var body = "response's body"; var contentType = "text/plain"; -function redirectDataURL(desc, redirectUrl, mode, isOK) { +function redirectDataURL(desc, redirectUrl, mode) { var url = redirectUrl + "?cors&location=" + encodeURIComponent(dataURL); var requestInit = {"mode": mode}; promise_test(function(test) { - var promise = fetch(url, requestInit).then(function(response) { - assert_equals(response.type, "opaque", "Response's type should be opaque"); - assert_equals(response.url, "", "Response URL is empty"); - assert_equals(response.status, 0, "Response's status should be 0"); - }); - return isOK ? promise : promise_rejects(test, new TypeError(), promise); + return promise_rejects(test, new TypeError(), fetch(url, requestInit)); }, desc); } var redirUrl = get_host_info().HTTP_ORIGIN + "/fetch/api/resources/redirect.py"; var corsRedirUrl = get_host_info().HTTP_REMOTE_ORIGIN + "/fetch/api/resources/redirect.py"; -redirectDataURL("Testing data URL loading after same-origin redirection (cors mode)", redirUrl, "cors", false); -redirectDataURL("Testing data URL loading after same-origin redirection (no-cors mode)", redirUrl, "no-cors", true); -redirectDataURL("Testing data URL loading after same-origin redirection (same-origin mode)", redirUrl, "same-origin", false); +redirectDataURL("Testing data URL loading after same-origin redirection (cors mode)", redirUrl, "cors"); +redirectDataURL("Testing data URL loading after same-origin redirection (no-cors mode)", redirUrl, "no-cors"); +redirectDataURL("Testing data URL loading after same-origin redirection (same-origin mode)", redirUrl, "same-origin"); -redirectDataURL("Testing data URL loading after cross-origin redirection (cors mode)", corsRedirUrl, "cors", false); -redirectDataURL("Testing data URL loading after cross-origin redirection (no-cors mode)", corsRedirUrl, "no-cors", true); +redirectDataURL("Testing data URL loading after cross-origin redirection (cors mode)", corsRedirUrl, "cors"); +redirectDataURL("Testing data URL loading after cross-origin redirection (no-cors mode)", corsRedirUrl, "no-cors"); done(); diff --git a/tests/wpt/web-platform-tests/fullscreen/OWNERS b/tests/wpt/web-platform-tests/fullscreen/OWNERS new file mode 100644 index 00000000000..dd7cb4169b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/OWNERS @@ -0,0 +1,2 @@ +@foolip +@upsuper diff --git a/tests/wpt/web-platform-tests/fullscreen/api/document-fullscreen-enabled.html b/tests/wpt/web-platform-tests/fullscreen/api/document-fullscreen-enabled.html new file mode 100644 index 00000000000..d45bb1576e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/document-fullscreen-enabled.html @@ -0,0 +1,17 @@ + +Document.fullscreenEnabled + + +
+ + + diff --git a/tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenerror.html b/tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenerror.html new file mode 100644 index 00000000000..f5eaaf44146 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenerror.html @@ -0,0 +1,13 @@ + +Document.onfullscreenerror + + +
+ 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 99f944924bc..abb5eae4a61 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 @@ -299,7 +299,7 @@ addTest(function() { checkFunction(get_self_parent, Function.prototype); checkFunction(get_parent_A, Function.prototype); checkFunction(get_parent_B, B.Function.prototype); -}, "Same-origin obsevers get different accessors for cross-origin Window"); +}, "Same-origin observers get different accessors for cross-origin Window"); addTest(function() { var set_self_href = Object.getOwnPropertyDescriptor(window.location, 'href').set; diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/origin-of-data-document.html b/tests/wpt/web-platform-tests/html/browsers/origin/origin-of-data-document.html new file mode 100644 index 00000000000..cedb2513fbd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/origin/origin-of-data-document.html @@ -0,0 +1,28 @@ + + + + + Origin of document produced from a 'data:' URL + + + + + + + + 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.sub.html index b0e16274aaa..76f1b64de23 100644 --- 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.sub.html @@ -102,26 +102,6 @@ document.body.appendChild(s); finish('nested'); - - - + + diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-style-element/style_scoped.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-style-element/style_scoped.html deleted file mode 100644 index d18e925ff4b..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-style-element/style_scoped.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - HTML Test: The scoped attribute must apply the style information only to its parent element - - - - - - - - -
-
-
- -
- - - diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/audio_loop_current_media_controller-manual.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/audio_loop_current_media_controller-manual.html deleted file mode 100644 index c76377022fc..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/audio_loop_current_media_controller-manual.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - Audio Test: audio_loop_current_media_controller - - - - - - - -

Test passes if the audio doesn't repeatly play and the text 'The user agent doesn't support media element.' does not appear anywhere on this page

- - - - diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/historical.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/historical.html index 99f18b69fc7..45192340858 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/historical.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/historical.html @@ -42,4 +42,12 @@ test(function() { new TextTrackCue(0, 0, ''); }); }, 'TextTrackCue constructor should not be supported'); + +// added in https://github.com/whatwg/html/commit/66c5b32240c202c74f475872e7ea2cd163777b4a +// removed in https://github.com/whatwg/html/commit/634698e70ea4586d58c989fa7d2cbfcad20d33e6 +t('mediaGroup'); +t('controller'); +test(function() { + assert_false('MediaController' in window); +}, 'MediaController constructor should not be supported'); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html index cc703861a41..4089913cbdd 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html @@ -5,73 +5,39 @@
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/currentTime.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/currentTime.html index 0dce7c5569a..e9b65899412 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/currentTime.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/currentTime.html @@ -10,14 +10,6 @@ test(function() { assert_equals(v.currentTime, 0); }, 'currentTime initial value'); -test(function() { - var v = document.createElement('video'); - v.controller = new MediaController(); - assert_true(v.controller instanceof MediaController); - assert_throws('InvalidStateError', function() { v.currentTime = 1; }); - assert_false(v.seeking); -}, 'setting currentTime with a media controller present'); - test(function() { var v = document.createElement('video'); assert_equals(v.readyState, v.HAVE_NOTHING); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/synchronising-multiple-media-elements/media-controllers/task-source.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/synchronising-multiple-media-elements/media-controllers/task-source.html deleted file mode 100644 index 798890da6e6..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/synchronising-multiple-media-elements/media-controllers/task-source.html +++ /dev/null @@ -1,27 +0,0 @@ - -MediaController events task source - - -
- diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_current_media_controller-manual.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_current_media_controller-manual.html deleted file mode 100644 index 590ab93089c..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_current_media_controller-manual.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - Video Test: video_loop_current_media_controller - - - - - - - -

Test passes if the video doesn't repeatly play and the text 'The user agent doesn't support media element.' does not appear anywhere on this page

- - - - diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/area-shape.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/area-shape.html index 24942273b44..1ad0690f9e7 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/area-shape.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/area-shape.html @@ -20,6 +20,9 @@ var tests = [ {desc: 'empty string', shape: 'default', coords: "", hit: hitAll}, {desc: 'omitted coords', shape: 'DEFAULT', coords: null, hit: hitAll}, + {desc: 'simple', shape: 'rect', coords: "2,2,10,10", hit: hitRect}, + {desc: 'simple', shape: 'rectangle', coords: "2,2,10,10", hit: hitRect}, + {desc: 'simple', shape: 'circle', coords: "20,40,10", hit: hitCircle}, {desc: 'simple', shape: 'circ', coords: "20,40,10", hit: hitCircle}, {desc: 'simple', shape: 'CIRCLE', coords: "20,40,10", hit: hitCircle}, diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/historical.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/historical.html index bf96e9e005b..58ebc5769c1 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/historical.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/historical.html @@ -5,13 +5,73 @@
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/historical.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/historical.html new file mode 100644 index 00000000000..850a52f4649 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/historical.html @@ -0,0 +1,16 @@ + +Historical iframe element features should not be supported + + +
+ diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-checkValidity.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-checkValidity.html index 9ef5ddd819a..429fa32819c 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-checkValidity.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-checkValidity.html @@ -44,12 +44,12 @@ }, { tag: "input", - types: ["datetime"], + types: ["datetime-local"], testData: [ {conditions: {}, expected: true, name: "[target] no constraint"}, - {conditions: {max: "2000-01-01T12:00:00Z", value: "2001-01-01T12:00:00Z"}, expected: false, name: "[target] suffering from an overflow"}, - {conditions: {min: "2001-01-01T12:00:00Z", value: "2000-01-01T12:00:00Z"}, expected: false, name: "[target] suffering from an underflow"}, - {conditions: {step: 2 * 60 * 1000, value: "2001-01-01T12:03:00Z"}, expected: false, name: "[target] suffering from a step mismatch"}, + {conditions: {max: "2000-01-01T12:00:00", value: "2001-01-01T12:00:00"}, expected: false, name: "[target] suffering from an overflow"}, + {conditions: {min: "2001-01-01T12:00:00", value: "2000-01-01T12:00:00"}, expected: false, name: "[target] suffering from an underflow"}, + {conditions: {step: 2 * 60 * 1000, value: "2001-01-01T12:03:00"}, expected: false, name: "[target] suffering from a step mismatch"}, {conditions: {required: true, value: ""}, expected: false, name: "[target] suffering from being missing"} ] }, @@ -71,7 +71,7 @@ {conditions: {}, expected: true, name: "[target] no constraint"}, {conditions: {max: "2000-01", value: "2001-01"}, expected: false, name: "[target] suffering from an overflow"}, {conditions: {min: "2001-01", value: "2000-01"}, expected: false, name: "[target] suffering from an underflow"}, - {conditions: {step: 2 * 1 * 1, value: "2001-03"}, expected: false, name: "[target] suffering from a step mismatch"}, + {conditions: {step: 3 * 1 * 1, value: "2001-03"}, expected: false, name: "[target] suffering from a step mismatch"}, {conditions: {required: true, value: ""}, expected: false, name: "[target] suffering from being missing"} ] }, diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-reportValidity.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-reportValidity.html index f69c1255510..e7f91051d8f 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-reportValidity.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-reportValidity.html @@ -44,12 +44,12 @@ }, { tag: "input", - types: ["datetime"], + types: ["datetime-local"], testData: [ {conditions: {}, expected: true, name: "[target] no constraint"}, - {conditions: {max: "2000-01-01T12:00:00Z", value: "2001-01-01T12:00:00Z"}, expected: false, name: "[target] suffering from an overflow"}, - {conditions: {min: "2001-01-01T12:00:00Z", value: "2000-01-01T12:00:00Z"}, expected: false, name: "[target] suffering from an underflow"}, - {conditions: {step: 2 * 60 * 1000, value: "2001-01-01T12:03:00Z"}, expected: false, name: "[target] suffering from a step mismatch"}, + {conditions: {max: "2000-01-01T12:00:00", value: "2001-01-01T12:00:00"}, expected: false, name: "[target] suffering from an overflow"}, + {conditions: {min: "2001-01-01T12:00:00", value: "2000-01-01T12:00:00"}, expected: false, name: "[target] suffering from an underflow"}, + {conditions: {step: 2 * 60 * 1000, value: "2001-01-01T12:03:00"}, expected: false, name: "[target] suffering from a step mismatch"}, {conditions: {required: true, value: ""}, expected: false, name: "[target] suffering from being missing"} ] }, @@ -71,7 +71,7 @@ {conditions: {}, expected: true, name: "[target] no constraint"}, {conditions: {max: "2000-01", value: "2001-01"}, expected: false, name: "[target] suffering from an overflow"}, {conditions: {min: "2001-01", value: "2000-01"}, expected: false, name: "[target] suffering from an underflow"}, - {conditions: {step: 2 * 1 * 1, value: "2001-03"}, expected: false, name: "[target] suffering from a step mismatch"}, + {conditions: {step: 3 * 1 * 1, value: "2001-03"}, expected: false, name: "[target] suffering from a step mismatch"}, {conditions: {required: true, value: ""}, expected: false, name: "[target] suffering from being missing"} ] }, diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-rangeOverflow.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-rangeOverflow.html index 2fe214265ae..ca423ef9ed7 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-rangeOverflow.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-rangeOverflow.html @@ -12,20 +12,19 @@ var testElements = [ { tag: "input", - types: ["datetime"], + types: ["datetime-local"], testData: [ - {conditions: {max: "", value: "2000-01-01T12:00:00Z"}, expected: false, name: "[target] The max attribute is not set"}, - {conditions: {max: "2000-01-01T12:00:00Z", value: ""}, expected: false, name: "[target] Value is empty string"}, - {conditions: {max: "2000-01-01 12:00:00Z", value: "2001-01-01T12:00:00Z"}, expected: false, name: "[target] The max attribute is an invalid global date time string"}, - {conditions: {max: "2000-01-01T12:00:00Z", value: "2000-01-01T11:00:00Z"}, expected: false, name: "[target] The max attribute is greater than the value attribute"}, - {conditions: {max: "2000-01-01T23:59:59Z", value: "2001-01-01T24:00:00Z"}, expected: false, name: "[target] The value is an invalid datetime string(hour is greater than 23)"}, - {conditions: {max: "1970-01-01T12:00Z", value: "80-01-01T12:00Z"}, expected: false, name: "[target] The value if an invalid date time string(year is two digits)"}, - {conditions: {max: "2000-01-01T12:00:00Z", value: "2001-01-01T13:00:00Z"}, expected: true, name: "[target] The value is greater than max"}, - {conditions: {max: "2000-01-01T12:00:00.1Z", value: "2000-01-01T12:00:00.2Z"}, expected: true, name: "[target] The value is greater than max(with millisecond in 1 digit)"}, - {conditions: {max: "2000-01-01T12:00:00.01Z", value: "2000-01-01T12:00:00.02Z"}, expected: true, name: "[target] The value is greater than max(with millisecond in 2 digits)"}, - {conditions: {max: "2000-01-01T12:00:00.001Z", value: "2000-01-01T12:00:00.002Z"}, expected: true, name: "[target] The value is greater than max(with millisecond in 3 digits)"}, + {conditions: {max: "", value: "2000-01-01T12:00:00"}, expected: false, name: "[target] The max attribute is not set"}, + {conditions: {max: "2000-01-01T12:00:00", value: ""}, expected: false, name: "[target] Value is empty string"}, + {conditions: {max: "2000-01-01 12:00:00", value: "2001-01-01T12:00:00"}, expected: false, name: "[target] The max attribute is an invalid local date time string"}, + {conditions: {max: "2000-01-01T12:00:00", value: "2000-01-01T11:00:00"}, expected: false, name: "[target] The max attribute is greater than the value attribute"}, + {conditions: {max: "2000-01-01T23:59:59", value: "2001-01-01T24:00:00"}, expected: false, name: "[target] The value is an invalid local date time string(hour is greater than 23)"}, + {conditions: {max: "1970-01-01T12:00", value: "80-01-01T12:00"}, expected: false, name: "[target] The value if an invalid local date time string(year is two digits)"}, + {conditions: {max: "2000-01-01T12:00:00", value: "2001-01-01T13:00:00"}, expected: true, name: "[target] The value is greater than max"}, + {conditions: {max: "2000-01-01T12:00:00.1", value: "2000-01-01T12:00:00.2"}, expected: true, name: "[target] The value is greater than max(with millisecond in 1 digit)"}, + {conditions: {max: "2000-01-01T12:00:00.01", value: "2000-01-01T12:00:00.02"}, expected: true, name: "[target] The value is greater than max(with millisecond in 2 digits)"}, + {conditions: {max: "2000-01-01T12:00:00.001", value: "2000-01-01T12:00:00.002"}, expected: true, name: "[target] The value is greater than max(with millisecond in 3 digits)"}, {conditions: {max: "2000-01-01T12:00:00", value: "10000-01-01T12:00:00"}, expected: true, name: "[target] The value is greater than max(Year is 10000 should be valid)"}, - {conditions: {max: "8592-01-01T02:09+02:09", value: "8593-01-01T02:09+02:09"}, expected: true, name: "[target] The value is greater than max(with timezone)"} ] }, { diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-rangeUnderflow.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-rangeUnderflow.html index 567345c3e28..d6bf86060b1 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-rangeUnderflow.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-rangeUnderflow.html @@ -12,20 +12,20 @@ var testElements = [ { tag: "input", - types: ["datetime"], + types: ["datetime-local"], testData: [ - {conditions: {min: "", value: "2000-01-01T12:00:00Z"}, expected: false, name: "[target] The min attribute is not set"}, - {conditions: {min: "2000-01-01T12:00:00Z", value: ""}, expected: false, name: "[target] Value is empty string"}, - {conditions: {min: "2001-01-01 12:00:00Z", value: "2000-01-01T12:00:00Z"}, expected: false, name: "[target] The min attribute is an invalid global date time string"}, - {conditions: {min: "2000-01-01T11:00:00Z", value: "2000-01-01T12:00:00Z"}, expected: false, name: "[target] The min attribute is less than the value attribute"}, - {conditions: {min: "2001-01-01T23:59:59Z", value: "2000-01-01T24:00:00Z"}, expected: false, name: "[target] The value is an invalid datetime string(hour is greater than 23)"}, - {conditions: {min: "1980-01-01T12:00Z", value: "79-01-01T12:00Z"}, expected: false, name: "[target] The value is an invalid date time string(year is two digits)"}, - {conditions: {min: "2000-01-01T13:00:00Z", value: "2000-01-01T12:00:00Z"}, expected: true, name: "[target] The value is less than min"}, - {conditions: {min: "2000-01-01T12:00:00.2Z", value: "2000-01-01T12:00:00.1Z"}, expected: true, name: "[target] The value is less than min(with millisecond in 1 digit)"}, - {conditions: {min: "2000-01-01T12:00:00.02Z", value: "2000-01-01T12:00:00.01Z"}, expected: true, name: "[target] The value is less than min(with millisecond in 2 digits)"}, - {conditions: {min: "2000-01-01T12:00:00.002Z", value: "2000-01-01T12:00:00.001Z"}, expected: true, name: "[target] The value is less than min(with millisecond in 3 digits)"}, - {conditions: {min: "10000-01-01T12:00:00Z", value: "2000-01-01T12:00:00Z"}, expected: true, name: "[target] The value is less than min(Year is 10000 should be valid)"}, - {conditions: {min: "8593-01-01T02:09+02:09", value: "8592-01-01T02:09+02:09"}, expected: true, name: "[target] The value is greater than max(with timezone)"} + {conditions: {min: "", value: "2000-01-01T12:00:00"}, expected: false, name: "[target] The min attribute is not set"}, + {conditions: {min: "2000-01-01T12:00:00", value: ""}, expected: false, name: "[target] Value is empty string"}, + {conditions: {min: "2001-01-01 12:00:00", value: "2000-01-01T12:00:00"}, expected: false, name: "[target] The min attribute is an invalid local date time string"}, + {conditions: {min: "2000-01-01T11:00:00", value: "2000-01-01T12:00:00"}, expected: false, name: "[target] The min attribute is less than the value attribute"}, + {conditions: {min: "2001-01-01T23:59:59", value: "2000-01-01T24:00:00"}, expected: false, name: "[target] The value is an invalid local date time string(hour is greater than 23)"}, + {conditions: {min: "1980-01-01T12:00", value: "79-01-01T12:00"}, expected: false, name: "[target] The value is an invalid local date time string(year is two digits)"}, + {conditions: {min: "2000-01-01T13:00:00", value: "2000-01-01T12:00:00"}, expected: true, name: "[target] The value is less than min"}, + {conditions: {min: "2000-01-01T12:00:00.2", value: "2000-01-01T12:00:00.1"}, expected: true, name: "[target] The value is less than min(with millisecond in 1 digit)"}, + {conditions: {min: "2000-01-01T12:00:00.02", value: "2000-01-01T12:00:00.01"}, expected: true, name: "[target] The value is less than min(with millisecond in 2 digits)"}, + {conditions: {min: "2000-01-01T12:00:00.002", value: "2000-01-01T12:00:00.001"}, expected: true, name: "[target] The value is less than min(with millisecond in 3 digits)"}, + {conditions: {min: "10000-01-01T12:00:00", value: "2000-01-01T12:00:00"}, expected: true, name: "[target] The value is less than min(Year is 10000 should be valid)"}, + {conditions: {max: "8593-01-01T02:09", value: "8592-01-01T02:09"}, expected: false, name: "[target] The value is greater than max"} ] }, { diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-stepMismatch.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-stepMismatch.html index 86d684a1c87..b6239391ed6 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-stepMismatch.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-stepMismatch.html @@ -11,16 +11,6 @@ + +
+ + + + + + + + + +
+ +
+ + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-not-application.html b/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-not-application.html index 4ecaa4acbb6..576e6d1254a 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-not-application.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-not-application.html @@ -7,7 +7,7 @@
+ + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/datetime-2.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/datetime-2.html deleted file mode 100644 index 121dce8d25b..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/datetime-2.html +++ /dev/null @@ -1,45 +0,0 @@ - - -Form input type=datetime - - - - - -
- diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/files.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/files.html index f2fac99bbf5..107b86c08aa 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/files.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/files.html @@ -13,7 +13,6 @@ var types = [ "url", "email", "password", - "datetime", "date", "month", "week", diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/month.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/month.html index 198fb9f3a82..15fa76dd4dd 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/month.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/month.html @@ -14,16 +14,10 @@

Inputs Month

- - - - - - @@ -36,23 +30,6 @@ assert_equals(document.getElementById("valid").type, "month") }, "month type support on input element"); - test(function() { - assert_equals(document.getElementById("valid").value, "2011-11"), - assert_equals(document.getElementById("too_small_value").value, "2011-01"), - assert_equals(document.getElementById("too_large_value").value, "2011-12") - }, "The value attribute, if specified and not empty, must have a value that is a valid month string"); - - test(function() { - assert_equals(document.getElementById("valid").min, "2011-01"), - assert_equals(document.getElementById("invalid_min").min, "") - }, "The min attribute, if specified, must have a value that is a valid month string."); - - test(function() { - assert_equals(document.getElementById("valid").max, "2011-12"), - assert_equals(document.getElementById("min_larger_than_max").max, "2099-01"), - assert_equals(document.getElementById("invalid_max").max, "") - }, "The max attribute, if specified, must have a value that is a valid month string"); - test(function() { assert_equals(document.getElementById("invalid_value").value, "") }, "User agents must not allow the user to set the value to a non-empty string that is not a valid month string."); @@ -71,11 +48,6 @@ assert_equals(document.getElementById("invalid_value_is_set").value, "") }, "When value is set with invalid value, the value must return empty string."); - test(function() { - document.getElementById("invalid_value_is_set_to_valid_value").value = "invalid value"; - assert_equals(document.getElementById("invalid_value_is_set_to_valid_value").value, "2013-05") - }, "When value is given invalid value to non-empty valid string, the value must be same as before."); - test(function() { document.getElementById("step_attribute_is_invalid_value").stepUp(); assert_equals(document.getElementById("step_attribute_is_invalid_value").value, "2013-07") diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html index fbec9f11905..def11da84c0 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html @@ -15,7 +15,7 @@ { type: "url", sanitizedValue: "foobar" }, { type: "email", sanitizedValue: "foobar" }, { type: "password", sanitizedValue: " foobar " }, - { type: "datetime", sanitizedValue: "" }, + { type: "datetime-local", sanitizedValue: "" }, { type: "date", sanitizedValue: "" }, { type: "month", sanitizedValue: "" }, { type: "week", sanitizedValue: "" }, diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/valueMode.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/valueMode.html index 04b09650955..709c176dd63 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/valueMode.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/valueMode.html @@ -14,7 +14,7 @@ { type: "url", mode: "value", sanitizedValue: "foo" }, { type: "email", mode: "value", sanitizedValue: "foo" }, { type: "password", mode: "value", sanitizedValue: "foo" }, - { type: "datetime", mode: "value", sanitizedValue: "" }, + { type: "datetime-local", mode: "value", sanitizedValue: "" }, { type: "date", mode: "value", sanitizedValue: "" }, { type: "month", mode: "value", sanitizedValue: "" }, { type: "week", mode: "value", sanitizedValue: "" }, diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/cloning-steps.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/cloning-steps.html new file mode 100644 index 00000000000..7a85bd26a1f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/cloning-steps.html @@ -0,0 +1,34 @@ + + +Cloning of textarea elements + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/wrap-reflect-1a.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/wrap-reflect-1a.html index 4a965f5d48e..b3baa79d7a3 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/wrap-reflect-1a.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/wrap-reflect-1a.html @@ -1,5 +1,6 @@ Dynamic manipulation of textarea.wrap + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/wrap-reflect-1b.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/wrap-reflect-1b.html index 8c20dc9f120..b0a9b460f06 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/wrap-reflect-1b.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-textarea-element/wrap-reflect-1b.html @@ -1,5 +1,6 @@ Dynamic manipulation of textarea.wrap + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/historical.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/historical.html new file mode 100644 index 00000000000..1f1a91228c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/historical.html @@ -0,0 +1,53 @@ + +Historical script element features should not be supported + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/load-event.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/load-event.html new file mode 100644 index 00000000000..25c2ddf3e22 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/load-event.html @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-before-after-events.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-before-after-events.html deleted file mode 100644 index 4cd77250ed6..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-before-after-events.html +++ /dev/null @@ -1,55 +0,0 @@ - - -script beforescriptexecute/afterscriptexecute events - - - - -
- - - diff --git a/tests/wpt/web-platform-tests/html/semantics/tabular-data/historical.html b/tests/wpt/web-platform-tests/html/semantics/tabular-data/historical.html new file mode 100644 index 00000000000..a6be56e13dc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/tabular-data/historical.html @@ -0,0 +1,25 @@ + +Historical table features should not be supported + + +
+ diff --git a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/historical.html b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/historical.html new file mode 100644 index 00000000000..9de09fe5b38 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/historical.html @@ -0,0 +1,32 @@ + +Historical text-level element features should not be supported + + +
+ diff --git a/tests/wpt/web-platform-tests/html/syntax/serializing-html-fragments/initial-linefeed-pre.html b/tests/wpt/web-platform-tests/html/syntax/serializing-html-fragments/initial-linefeed-pre.html index 0153a72d3c0..d4e30bb60d3 100644 --- a/tests/wpt/web-platform-tests/html/syntax/serializing-html-fragments/initial-linefeed-pre.html +++ b/tests/wpt/web-platform-tests/html/syntax/serializing-html-fragments/initial-linefeed-pre.html @@ -23,7 +23,7 @@ x
+ + diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_000.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_000-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_000.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_000-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_001.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_001-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_001.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_001-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_002.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_002-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_002.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_002-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_003.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_003-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_003.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_003-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_004.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_004-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_004.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_004-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_005.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_005-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_005.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_005-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_006.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_006-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_006.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_006-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_007.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_007-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_007.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_007-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_008.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_008-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_008.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_008-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_009.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_009-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_009.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_009-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_010.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_010-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_010.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_010-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_011.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_011-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_011.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_011-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_012.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_012-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_012.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_012-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_013.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_013-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_013.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_013-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_014.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_014-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_014.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_014-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_015.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_015-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_015.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_015-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_016.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_016-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_016.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/dragdrop/dragdrop_016-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_003.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_003-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_003.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_003-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_004.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_004-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_004.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_004-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_006.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_006-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_006.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_006-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_007.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_007-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_007.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_007-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_008.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_008-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_008.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_008-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_009.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_009.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_009-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_010.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_010-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_010.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_010-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_020.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_020-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_020.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_020-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_021.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_021-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_021.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_021-manual.htm diff --git a/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_022.htm b/tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_022-manual.htm similarity index 100% rename from tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_022.htm rename to tests/wpt/web-platform-tests/old-tests/submission/Microsoft/sandbox/sandbox_022-manual.htm diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_attributes_hoverable_pointers-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_attributes_hoverable_pointers-manual.html index a5d472d5306..0922ae7448e 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_attributes_hoverable_pointers-manual.html +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_attributes_hoverable_pointers-manual.html @@ -11,19 +11,28 @@ + + + + + + +

Pointer Events no-hover pointer attributes test

+

+

+ Test Description: This test checks the properties of pointer events that do not support hover. +
    +
  1. Tap the black square.
  2. +
  3. Then move it off the black square so that it disappears.
  4. +
  5. When the red square appears tap on that as well.
  6. +
+ + Test passes if the proper behavior of the events is observed. +

+
+ +
+
+

The following pointer types were detected: .

+

Refresh the page to run the tests again with a different pointer type.

+
+
+ + + diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_element_haspointercapture-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_element_haspointercapture-manual.html index e66968def46..64afb8e02be 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_element_haspointercapture-manual.html +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_element_haspointercapture-manual.html @@ -34,7 +34,7 @@ target1.setPointerCapture(e.pointerId); test_pointerEvent.step(function () { assert_equals(target0.hasPointerCapture(e.pointerId), false, - "target1.setPointerCapture, target0.hasPointerCapture should be false"); + "after target1.setPointerCapture, target0.hasPointerCapture should be false"); }); target0.setPointerCapture(e.pointerId); set_capture_to_target0 = true; diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerdown-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerdown-manual.html deleted file mode 100644 index 0167e08ba5a..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerdown-manual.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - Pointer Events pointerdown tests - - - - - - - - - -

Pointer Events pointerdown tests

-
- Start with your pointing device outside of this box, then click here. -
-
-

The following pointer types were detected: .

-

Refresh the page to run the tests again with a different pointer type.

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerenter-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerenter-manual.html deleted file mode 100644 index 613eb8e4064..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerenter-manual.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - Pointer Event: Dispatch pointerenter. - - - - - - - - - - - - -

Pointer Event: Dispatch pointerenter

-

- Test Description: - When a pointing device is moved into the hit test boundaries of an element or one of its descendants, the pointerenter event must be dispatched. -

-
- Use the mouse or pen to move over this box. -
-
-

Test complete: Scroll to Summary to view Pass/Fail Results.

-

The following pointer types were detected: .

-

Refresh the page to run the tests again with a different pointer type.

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerenter_nohover-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerenter_nohover-manual.html deleted file mode 100644 index 32675bbb441..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerenter_nohover-manual.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - Pointer Event: Dispatch pointerenter. (nohover) - - - - - - - - - - - - -

Pointer Event: Dispatch pointerenter (nohover)

-

- Test Description: - When a pointing device that does not support hover is moved into the hit test boundaries of an element or one of its - descendants as a result of a pointerdown event, the pointerenter event must be dispatched. -

-
-
- Tap here. -
-
-

Test complete: Scroll to Summary to view Pass/Fail Results.

-

The following pointer types were detected: .

-
-
- - diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_after_pointerup_nohover-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_after_pointerup_nohover-manual.html deleted file mode 100644 index 30412378428..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_after_pointerup_nohover-manual.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - pointerleave after pointerup - - - - - - - - -

pointerleave after pointerup

-

Test Description: This test checks if pointerleave event triggers for devices that don't support hover. Tap the black rectangle.

-

Note: this test is only for devices that do not support hover.

-
- -

Pointer Events pointerleave tests

-
-

The following pointer types were detected: .

-
-
- - diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_mouse-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_mouse-manual.html deleted file mode 100644 index 708aed91af4..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_mouse-manual.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - Pointer Event: Dispatch pointerleave (mouse). - - - - - - - - - - - - -

Pointer Event: Dispatch pointerleave (mouse)

-

- Test Description: - When a pointing device that has continuous position (such as a mouse) leaves the hit test boundaries of an element, the pointerleave event must be dispatched. -

-
-
- Use a mouse to move over then out of this element -
-
-

Test complete: Scroll to Summary to view Pass/Fail Results.

-

The following pointer types were detected: .

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_touch-manual.html deleted file mode 100644 index 3044327a5ff..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerleave_touch-manual.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - Pointer Event: Dispatch pointerleave (touch). - - - - - - - - - - - - -

Pointer Event: Dispatch pointerleave (touch)

-

- Test Description: - When a pointing device that does not support hover (such as a finger) leaves the hit test boundaries as a result of a pointerup event, the pointerleave event must be dispatched. -

-
-
- Use touch to tap on this box. -
-
-

Test complete: Scroll to Summary to view Pass/Fail Results.

-

The following pointer types were detected: .

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove_pointertype-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove_pointertype-manual.html deleted file mode 100644 index 4c410159c13..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove_pointertype-manual.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - pointerType conservation - - - - - - - -

pointerType conservation

-

Test Description: This test checks if pointerType attribute defined properly.

-
- Press and move a mouse button, touch contact or pen contact on the black rectangle. Only use one device per test run. -
-

Note: This test may be run with different pointer devices, however only one device should be used per test run. -

-

- -

Pointer Events pointerType conservation tests

-
-

The following pointer types were detected: .

-

Refresh the page to run the tests again with a different pointer type.

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerout-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerout-manual.html deleted file mode 100644 index 473fa14ebbc..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerout-manual.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - pointerout - - - - - - - - -

pointerout

-

Test Description: This test checks if pointerout event triggers. Put your mouse over the black rectangle and then move it out of the rectangle boundaries. If you are using touchscreen tap the black rectangle.

-
- -

Pointer Events pointerout tests

-
-

The following pointer types were detected: .

-

Refresh the page to run the tests again with a different pointer type.

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerout_after_pointerup_nohover-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerout_after_pointerup_nohover-manual.html deleted file mode 100644 index 44813033a72..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerout_after_pointerup_nohover-manual.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - pointerout - - - - - - - - -

pointerout

-

Test Description: This test checks if pointerout event triggers for devices that don't support hover. Tap the black rectangle.

-

Note: this test is only for devices that do not support hover.

-
- -

Pointer Events pointerout tests

-
-

The following pointer types were detected: .

-
-
- - diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerover-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerover-manual.html deleted file mode 100644 index 4601c08aaaf..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerover-manual.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - Pointer Event: Dispatch pointerover. - - - - - - - - - - - - -

Pointer Event: Dispatch pointerover.

-

Test Description: - When a pointing device is moved into the hit test boundaries of an element, the pointerover event must be dispatched. -

-
-
- Use mouse, touch or pen to hover or contact this element.. -
-
-

Test complete: Scroll to Summary to view Pass/Fail Results.

-

The following pointer types were detected: .

-

Refresh the page to run the tests again with a different pointer type.

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_mouse-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_mouse-manual.html deleted file mode 100644 index b1e7d7046ea..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_mouse-manual.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - Pointer Event: If a pointer event is initiated by a mouse device, then the pointerType must be "mouse" - - - - - - - - - - - - -

Pointer Event: Dispatch pointer events with pointerType equal to "mouse"

-

Test Description: - If a pointer event is initiated by a mouse device, then the pointerType must be 'mouse'. -

-
-
- Using the mouse, click this element. -
-
-

Test complete: Scroll to Summary to view Pass/Fail Results.

-

The following pointer types were detected: .

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_pen-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_pen-manual.html deleted file mode 100644 index 0aabfce4fc9..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_pen-manual.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - Pointer Event: If a pointer event is initiated by a pen device, then the pointerType must be "pen" - - - - - - - - - - - - -

Pointer Event: Dispatch pointer events with pointerType equal to "pen"

-

Test Description: - If a pointer event is initiated by a pen device, then the pointerType must be 'pen'. -

-
-
- Using pen, tap here. -
-
-

Test complete: Scroll to Summary to view Pass/Fail Results.

-

The following pointer types were detected: .

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_touch-manual.html deleted file mode 100644 index c06fbe48c6d..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointertype_touch-manual.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - Pointer Event: If a pointer event is initiated by a touch device, then the pointerType must be "touch" - - - - - - - - - - - - -

Pointer Event: Dispatch pointer events with pointerType equal to "touch"

-

Test Description: - If a pointer event is initiated by a touch device, then the pointerType must be 'touch'. -

-
-
- Using touch, tap here. -
-
-

Test complete: Scroll to Summary to view Pass/Fail Results.

-

The following pointer types were detected: .

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup-manual.html deleted file mode 100644 index 30a03f23dcf..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup-manual.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - pointerup - - - - - - - - -

pointerup

-

Test Description: This test checks if pointerup event triggers. Press mouse left button and release it over the black rectangle or tap it if you are using a touchscreen.

-
- -

Pointer Events pointerup tests

-
-

The following pointer types were detected: .

-

Refresh the page to run the tests again with a different pointer type.

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup_isprimary_same_as_pointerdown-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup_isprimary_same_as_pointerdown-manual.html deleted file mode 100644 index 994061b8bf0..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup_isprimary_same_as_pointerdown-manual.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - Pointer Event: pointerup has same isPrimary as last pointerdown with the same pointerId - - - - - - - - - - - - -

Pointer Event: pointerup has the same isPrimary as last pointerdown with the same pointerId

-

Test Description: - The isPrimary attribute of a pointerup event must have the same value as the isPrimary attribute of the last pointerdown event with the same pointerId attribute. -

-
- Press and release a mouse button, touch contact or pen contact on this element. Only use one device per test run. -
-
-
-
-

Test complete: Scroll to Summary to view Pass/Fail Results.

-

The following pointer types were detected: .

-

Refresh the page to run the tests again with a different pointer type.

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup_pointertype-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup_pointertype-manual.html deleted file mode 100644 index b356484bacc..00000000000 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointerup_pointertype-manual.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - pointerType conservation - - - - - - - -

pointerType conservation

-

Test Description: This test checks if pointerType attribute defined properly.

-
- Press and release a mouse button, touch contact or pen contact on the black rectangle. Only use one device per test run. -
-

Note: This test may be run with different pointer devices, however only one device should be used per test run. -

-

- -

Pointer Events pointerType conservation tests

-
-

The following pointer types were detected: .

-

Refresh the page to run the tests again with a different pointer type.

-
-
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js b/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js index a7233fe9084..a7e5d4f1ab4 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js @@ -198,7 +198,8 @@ function rPointerCapture(e) { var globalPointerEventTest = null; var expectedPointerType = null; -var HOVERABLE_POINTERS = ['mouse', 'pen']; +const HOVERABLE_POINTERS = ['mouse', 'pen']; +const NOHOVER_POINTERS = ['touch']; function MultiPointerTypeTest(testName, types) { this.testName = testName; diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_click.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_click-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_click.html rename to tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_click-manual.html diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html rename to tests/wpt/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse-manual.html diff --git a/tests/wpt/web-platform-tests/resource-timing/idlharness.html b/tests/wpt/web-platform-tests/resource-timing/idlharness.html new file mode 100644 index 00000000000..15afd09441a --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/idlharness.html @@ -0,0 +1,81 @@ + + + + +Resource Timing IDL tests + + + + + + + + +

Resource Timing IDL tests

+
+ + + +
+[Exposed=(Window)]
+interface PerformanceResourceTiming : PerformanceEntry {
+    readonly attribute DOMString           initiatorType;
+    readonly attribute DOMHighResTimeStamp redirectStart;
+    readonly attribute DOMHighResTimeStamp redirectEnd;
+    readonly attribute DOMHighResTimeStamp fetchStart;
+    readonly attribute DOMHighResTimeStamp domainLookupStart;
+    readonly attribute DOMHighResTimeStamp domainLookupEnd;
+    readonly attribute DOMHighResTimeStamp connectStart;
+    readonly attribute DOMHighResTimeStamp connectEnd;
+    readonly attribute DOMHighResTimeStamp secureConnectionStart;
+    readonly attribute DOMHighResTimeStamp requestStart;
+    readonly attribute DOMHighResTimeStamp responseStart;
+    readonly attribute DOMHighResTimeStamp responseEnd;
+    serializer = {inherit, attribute};
+};
+partial interface Performance {
+    void clearResourceTimings();
+    void setResourceTimingBufferSize(unsigned long maxSize);
+    attribute EventHandler onresourcetimingbufferfull;
+};
+
+ + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/resource-timing.js b/tests/wpt/web-platform-tests/resource-timing/resource-timing.js index 8b3eea25c9c..a1b801a741b 100644 --- a/tests/wpt/web-platform-tests/resource-timing/resource-timing.js +++ b/tests/wpt/web-platform-tests/resource-timing/resource-timing.js @@ -434,6 +434,21 @@ window.onload = output.textContent += text + "\r\n"; } + add_completion_callback(function () { + var output = document.getElementById("output"); + var button = document.createElement('button'); + output.parentNode.insertBefore(button, output); + button.onclick = function () { + var showButton = output.style.display == 'none'; + output.style.display = showButton ? null : 'none'; + button.textContent = showButton ? 'Hide details' : 'Show details'; + } + button.onclick(); + var iframes = document.querySelectorAll('iframe'); + for (var i = 0; i < iframes.length; i++) + iframes[i].parentNode.removeChild(iframes[i]); + }); + /** pretty print a resource timeline entry. */ function logResourceEntry(entry) { log("[" + entry.entryType + "] " + entry.name); diff --git a/tests/wpt/web-platform-tests/resources/docs/api.md b/tests/wpt/web-platform-tests/resources/docs/api.md index 823ff5c315c..980f4246ce5 100644 --- a/tests/wpt/web-platform-tests/resources/docs/api.md +++ b/tests/wpt/web-platform-tests/resources/docs/api.md @@ -418,7 +418,7 @@ is called, the two conditions above apply like normal. Dedicated and shared workers don't have an event that corresponds to the `load` event in a document. Therefore these worker tests always behave as if the `explicit_done` property is set to true. Service workers depend on the -[install](https://w3c.github.io/ServiceWorker/index.html#service-worker-global-scope-install-event) +[install](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-global-scope-install-event) event which is fired following the completion of [running the worker](https://html.spec.whatwg.org/multipage/workers.html#run-a-worker). @@ -526,7 +526,7 @@ object. These objects are structures as follows: The `testharness.js` script can be used from within [dedicated workers, shared workers](https://html.spec.whatwg.org/multipage/workers.html) and [service -workers](https://w3c.github.io/ServiceWorker/). +workers](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/). Testing from a worker script is different from testing from an HTML document in several ways: @@ -553,7 +553,7 @@ several ways: complete](#determining-when-all-tests-are-complete)). So these worker tests behave as if they were started with the `explicit_done` option. Service workers depend on the - [oninstall](https://w3c.github.io/ServiceWorker/index.html#service-worker-global-scope-install-event) + [oninstall](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-global-scope-install-event) event and don't require an explicit `done` call. Here's an example that uses a dedicated worker. @@ -590,7 +590,7 @@ fetch_tests_from_worker(new Worker("worker.js")); The argument to the `fetch_tests_from_worker` function can be a [`Worker`](https://html.spec.whatwg.org/multipage/workers.html#dedicated-workers-and-the-worker-interface), a [`SharedWorker`](https://html.spec.whatwg.org/multipage/workers.html#shared-workers-and-the-sharedworker-interface) -or a [`ServiceWorker`](https://w3c.github.io/ServiceWorker/#service-worker-obj). +or a [`ServiceWorker`](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#service-worker-obj). Once called, the containing document fetches all the tests from the worker and behaves as if those tests were running in the containing document itself. diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/generic.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/generic.widl index 19880fab49a..02b64572a42 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/generic.widl +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/generic.widl @@ -3,14 +3,14 @@ interface Foo { readonly attribute Promise[] baz; }; -// Extracted from https://w3c.github.io/ServiceWorker/ on 2014-05-08 +// Extracted from https://slightlyoff.github.io/ServiceWorker/spec/service_worker/ on 2014-05-08 interface ServiceWorkerClients { Promise getServiced(); Promise reloadAll(); }; -// Extracted from https://w3c.github.io/ServiceWorker/ on 2014-05-13 +// Extracted from https://slightlyoff.github.io/ServiceWorker/spec/service_worker/ on 2014-05-13 interface FetchEvent : Event { ResponsePromise default(); diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/map.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/map.widl index dc4e9544f19..19b54f80a61 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/map.widl +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/map.widl @@ -1,4 +1,4 @@ -// Extracted from https://w3c.github.io/ServiceWorker/ on 2014-05-06 +// Extracted from https://slightlyoff.github.io/ServiceWorker/spec/service_worker/ on 2014-05-06 [MapClass(DOMString, DOMString)] interface HeaderMap { diff --git a/tests/wpt/web-platform-tests/service-workers/specgen.json b/tests/wpt/web-platform-tests/service-workers/specgen.json index 147978936c3..88c36ed04aa 100644 --- a/tests/wpt/web-platform-tests/service-workers/specgen.json +++ b/tests/wpt/web-platform-tests/service-workers/specgen.json @@ -655,4 +655,4 @@ } ], "specUrl": "https://w3c.github.io/ServiceWorker/" -} +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html b/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html index ceecf1ba17a..867cea9795e 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html +++ b/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html @@ -20,7 +20,7 @@ function testInlineScript(mode) var host = document.createElement('div'); var shadowRoot = host.attachShadow({mode: mode}); var scriptElement = document.createElement('script'); - scriptElement.textContent = 'assert_equals(document.currentScript, outerScriptElement)'; + scriptElement.textContent = 'assert_equals(document.currentScript, null)'; shadowRoot.appendChild(scriptElement); assert_equals(document.currentScript, outerScriptElement, diff --git a/tests/wpt/web-platform-tests/shadow-dom/Extensions-to-Event-Interface.html b/tests/wpt/web-platform-tests/shadow-dom/Extensions-to-Event-Interface.html new file mode 100644 index 00000000000..4d4afaf6552 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/Extensions-to-Event-Interface.html @@ -0,0 +1,234 @@ + + + +Shadow DOM: Extensions to Event Interface + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/MouseEvent-prototype-offsetX-offsetY.html b/tests/wpt/web-platform-tests/shadow-dom/MouseEvent-prototype-offsetX-offsetY.html new file mode 100644 index 00000000000..643736b85c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/MouseEvent-prototype-offsetX-offsetY.html @@ -0,0 +1,154 @@ + + + +Shadow DOM: MouseEvent's offsetX and offsetY attributes must be relative to the relative target. + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/Slotable-interface.html b/tests/wpt/web-platform-tests/shadow-dom/Slotable-interface.html new file mode 100644 index 00000000000..a7b97e80267 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/Slotable-interface.html @@ -0,0 +1,94 @@ + + + +Shadow DOM: Slotable interface + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/event-inside-shadow-tree.html b/tests/wpt/web-platform-tests/shadow-dom/event-inside-shadow-tree.html new file mode 100644 index 00000000000..cacd966b3b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/event-inside-shadow-tree.html @@ -0,0 +1,148 @@ + + + +Shadow DOM: Firing an event inside a shadow tree + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/event-inside-slotted-node.html b/tests/wpt/web-platform-tests/shadow-dom/event-inside-slotted-node.html new file mode 100644 index 00000000000..f7d98bf7a09 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/event-inside-slotted-node.html @@ -0,0 +1,258 @@ + + + + Shadow DOM: Firing an event inside a node assigned to a slot + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/event-with-related-target.html b/tests/wpt/web-platform-tests/shadow-dom/event-with-related-target.html new file mode 100644 index 00000000000..ad74e72b213 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/event-with-related-target.html @@ -0,0 +1,256 @@ + + + + Shadow DOM: Firing an event with relatedTarget inside a shadow tree + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/resources/event-path-test-helpers.js b/tests/wpt/web-platform-tests/shadow-dom/resources/event-path-test-helpers.js new file mode 100644 index 00000000000..091bcd08233 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/resources/event-path-test-helpers.js @@ -0,0 +1,93 @@ + +function dispatchEventWithLog(shadow, target, event) { + var eventPath = []; + var relatedTargets = []; + var pathAtTargets = []; + + var attachedNodes = []; + for (var nodeKey in shadow) { + var startingNode = shadow[nodeKey]; + for (var node = startingNode; node; node = node.parentNode) { + if (attachedNodes.indexOf(node) >= 0) + continue; + attachedNodes.push(node); + node.addEventListener(event.type, (function (event) { + eventPath.push(this.label); + relatedTargets.push(event.relatedTarget ? event.relatedTarget.label : null); + + if (!event.composedPath) // Don't fail all tests just for the lack of composedPath. + return; + + pathAtTargets.push(event.composedPath().map(function (node) { return node.label; })); + }).bind(node)); + } + } + + target.dispatchEvent(event); + + return {eventPath: eventPath, relatedTargets: relatedTargets, pathAtTargets: pathAtTargets}; +} + +/* +-SR: ShadowRoot -S: Slot +A ------------------------------- A-SR ++ B ------------ B-SR + A1 --- A1-SR + + C + B1 --- B1-SR + A2-S + A1a + + D --- D-SR + B1a + B1b --- B1b-SR + + D1 + B1c-S + B1b1 + + B1b2 +*/ +function createTestTree(mode) { + var namedNodes = {}; + + function element(name) { + var element = document.createElement(name.indexOf('-S') > 0 ? 'slot' : 'div'); + element.label = name; + namedNodes[name] = element; + for (var i = 1; i < arguments.length; i++) { + var item = arguments[i]; + if (typeof(item) == 'function') + item(element); + else + element.appendChild(item); + } + return element; + } + + function shadow(name) { + var children = []; + for (var i = 1; i < arguments.length; i++) + children.push(arguments[i]); + return function (element) { + var shadowRoot = element.attachShadow({mode: mode}); + shadowRoot.label = name; + namedNodes[name] = shadowRoot; + for (var child of children) + shadowRoot.appendChild(child); + } + } + + var host = element('A', + shadow('A-SR', + element('A1', + shadow('A1-SR', + element('A1a'))), + element('A2-S') + ), + element('B', + shadow('B-SR', + element('B1', + shadow('B1-SR', + element('B1b', + shadow('B1b-SR', + element('B1b1'), + element('B1b2'))), + element('B1c-S')), + element('B1a'))), + element('C'), + element('D', + shadow('D-SR', + element('D1'))))); + + return namedNodes; +} diff --git a/tests/wpt/web-platform-tests/shadow-dom/slotchange-event.html b/tests/wpt/web-platform-tests/shadow-dom/slotchange-event.html new file mode 100644 index 00000000000..ed36bedbba0 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/slotchange-event.html @@ -0,0 +1,620 @@ + + + +Shadow DOM: slotchange event + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/svg/historical.html b/tests/wpt/web-platform-tests/svg/historical.html new file mode 100644 index 00000000000..8f28002e85d --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/historical.html @@ -0,0 +1,81 @@ + +Historical SVG features must be removed + + + diff --git a/tests/wpt/web-platform-tests/tools/__init__.py b/tests/wpt/web-platform-tests/tools/__init__.py index e69de29bb2d..07b5e60fb5f 100644 --- a/tests/wpt/web-platform-tests/tools/__init__.py +++ b/tests/wpt/web-platform-tests/tools/__init__.py @@ -0,0 +1 @@ +from . import localpaths as _localpaths diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index ae464452824..2aee3da1c52 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -12,10 +12,10 @@ import sys from collections import defaultdict -from .. import localpaths +from ..localpaths import repo_root from manifest.sourcefile import SourceFile -from six import iteritems +from six import iteritems, itervalues from six.moves import range here = os.path.abspath(os.path.split(__file__)[0]) @@ -52,6 +52,7 @@ def parse_whitelist(f): """ data = defaultdict(lambda:defaultdict(set)) + ignored_files = set() for line in f: line = line.strip() @@ -64,9 +65,13 @@ def parse_whitelist(f): parts[-1] = int(parts[-1]) error_type, file_match, line_number = parts - data[file_match][error_type].add(line_number) - return data + if error_type == "*": + ignored_files.add(file_match) + else: + data[file_match][error_type].add(line_number) + + return data, ignored_files def filter_whitelist_errors(data, path, errors): @@ -79,9 +84,7 @@ def filter_whitelist_errors(data, path, errors): for file_match, whitelist_errors in iteritems(data): if fnmatch.fnmatch(path, file_match): for i, (error_type, msg, path, line) in enumerate(errors): - if "*" in whitelist_errors: - whitelisted[i] = True - elif error_type in whitelist_errors: + if error_type in whitelist_errors: allowed_lines = whitelist_errors[error_type] if None in allowed_lines or line in allowed_lines: whitelisted[i] = True @@ -240,6 +243,14 @@ def check_parsed(repo_root, path, f): if all(seen_elements[name] for name in required_elements): break + + for element in source_file.root.findall(".//{http://www.w3.org/1999/xhtml}script[@src]"): + src = element.attrib["src"] + for name in ["testharness", "testharnessreport"]: + if "%s.js" % name == src or ("/%s.js" % name in src and src != "/resources/%s.js" % name): + errors.append(("%s-PATH" % name.upper(), "%s.js script seen with incorrect path" % name, path, None)) + + return errors class ASTCheck(object): @@ -347,7 +358,6 @@ def parse_args(): return parser.parse_args() def main(): - repo_root = localpaths.repo_root args = parse_args() paths = args.paths if args.paths else all_git_paths(repo_root) return lint(repo_root, paths, args.json) @@ -357,7 +367,7 @@ def lint(repo_root, paths, output_json): last = None with open(os.path.join(repo_root, "lint.whitelist")) as f: - whitelist = parse_whitelist(f) + whitelist, ignored_files = parse_whitelist(f) if output_json: output_errors = output_errors_json @@ -390,11 +400,14 @@ def lint(repo_root, paths, output_json): if not os.path.exists(abs_path): continue + if any(fnmatch.fnmatch(path, file_match) for file_match in ignored_files): + continue + errors = check_path(repo_root, path) last = process_errors(path, errors) or last if not os.path.isdir(abs_path): - with open(abs_path) as f: + with open(abs_path, 'rb') as f: errors = check_file_contents(repo_root, path, f) last = process_errors(path, errors) or last @@ -402,7 +415,7 @@ def lint(repo_root, paths, output_json): output_error_count(error_count) if error_count: print(ERROR_MSG % (last[0], last[1], last[0], last[1])) - return sum(error_count.itervalues()) + return sum(itervalues(error_count)) path_lints = [check_path_length] file_lints = [check_regexp_line, check_parsed, check_python_ast] diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/broken.html b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/broken.html new file mode 100644 index 00000000000..74793c43caf --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/broken.html @@ -0,0 +1 @@ +THIS LINE HAS TRAILING WHITESPACE diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/broken_ignored.html b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/broken_ignored.html new file mode 100644 index 00000000000..74793c43caf --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/broken_ignored.html @@ -0,0 +1 @@ +THIS LINE HAS TRAILING WHITESPACE diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/lint.whitelist b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/lint.whitelist new file mode 100644 index 00000000000..a763e4432e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/lint.whitelist @@ -0,0 +1 @@ +*:broken_ignored.html diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/okay.html b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/okay.html new file mode 100644 index 00000000000..a3178a3c83a --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/okay.html @@ -0,0 +1 @@ +THIS LINE HAS NO TRAILING WHITESPACE diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/test_file_lints.py b/tests/wpt/web-platform-tests/tools/lint/tests/test_file_lints.py index 3ec3b63bff7..3e3e359b0f9 100644 --- a/tests/wpt/web-platform-tests/tools/lint/tests/test_file_lints.py +++ b/tests/wpt/web-platform-tests/tools/lint/tests/test_file_lints.py @@ -221,6 +221,75 @@ def test_present_testharnesscss(): ] +def test_testharness_path(): + code = b"""\ + + + + + + +""" + error_map = check_with_files(code) + + for (filename, (errors, kind)) in error_map.items(): + expected = [("W3C-TEST.ORG", "External w3c-test.org domain used", filename, 5)] + if kind == "python": + expected.append(("PARSE-FAILED", "Unable to parse file", filename, 1)) + elif kind in ["web-lax", "web-strict"]: + expected.extend([ + ("TESTHARNESS-PATH", "testharness.js script seen with incorrect path", filename, None), + ("TESTHARNESS-PATH", "testharness.js script seen with incorrect path", filename, None), + ("TESTHARNESS-PATH", "testharness.js script seen with incorrect path", filename, None), + ("TESTHARNESS-PATH", "testharness.js script seen with incorrect path", filename, None), + ]) + assert errors == expected + + +def test_testharnessreport_path(): + code = b"""\ + + + + + + +""" + error_map = check_with_files(code) + + for (filename, (errors, kind)) in error_map.items(): + expected = [("W3C-TEST.ORG", "External w3c-test.org domain used", filename, 5)] + if kind == "python": + expected.append(("PARSE-FAILED", "Unable to parse file", filename, 1)) + elif kind in ["web-lax", "web-strict"]: + expected.extend([ + ("TESTHARNESSREPORT-PATH", "testharnessreport.js script seen with incorrect path", filename, None), + ("TESTHARNESSREPORT-PATH", "testharnessreport.js script seen with incorrect path", filename, None), + ("TESTHARNESSREPORT-PATH", "testharnessreport.js script seen with incorrect path", filename, None), + ("TESTHARNESSREPORT-PATH", "testharnessreport.js script seen with incorrect path", filename, None), + ]) + assert errors == expected + + +def test_not_testharness_path(): + code = b"""\ + + + + + +""" + error_map = check_with_files(code) + + for (filename, (errors, kind)) in error_map.items(): + if kind == "python": + assert errors == [ + ("PARSE-FAILED", "Unable to parse file", filename, 1), + ] + else: + assert errors == [] + + @pytest.mark.skipif(six.PY3, reason="Cannot parse print statements from python 3") def test_print_statement(): error_map = check_with_files(b"def foo():\n print 'statement'\n print\n") diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py b/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py index 6a551051d3a..ebca206c816 100644 --- a/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py @@ -1,9 +1,23 @@ from __future__ import unicode_literals -from ..lint import filter_whitelist_errors, parse_whitelist +import os + +import mock +import pytest import six -def test_lint(): +from .. import lint as lint_mod +from ..lint import filter_whitelist_errors, parse_whitelist, lint + +_dummy_repo = os.path.join(os.path.dirname(__file__), "dummy") + + +def _mock_lint(name): + wrapped = getattr(lint_mod, name) + return mock.patch(lint_mod.__name__ + "." + name, wraps=wrapped) + + +def test_filter_whitelist_errors(): filtered = filter_whitelist_errors({}, '', []) assert filtered == [] @@ -26,10 +40,7 @@ CONSOLE:streams/resources/test-utils.js: 12 *:resources/* """) - expected = { - '*.pdf': { - '*': {None}, - }, + expected_data = { '.gitmodules': { 'INDENT TABS': {None}, }, @@ -37,9 +48,6 @@ CONSOLE:streams/resources/test-utils.js: 12 'TRAILING WHITESPACE': {None}, 'INDENT TABS': {None}, }, - 'resources/*': { - '*': {None}, - }, 'streams/resources/test-utils.js': { 'CONSOLE': {12}, 'CR AT EOL': {None}, @@ -51,4 +59,80 @@ CONSOLE:streams/resources/test-utils.js: 12 'CR AT EOL': {None}, }, } - assert parse_whitelist(input_buffer) == expected + expected_ignored = {"*.pdf", "resources/*"} + data, ignored = parse_whitelist(input_buffer) + assert data == expected_data + assert ignored == expected_ignored + + +def test_lint_no_files(capsys): + rv = lint(_dummy_repo, [], False) + assert rv == 0 + out, err = capsys.readouterr() + assert out == "" + assert err == "" + + +def test_lint_ignored_file(capsys): + with _mock_lint("check_path") as mocked_check_path: + with _mock_lint("check_file_contents") as mocked_check_file_contents: + rv = lint(_dummy_repo, ["broken_ignored.html"], False) + assert rv == 0 + assert not mocked_check_path.called + assert not mocked_check_file_contents.called + out, err = capsys.readouterr() + assert out == "" + assert err == "" + + +def test_lint_not_existing_file(capsys): + with _mock_lint("check_path") as mocked_check_path: + with _mock_lint("check_file_contents") as mocked_check_file_contents: + # really long path-linted filename + name = "a" * 256 + ".html" + rv = lint(_dummy_repo, [name], False) + assert rv == 0 + assert not mocked_check_path.called + assert not mocked_check_file_contents.called + out, err = capsys.readouterr() + assert out == "" + assert err == "" + + +def test_lint_passing(capsys): + with _mock_lint("check_path") as mocked_check_path: + with _mock_lint("check_file_contents") as mocked_check_file_contents: + rv = lint(_dummy_repo, ["okay.html"], False) + assert rv == 0 + assert mocked_check_path.call_count == 1 + assert mocked_check_file_contents.call_count == 1 + out, err = capsys.readouterr() + assert out == "" + assert err == "" + + +def test_lint_failing(capsys): + with _mock_lint("check_path") as mocked_check_path: + with _mock_lint("check_file_contents") as mocked_check_file_contents: + rv = lint(_dummy_repo, ["broken.html"], False) + assert rv == 1 + assert mocked_check_path.call_count == 1 + assert mocked_check_file_contents.call_count == 1 + out, err = capsys.readouterr() + assert "TRAILING WHITESPACE" in out + assert "broken.html 1 " in out + assert err == "" + + +def test_lint_passing_and_failing(capsys): + with _mock_lint("check_path") as mocked_check_path: + with _mock_lint("check_file_contents") as mocked_check_file_contents: + rv = lint(_dummy_repo, ["broken.html", "okay.html"], False) + assert rv == 1 + assert mocked_check_path.call_count == 2 + assert mocked_check_file_contents.call_count == 2 + out, err = capsys.readouterr() + assert "TRAILING WHITESPACE" in out + assert "broken.html 1 " in out + assert "okay.html" not in out + assert err == "" diff --git a/tests/wpt/web-platform-tests/tools/localpaths.py b/tests/wpt/web-platform-tests/tools/localpaths.py index cf31977ec7d..a4930015c05 100644 --- a/tests/wpt/web-platform-tests/tools/localpaths.py +++ b/tests/wpt/web-platform-tests/tools/localpaths.py @@ -4,11 +4,11 @@ import sys here = os.path.abspath(os.path.split(__file__)[0]) repo_root = os.path.abspath(os.path.join(here, os.pardir)) -sys.path.insert(0, os.path.join(repo_root, "tools")) -sys.path.insert(0, os.path.join(repo_root, "tools", "six")) -sys.path.insert(0, os.path.join(repo_root, "tools", "html5lib")) -sys.path.insert(0, os.path.join(repo_root, "tools", "wptserve")) -sys.path.insert(0, os.path.join(repo_root, "tools", "pywebsocket", "src")) -sys.path.insert(0, os.path.join(repo_root, "tools", "py")) -sys.path.insert(0, os.path.join(repo_root, "tools", "pytest")) -sys.path.insert(0, os.path.join(repo_root, "tools", "webdriver")) +sys.path.insert(0, os.path.join(here)) +sys.path.insert(0, os.path.join(here, "six")) +sys.path.insert(0, os.path.join(here, "html5lib")) +sys.path.insert(0, os.path.join(here, "wptserve")) +sys.path.insert(0, os.path.join(here, "pywebsocket", "src")) +sys.path.insert(0, os.path.join(here, "py")) +sys.path.insert(0, os.path.join(here, "pytest")) +sys.path.insert(0, os.path.join(here, "webdriver")) diff --git a/tests/wpt/web-platform-tests/tools/manifest/manifest.py b/tests/wpt/web-platform-tests/tools/manifest/manifest.py index 17909929616..80fe70f9591 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/manifest.py +++ b/tests/wpt/web-platform-tests/tools/manifest/manifest.py @@ -46,6 +46,8 @@ class Manifest(object): if item_type == "reftest": for path, items in self.local_changes.iterdeletedreftests(): paths[path] -= items + if len(paths[path]) == 0: + del paths[path] yield item_type, paths @@ -56,13 +58,10 @@ class Manifest(object): if item is None: return - is_reference = False if isinstance(item, RefTest): self.reftest_nodes[item.path].add(item) self.reftest_nodes_by_url[item.url] = item - is_reference = item.is_reference - - if not is_reference: + else: self._add(item) item.manifest = self @@ -281,6 +280,7 @@ class Manifest(object): tests_root, obj["local_changes"], source_files=source_files) + self.update_reftests() return self @@ -297,13 +297,10 @@ class LocalChanges(object): if item is None: return - is_reference = False if isinstance(item, RefTest): self.reftest_nodes[item.path].add(item) self.reftest_nodes_by_url[item.url] = item - is_reference = item.is_reference - - if not is_reference: + else: self._add(item) item.manifest = self.manifest diff --git a/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py b/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py index 7b83389a5d1..c2ac783c482 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py +++ b/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py @@ -7,9 +7,6 @@ try: except ImportError: from xml.etree import ElementTree -here = os.path.dirname(__file__) -localpaths = imp.load_source("localpaths", os.path.abspath(os.path.join(here, os.pardir, "localpaths.py"))) - import html5lib from . import vcs diff --git a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py index bdd0ede1a19..11ac6d331ef 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py +++ b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py @@ -6,6 +6,7 @@ def test_local_reftest_add(): s = sourcefile.SourceFile("/", "test", "/") test = manifestitem.RefTest(s, "/test", [("/ref", "==")]) m.local_changes.add(test) + m.update_reftests() assert list(m) == [(test.path, {test})] @@ -15,6 +16,7 @@ def test_local_reftest_delete_path(): test = manifestitem.RefTest(s, "/test", [("/ref", "==")]) m.add(test) m.local_changes.add_deleted(test.path) + m.update_reftests() assert list(m) == [] @@ -23,18 +25,19 @@ def test_local_reftest_adjusted(): s = sourcefile.SourceFile("/", "test", "/") test = manifestitem.RefTest(s, "/test", [("/ref", "==")]) m.add(test) - - assert list(m) == [(test.path, {test})] + m.update_reftests() assert m.compute_reftests({test.path: {test}}) == {test} - test_1 = manifestitem.RefTest(s, "/test-1", [("/test", "==")]) + assert list(m) == [(test.path, {test})] + + s_1 = sourcefile.SourceFile("/", "test-1", "/") + test_1 = manifestitem.RefTest(s_1, "/test-1", [("/test", "==")]) m.local_changes.add(test_1) + m.update_reftests() assert m.compute_reftests({test.path: {test}, test_1.path: {test_1}}) == {test_1} - m.local_changes._deleted_reftests[test.path] = {test} - assert list(m) == [(test_1.path, {test_1})] @@ -43,9 +46,11 @@ def test_manifest_to_json(): s = sourcefile.SourceFile("/", "test", "/") test = manifestitem.RefTest(s, "/test", [("/ref", "==")]) m.add(test) - test_1 = manifestitem.RefTest(s, "/test-1", [("/test", "==")]) + s_1 = sourcefile.SourceFile("/", "test-1", "/") + test_1 = manifestitem.RefTest(s_1, "/test-1", [("/test", "==")]) m.local_changes.add(test_1) - m.local_changes._deleted_reftests[test.path] = {test} + m.local_changes.add_deleted(test.path) + m.update_reftests() json_str = m.to_json() loaded = manifest.Manifest.from_json("/", json_str) @@ -53,3 +58,23 @@ def test_manifest_to_json(): assert list(loaded) == list(m) assert loaded.to_json() == json_str + + +def test_reftest_computation_chain(): + m = manifest.Manifest() + + s1 = sourcefile.SourceFile("/", "test1", "/") + s2 = sourcefile.SourceFile("/", "test2", "/") + + test1 = manifestitem.RefTest(s1, "/test1", [("/test3", "==")]) + test2 = manifestitem.RefTest(s2, "/test2", [("/test1", "==")]) + m.add(test1) + m.add(test2) + + m.update_reftests() + + assert m.reftest_nodes == {'test1': {test1}, + 'test2': {test2}} + + assert list(m) == [("test2", {test2})] + assert list(m.local_changes.itertypes()) == [] diff --git a/tests/wpt/web-platform-tests/tools/manifest/tree.py b/tests/wpt/web-platform-tests/tools/manifest/tree.py index e6961df0fba..25a5f212f59 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/tree.py +++ b/tests/wpt/web-platform-tests/tools/manifest/tree.py @@ -130,6 +130,8 @@ class GitTree(TestTree): elif staged == "?" and worktree == "?": # A new file. If it's a directory, recurse into it if os.path.isdir(os.path.join(self.tests_root, filename)): + if filename[-1] != '/': + filename += '/' rv.update(self.local_changes(filename)) else: rv[filename] = "modified" diff --git a/tests/wpt/web-platform-tests/tools/manifest/update.py b/tests/wpt/web-platform-tests/tools/manifest/update.py index a84244dc081..8460af257cf 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/update.py +++ b/tests/wpt/web-platform-tests/tools/manifest/update.py @@ -10,7 +10,6 @@ from .log import get_logger from .tree import GitTree, NoVCSTree here = os.path.dirname(__file__) -localpaths = imp.load_source("localpaths", os.path.abspath(os.path.join(here, os.pardir, "localpaths.py"))) def update(tests_root, url_base, manifest, ignore_local=False): if vcs.is_git_repo(tests_root): diff --git a/tests/wpt/web-platform-tests/tools/serve/serve.py b/tests/wpt/web-platform-tests/tools/serve/serve.py index 640b1939af7..4977a6bf6f5 100644 --- a/tests/wpt/web-platform-tests/tools/serve/serve.py +++ b/tests/wpt/web-platform-tests/tools/serve/serve.py @@ -16,7 +16,7 @@ import uuid from collections import defaultdict, OrderedDict from multiprocessing import Process, Event -from .. import localpaths +from ..localpaths import repo_root import sslutils from wptserve import server as wptserve, handlers @@ -24,8 +24,6 @@ from wptserve import stash from wptserve.logger import set_logger from mod_pywebsocket import standalone as pywebsocket -repo_root = localpaths.repo_root - def replace_end(s, old, new): """ Given a string `s` that ends with `old`, replace that occurrence of `old` diff --git a/tests/wpt/web-platform-tests/tools/tox.ini b/tests/wpt/web-platform-tests/tools/tox.ini index fdd8cf47f4c..6638cc7cbdc 100644 --- a/tests/wpt/web-platform-tests/tools/tox.ini +++ b/tests/wpt/web-platform-tests/tools/tox.ini @@ -10,6 +10,7 @@ deps = {toxinidir}/html5lib pytest-travis-fold coverage + mock commands = coverage run -m pytest diff --git a/tests/wpt/web-platform-tests/tools/wptserve/.travis.yml b/tests/wpt/web-platform-tests/tools/wptserve/.travis.yml new file mode 100644 index 00000000000..00183731ba5 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/.travis.yml @@ -0,0 +1,24 @@ +language: python + +sudo: false + +cache: + directories: + - $HOME/.cache/pip + +matrix: + include: + - python: 2.7 + env: TOXENV=py27 + - python: pypy + env: TOXENV=pypy + +install: + - pip install -U tox codecov + +script: + - tox + +after_success: + - coverage combine + - codecov diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/__init__.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py index fe33a029129..eae7e87d9e1 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py @@ -1,3 +1,5 @@ +from __future__ import print_function + import base64 import logging import os @@ -10,6 +12,8 @@ import wptserve logging.basicConfig() +wptserve.logger.set_logger(logging.getLogger()) + here = os.path.split(__file__)[0] doc_root = os.path.join(here, "docroot") @@ -24,7 +28,7 @@ class Request(urllib2.Request): def add_data(self, data): if hasattr(data, "iteritems"): data = urllib.urlencode(data) - print data + print(data) self.add_header("Content-Length", str(len(data))) urllib2.Request.add_data(self, data) @@ -56,6 +60,6 @@ class TestUsingServer(unittest.TestCase): req.add_data(body) if auth is not None: - req.add_header("Authorization", "Basic %s" % base64.encodestring('%s:%s' % auth)) + req.add_header("Authorization", "Basic %s" % base64.b64encode('%s:%s' % auth)) return urllib2.urlopen(req) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/invalid.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/invalid.py new file mode 100644 index 00000000000..017d4d9d697 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/invalid.py @@ -0,0 +1,3 @@ +# Oops... +def main(request, response + return "FAIL" diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/no_main.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/no_main.py new file mode 100644 index 00000000000..cee379fe1d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/no_main.py @@ -0,0 +1,3 @@ +# Oops... +def mian(request, response): + return "FAIL" diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub.sub.txt b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub.sub.txt new file mode 100644 index 00000000000..4302db16a2d --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub.sub.txt @@ -0,0 +1 @@ +{{host}} {{domains[]}} {{ports[http][0]}} diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub_headers.sub.txt b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub_headers.sub.txt new file mode 100644 index 00000000000..ee021eb8633 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub_headers.sub.txt @@ -0,0 +1 @@ +{{headers[X-Test]}} diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub_params.sub.txt b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub_params.sub.txt new file mode 100644 index 00000000000..8323878d6f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/sub_params.sub.txt @@ -0,0 +1 @@ +{{GET[test]}} diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/subdir/file.txt b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/subdir/file.txt new file mode 100644 index 00000000000..06d84d30d58 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/subdir/file.txt @@ -0,0 +1 @@ +I am here to ensure that my containing directory exists. diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/with_headers.txt.sub.headers b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/with_headers.txt.sub.headers index 81c59853e25..4826221f55c 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/with_headers.txt.sub.headers +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/with_headers.txt.sub.headers @@ -1,3 +1,5 @@ Custom-Header: PASS Another-Header: {{$id:uuid()}} Same-Value-Header: {{$id}} +Double-Header: PA +Double-Header: SS diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py index 8cfd2565296..d1080b4bf15 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py @@ -1,10 +1,7 @@ -import os import unittest -import urllib2 -import json import wptserve -from base import TestUsingServer, doc_root +from .base import TestUsingServer class TestResponseSetCookie(TestUsingServer): def test_name_value(self): @@ -17,7 +14,7 @@ class TestResponseSetCookie(TestUsingServer): self.server.router.register(*route) resp = self.request(route[1]) - self.assertEquals(resp.info()["Set-Cookie"], "name=value; Path=/") + self.assertEqual(resp.info()["Set-Cookie"], "name=value; Path=/") def test_unset(self): @wptserve.handlers.handler @@ -45,8 +42,8 @@ class TestResponseSetCookie(TestUsingServer): parts = dict(item.split("=") for item in resp.info()["Set-Cookie"].split("; ") if item) - self.assertEquals(parts["name"], "") - self.assertEquals(parts["Path"], "/") + self.assertEqual(parts["name"], "") + self.assertEqual(parts["Path"], "/") #Should also check that expires is in the past class TestRequestCookies(TestUsingServer): @@ -58,8 +55,7 @@ class TestRequestCookies(TestUsingServer): route = ("GET", "/test/set_cookie", handler) self.server.router.register(*route) resp = self.request(route[1], headers={"Cookie": "name=value"}) - - self.assertEquals(resp.read(), "value") + self.assertEqual(resp.read(), b"value") if __name__ == '__main__': unittest.main() diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py index bc416932448..5974b85566e 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py @@ -1,85 +1,101 @@ import json import os +import pytest import unittest import urllib2 import uuid import wptserve -from base import TestUsingServer, doc_root +from .base import TestUsingServer, doc_root class TestFileHandler(TestUsingServer): def test_GET(self): resp = self.request("/document.txt") - self.assertEquals(200, resp.getcode()) - self.assertEquals("text/plain", resp.info()["Content-Type"]) - self.assertEquals(open(os.path.join(doc_root, "document.txt")).read(), resp.read()) + self.assertEqual(200, resp.getcode()) + self.assertEqual("text/plain", resp.info()["Content-Type"]) + self.assertEqual(open(os.path.join(doc_root, "document.txt"), 'rb').read(), resp.read()) def test_headers(self): resp = self.request("/with_headers.txt") - self.assertEquals(200, resp.getcode()) - self.assertEquals("PASS", resp.info()["Custom-Header"]) + self.assertEqual(200, resp.getcode()) + self.assertEqual("PASS", resp.info()["Custom-Header"]) # This will fail if it isn't a valid uuid uuid.UUID(resp.info()["Another-Header"]) - self.assertEquals(resp.info()["Same-Value-Header"], resp.info()["Another-Header"]) + self.assertEqual(resp.info()["Same-Value-Header"], resp.info()["Another-Header"]) + self.assertEqual(resp.info()["Double-Header"], "PA, SS") def test_range(self): resp = self.request("/document.txt", headers={"Range":"bytes=10-19"}) - self.assertEquals(206, resp.getcode()) + self.assertEqual(206, resp.getcode()) data = resp.read() - expected = open(os.path.join(doc_root, "document.txt")).read() - self.assertEquals(10, len(data)) - self.assertEquals("bytes 10-19/%i" % len(expected), resp.info()['Content-Range']) - self.assertEquals("10", resp.info()['Content-Length']) - self.assertEquals(expected[10:20], data) + expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() + self.assertEqual(10, len(data)) + self.assertEqual("bytes 10-19/%i" % len(expected), resp.info()['Content-Range']) + self.assertEqual("10", resp.info()['Content-Length']) + self.assertEqual(expected[10:20], data) def test_range_no_end(self): resp = self.request("/document.txt", headers={"Range":"bytes=10-"}) - self.assertEquals(206, resp.getcode()) + self.assertEqual(206, resp.getcode()) data = resp.read() - expected = open(os.path.join(doc_root, "document.txt")).read() - self.assertEquals(len(expected) - 10, len(data)) - self.assertEquals("bytes 10-%i/%i" % (len(expected) - 1, len(expected)), resp.info()['Content-Range']) - self.assertEquals(expected[10:], data) + expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() + self.assertEqual(len(expected) - 10, len(data)) + self.assertEqual("bytes 10-%i/%i" % (len(expected) - 1, len(expected)), resp.info()['Content-Range']) + self.assertEqual(expected[10:], data) def test_range_no_start(self): resp = self.request("/document.txt", headers={"Range":"bytes=-10"}) - self.assertEquals(206, resp.getcode()) + self.assertEqual(206, resp.getcode()) data = resp.read() - expected = open(os.path.join(doc_root, "document.txt")).read() - self.assertEquals(10, len(data)) - self.assertEquals("bytes %i-%i/%i" % (len(expected) - 10, - len(expected) - 1, - len(expected)), resp.info()['Content-Range']) - self.assertEquals(expected[-10:], data) + expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() + self.assertEqual(10, len(data)) + self.assertEqual("bytes %i-%i/%i" % (len(expected) - 10, len(expected) - 1, len(expected)), + resp.info()['Content-Range']) + self.assertEqual(expected[-10:], data) def test_multiple_ranges(self): resp = self.request("/document.txt", headers={"Range":"bytes=1-2,5-7,6-10"}) - self.assertEquals(206, resp.getcode()) + self.assertEqual(206, resp.getcode()) data = resp.read() - expected = open(os.path.join(doc_root, "document.txt")).read() + expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() self.assertTrue(resp.info()["Content-Type"].startswith("multipart/byteranges; boundary=")) boundary = resp.info()["Content-Type"].split("boundary=")[1] parts = data.split("--" + boundary) - self.assertEquals("\r\n", parts[0]) - self.assertEquals("--", parts[-1]) + self.assertEqual("\r\n", parts[0]) + self.assertEqual("--", parts[-1]) expected_parts = [("1-2", expected[1:3]), ("5-10", expected[5:11])] for expected_part, part in zip(expected_parts, parts[1:-1]): header_string, body = part.split("\r\n\r\n") headers = dict(item.split(": ", 1) for item in header_string.split("\r\n") if item.strip()) - self.assertEquals(headers["Content-Type"], "text/plain") - self.assertEquals(headers["Content-Range"], "bytes %s/%i" % (expected_part[0], len(expected))) - self.assertEquals(expected_part[1] + "\r\n", body) + self.assertEqual(headers["Content-Type"], "text/plain") + self.assertEqual(headers["Content-Range"], "bytes %s/%i" % (expected_part[0], len(expected))) + self.assertEqual(expected_part[1] + "\r\n", body) def test_range_invalid(self): with self.assertRaises(urllib2.HTTPError) as cm: self.request("/document.txt", headers={"Range":"bytes=11-10"}) - self.assertEquals(cm.exception.code, 416) + self.assertEqual(cm.exception.code, 416) - expected = open(os.path.join(doc_root, "document.txt")).read() + expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() with self.assertRaises(urllib2.HTTPError) as cm: self.request("/document.txt", headers={"Range":"bytes=%i-%i" % (len(expected), len(expected) + 10)}) - self.assertEquals(cm.exception.code, 416) + self.assertEqual(cm.exception.code, 416) + + def test_sub_config(self): + resp = self.request("/sub.sub.txt") + expected = b"localhost localhost %i" % self.server.port + assert resp.read().rstrip() == expected + + def test_sub_headers(self): + resp = self.request("/sub_headers.sub.txt", headers={"X-Test": "PASS"}) + expected = b"PASS" + assert resp.read().rstrip() == expected + + def test_sub_params(self): + resp = self.request("/sub_params.sub.txt", query="test=PASS") + expected = b"PASS" + assert resp.read().rstrip() == expected class TestFunctionHandler(TestUsingServer): @@ -91,9 +107,22 @@ class TestFunctionHandler(TestUsingServer): route = ("GET", "/test/test_string_rv", handler) self.server.router.register(*route) resp = self.request(route[1]) - self.assertEquals(200, resp.getcode()) - self.assertEquals("9", resp.info()["Content-Length"]) - self.assertEquals("test data", resp.read()) + self.assertEqual(200, resp.getcode()) + self.assertEqual("9", resp.info()["Content-Length"]) + self.assertEqual("test data", resp.read()) + + def test_tuple_1_rv(self): + @wptserve.handlers.handler + def handler(request, response): + return () + + route = ("GET", "/test/test_tuple_1_rv", handler) + self.server.router.register(*route) + + with pytest.raises(urllib2.HTTPError) as cm: + self.request(route[1]) + + assert cm.value.code == 500 def test_tuple_2_rv(self): @wptserve.handlers.handler @@ -103,10 +132,10 @@ class TestFunctionHandler(TestUsingServer): route = ("GET", "/test/test_tuple_2_rv", handler) self.server.router.register(*route) resp = self.request(route[1]) - self.assertEquals(200, resp.getcode()) - self.assertEquals("4", resp.info()["Content-Length"]) - self.assertEquals("test-value", resp.info()["test-header"]) - self.assertEquals("test", resp.read()) + self.assertEqual(200, resp.getcode()) + self.assertEqual("4", resp.info()["Content-Length"]) + self.assertEqual("test-value", resp.info()["test-header"]) + self.assertEqual("test", resp.read()) def test_tuple_3_rv(self): @wptserve.handlers.handler @@ -116,9 +145,9 @@ class TestFunctionHandler(TestUsingServer): route = ("GET", "/test/test_tuple_3_rv", handler) self.server.router.register(*route) resp = self.request(route[1]) - self.assertEquals(202, resp.getcode()) - self.assertEquals("test-value", resp.info()["test-header"]) - self.assertEquals("test data", resp.read()) + self.assertEqual(202, resp.getcode()) + self.assertEqual("test-value", resp.info()["test-header"]) + self.assertEqual("test data", resp.read()) def test_tuple_3_rv_1(self): @wptserve.handlers.handler @@ -128,10 +157,36 @@ class TestFunctionHandler(TestUsingServer): route = ("GET", "/test/test_tuple_3_rv_1", handler) self.server.router.register(*route) resp = self.request(route[1]) - self.assertEquals(202, resp.getcode()) - self.assertEquals("Some Status", resp.msg) - self.assertEquals("test-value", resp.info()["test-header"]) - self.assertEquals("test data", resp.read()) + self.assertEqual(202, resp.getcode()) + self.assertEqual("Some Status", resp.msg) + self.assertEqual("test-value", resp.info()["test-header"]) + self.assertEqual("test data", resp.read()) + + def test_tuple_4_rv(self): + @wptserve.handlers.handler + def handler(request, response): + return 202, [("test-header", "test-value")], "test data", "garbage" + + route = ("GET", "/test/test_tuple_1_rv", handler) + self.server.router.register(*route) + + with pytest.raises(urllib2.HTTPError) as cm: + self.request(route[1]) + + assert cm.value.code == 500 + + def test_none_rv(self): + @wptserve.handlers.handler + def handler(request, response): + return None + + route = ("GET", "/test/test_none_rv", handler) + self.server.router.register(*route) + resp = self.request(route[1]) + assert resp.getcode() == 200 + assert "Content-Length" not in resp.info() + assert resp.read() == b"" + class TestJSONHandler(TestUsingServer): def test_json_0(self): @@ -142,8 +197,8 @@ class TestJSONHandler(TestUsingServer): route = ("GET", "/test/test_json_0", handler) self.server.router.register(*route) resp = self.request(route[1]) - self.assertEquals(200, resp.getcode()) - self.assertEquals({"data": "test data"}, json.load(resp)) + self.assertEqual(200, resp.getcode()) + self.assertEqual({"data": "test data"}, json.load(resp)) def test_json_tuple_2(self): @wptserve.handlers.json_handler @@ -153,9 +208,9 @@ class TestJSONHandler(TestUsingServer): route = ("GET", "/test/test_json_tuple_2", handler) self.server.router.register(*route) resp = self.request(route[1]) - self.assertEquals(200, resp.getcode()) - self.assertEquals("test-value", resp.info()["test-header"]) - self.assertEquals({"data": "test data"}, json.load(resp)) + self.assertEqual(200, resp.getcode()) + self.assertEqual("test-value", resp.info()["test-header"]) + self.assertEqual({"data": "test data"}, json.load(resp)) def test_json_tuple_3(self): @wptserve.handlers.json_handler @@ -165,47 +220,78 @@ class TestJSONHandler(TestUsingServer): route = ("GET", "/test/test_json_tuple_2", handler) self.server.router.register(*route) resp = self.request(route[1]) - self.assertEquals(202, resp.getcode()) - self.assertEquals("Giraffe", resp.msg) - self.assertEquals("test-value", resp.info()["test-header"]) - self.assertEquals({"data": "test data"}, json.load(resp)) + self.assertEqual(202, resp.getcode()) + self.assertEqual("Giraffe", resp.msg) + self.assertEqual("test-value", resp.info()["test-header"]) + self.assertEqual({"data": "test data"}, json.load(resp)) class TestPythonHandler(TestUsingServer): def test_string(self): resp = self.request("/test_string.py") - self.assertEquals(200, resp.getcode()) - self.assertEquals("text/plain", resp.info()["Content-Type"]) - self.assertEquals("PASS", resp.read()) + self.assertEqual(200, resp.getcode()) + self.assertEqual("text/plain", resp.info()["Content-Type"]) + self.assertEqual("PASS", resp.read()) def test_tuple_2(self): resp = self.request("/test_tuple_2.py") - self.assertEquals(200, resp.getcode()) - self.assertEquals("text/html", resp.info()["Content-Type"]) - self.assertEquals("PASS", resp.info()["X-Test"]) - self.assertEquals("PASS", resp.read()) + self.assertEqual(200, resp.getcode()) + self.assertEqual("text/html", resp.info()["Content-Type"]) + self.assertEqual("PASS", resp.info()["X-Test"]) + self.assertEqual("PASS", resp.read()) def test_tuple_3(self): resp = self.request("/test_tuple_3.py") - self.assertEquals(202, resp.getcode()) - self.assertEquals("Giraffe", resp.msg) - self.assertEquals("text/html", resp.info()["Content-Type"]) - self.assertEquals("PASS", resp.info()["X-Test"]) - self.assertEquals("PASS", resp.read()) + self.assertEqual(202, resp.getcode()) + self.assertEqual("Giraffe", resp.msg) + self.assertEqual("text/html", resp.info()["Content-Type"]) + self.assertEqual("PASS", resp.info()["X-Test"]) + self.assertEqual("PASS", resp.read()) + + def test_no_main(self): + with pytest.raises(urllib2.HTTPError) as cm: + self.request("/no_main.py") + + assert cm.value.code == 500 + + def test_invalid(self): + with pytest.raises(urllib2.HTTPError) as cm: + self.request("/invalid.py") + + assert cm.value.code == 500 + + def test_missing(self): + with pytest.raises(urllib2.HTTPError) as cm: + self.request("/missing.py") + + assert cm.value.code == 404 + class TestDirectoryHandler(TestUsingServer): def test_directory(self): resp = self.request("/") - self.assertEquals(200, resp.getcode()) - self.assertEquals("text/html", resp.info()["Content-Type"]) + self.assertEqual(200, resp.getcode()) + self.assertEqual("text/html", resp.info()["Content-Type"]) #Add a check that the response is actually sane + def test_subdirectory_trailing_slash(self): + resp = self.request("/subdir/") + assert resp.getcode() == 200 + assert resp.info()["Content-Type"] == "text/html" + + def test_subdirectory_no_trailing_slash(self): + with pytest.raises(urllib2.HTTPError) as cm: + self.request("/subdir") + + assert cm.value.code == 404 + + class TestAsIsHandler(TestUsingServer): def test_as_is(self): resp = self.request("/test.asis") - self.assertEquals(202, resp.getcode()) - self.assertEquals("Giraffe", resp.msg) - self.assertEquals("PASS", resp.info()["X-Test"]) - self.assertEquals("Content", resp.read()) + self.assertEqual(202, resp.getcode()) + self.assertEqual("Giraffe", resp.msg) + self.assertEqual("PASS", resp.info()["X-Test"]) + self.assertEqual("Content", resp.read()) #Add a check that the response is actually sane if __name__ == '__main__': diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py index 08deaf01cd7..af5068108c8 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py @@ -1,70 +1,67 @@ import os import unittest -import urllib2 -import json import time -import wptserve -from base import TestUsingServer, doc_root +from .base import TestUsingServer, doc_root class TestStatus(TestUsingServer): def test_status(self): resp = self.request("/document.txt", query="pipe=status(202)") - self.assertEquals(resp.getcode(), 202) + self.assertEqual(resp.getcode(), 202) class TestHeader(TestUsingServer): def test_not_set(self): resp = self.request("/document.txt", query="pipe=header(X-TEST,PASS)") - self.assertEquals(resp.info()["X-TEST"], "PASS") + self.assertEqual(resp.info()["X-TEST"], "PASS") def test_set(self): resp = self.request("/document.txt", query="pipe=header(Content-Type,text/html)") - self.assertEquals(resp.info()["Content-Type"], "text/html") + self.assertEqual(resp.info()["Content-Type"], "text/html") def test_multiple(self): resp = self.request("/document.txt", query="pipe=header(X-Test,PASS)|header(Content-Type,text/html)") - self.assertEquals(resp.info()["X-TEST"], "PASS") - self.assertEquals(resp.info()["Content-Type"], "text/html") + self.assertEqual(resp.info()["X-TEST"], "PASS") + self.assertEqual(resp.info()["Content-Type"], "text/html") def test_multiple_same(self): resp = self.request("/document.txt", query="pipe=header(Content-Type,FAIL)|header(Content-Type,text/html)") - self.assertEquals(resp.info()["Content-Type"], "text/html") + self.assertEqual(resp.info()["Content-Type"], "text/html") def test_multiple_append(self): resp = self.request("/document.txt", query="pipe=header(X-Test,1)|header(X-Test,2,True)") - self.assertEquals(resp.info()["X-Test"], "1, 2") + self.assertEqual(resp.info()["X-Test"], "1, 2") class TestSlice(TestUsingServer): def test_both_bounds(self): resp = self.request("/document.txt", query="pipe=slice(1,10)") - expected = open(os.path.join(doc_root, "document.txt")).read() - self.assertEquals(resp.read(), expected[1:10]) + expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() + self.assertEqual(resp.read(), expected[1:10]) def test_no_upper(self): resp = self.request("/document.txt", query="pipe=slice(1)") - expected = open(os.path.join(doc_root, "document.txt")).read() - self.assertEquals(resp.read(), expected[1:]) + expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() + self.assertEqual(resp.read(), expected[1:]) def test_no_lower(self): resp = self.request("/document.txt", query="pipe=slice(null,10)") - expected = open(os.path.join(doc_root, "document.txt")).read() - self.assertEquals(resp.read(), expected[:10]) + expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() + self.assertEqual(resp.read(), expected[:10]) class TestSub(TestUsingServer): def test_sub_config(self): resp = self.request("/sub.txt", query="pipe=sub") - expected = "localhost localhost %i\n" % self.server.port - self.assertEquals(resp.read(), expected) + expected = "localhost localhost %i" % self.server.port + self.assertEqual(resp.read().rstrip(), expected) def test_sub_headers(self): resp = self.request("/sub_headers.txt", query="pipe=sub", headers={"X-Test": "PASS"}) - expected = "PASS\n" - self.assertEquals(resp.read(), expected) + expected = "PASS" + self.assertEqual(resp.read().rstrip(), expected) def test_sub_params(self): resp = self.request("/sub_params.txt", query="test=PASS&pipe=sub") - expected = "PASS\n" - self.assertEquals(resp.read(), expected) + expected = "PASS" + self.assertEqual(resp.read().rstrip(), expected) class TestTrickle(TestUsingServer): def test_trickle(self): @@ -72,8 +69,8 @@ class TestTrickle(TestUsingServer): t0 = time.time() resp = self.request("/document.txt", query="pipe=trickle(1:d2:5:d1:r2)") t1 = time.time() - expected = open(os.path.join(doc_root, "document.txt")).read() - self.assertEquals(resp.read(), expected) + expected = open(os.path.join(doc_root, "document.txt"), 'rb').read() + self.assertEqual(resp.read(), expected) self.assertGreater(6, t1-t0) if __name__ == '__main__': diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py index dab68e4958f..40dfe7703d1 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py @@ -1,11 +1,7 @@ -import os import unittest -import urllib2 -import json -import time import wptserve -from base import TestUsingServer, doc_root +from .base import TestUsingServer class TestInputFile(TestUsingServer): def test_seek(self): @@ -31,10 +27,10 @@ class TestInputFile(TestUsingServer): route = ("POST", "/test/test_seek", handler) self.server.router.register(*route) resp = self.request(route[1], method="POST", body="12345ab\ncdef") - self.assertEquals(200, resp.getcode()) - self.assertEquals(["ab", "7", "12345ab\n", "8", "cdef", "12", - "12345ab\ncdef", "12345ab\n", "cdef"], - resp.read().split(" ")) + self.assertEqual(200, resp.getcode()) + self.assertEqual(["ab", "7", "12345ab\n", "8", "cdef", "12", + "12345ab\ncdef", "12345ab\n", "cdef"], + resp.read().split(" ")) def test_iter(self): @wptserve.handlers.handler @@ -45,8 +41,8 @@ class TestInputFile(TestUsingServer): route = ("POST", "/test/test_iter", handler) self.server.router.register(*route) resp = self.request(route[1], method="POST", body="12345\nabcdef\r\nzyxwv") - self.assertEquals(200, resp.getcode()) - self.assertEquals(["12345\n", "abcdef\r\n", "zyxwv"], resp.read().split(" ")) + self.assertEqual(200, resp.getcode()) + self.assertEqual(["12345\n", "abcdef\r\n", "zyxwv"], resp.read().split(" ")) class TestRequest(TestUsingServer): def test_body(self): @@ -58,7 +54,7 @@ class TestRequest(TestUsingServer): route = ("POST", "/test/test_body", handler) self.server.router.register(*route) resp = self.request(route[1], method="POST", body="12345ab\ncdef") - self.assertEquals("12345ab\ncdef", resp.read()) + self.assertEqual("12345ab\ncdef", resp.read()) def test_route_match(self): @wptserve.handlers.handler @@ -68,7 +64,7 @@ class TestRequest(TestUsingServer): route = ("GET", "/test/{match}_*", handler) self.server.router.register(*route) resp = self.request("/test/some_route") - self.assertEquals("some route", resp.read()) + self.assertEqual("some route", resp.read()) class TestAuth(TestUsingServer): def test_auth(self): @@ -79,8 +75,8 @@ class TestAuth(TestUsingServer): route = ("GET", "/test/test_auth", handler) self.server.router.register(*route) resp = self.request(route[1], auth=("test", "PASS")) - self.assertEquals(200, resp.getcode()) - self.assertEquals(["test", "PASS"], resp.read().split(" ")) + self.assertEqual(200, resp.getcode()) + self.assertEqual(["test", "PASS"], resp.read().split(" ")) if __name__ == '__main__': unittest.main() diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py index 86398677e09..e9808b54ef1 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py @@ -1,12 +1,8 @@ -import os import unittest -import urllib2 -import json -import time from types import MethodType import wptserve -from base import TestUsingServer, doc_root +from .base import TestUsingServer def send_body_as_header(self): if self._response.add_required_headers: @@ -27,9 +23,9 @@ class TestResponse(TestUsingServer): route = ("GET", "/test/test_head_without_body", handler) self.server.router.register(*route) resp = self.request(route[1], method="HEAD") - self.assertEquals("6", resp.info()['Content-Length']) - self.assertEquals("TEST", resp.info()['x-Test']) - self.assertEquals("", resp.info()['x-body']) + self.assertEqual("6", resp.info()['Content-Length']) + self.assertEqual("TEST", resp.info()['x-Test']) + self.assertEqual("", resp.info()['x-body']) def test_head_with_body(self): @wptserve.handlers.handler @@ -43,9 +39,9 @@ class TestResponse(TestUsingServer): route = ("GET", "/test/test_head_with_body", handler) self.server.router.register(*route) resp = self.request(route[1], method="HEAD") - self.assertEquals("6", resp.info()['Content-Length']) - self.assertEquals("TEST", resp.info()['x-Test']) - self.assertEquals("body", resp.info()['X-Body']) + self.assertEqual("6", resp.info()['Content-Length']) + self.assertEqual("TEST", resp.info()['x-Test']) + self.assertEqual("body", resp.info()['X-Body']) if __name__ == '__main__': unittest.main() diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py index 4630ffb9fdf..7681f441241 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py @@ -1,17 +1,15 @@ -import os import unittest import urllib2 -import json import wptserve -from base import TestUsingServer, doc_root +from .base import TestUsingServer class TestFileHandler(TestUsingServer): def test_not_handled(self): with self.assertRaises(urllib2.HTTPError) as cm: resp = self.request("/not_existing") - self.assertEquals(cm.exception.code, 404) + self.assertEqual(cm.exception.code, 404) class TestRewriter(TestUsingServer): def test_rewrite(self): @@ -23,8 +21,8 @@ class TestRewriter(TestUsingServer): self.server.rewriter.register("GET", "/test/original", route[1]) self.server.router.register(*route) resp = self.request("/test/original") - self.assertEquals(200, resp.getcode()) - self.assertEquals("/test/rewritten", resp.read()) + self.assertEqual(200, resp.getcode()) + self.assertEqual("/test/rewritten", resp.read()) class TestRequestHandler(TestUsingServer): def test_exception(self): @@ -37,7 +35,7 @@ class TestRequestHandler(TestUsingServer): with self.assertRaises(urllib2.HTTPError) as cm: resp = self.request("/test/raises") - self.assertEquals(cm.exception.code, 500) + self.assertEqual(cm.exception.code, 500) if __name__ == "__main__": unittest.main() diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py index 9cbff3a7b6d..134293d3468 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py @@ -1,14 +1,16 @@ -import os import unittest -import urllib2 -import json import uuid import wptserve from wptserve.router import any_method -from base import TestUsingServer, doc_root +from wptserve.stash import StashServer +from .base import TestUsingServer class TestResponseSetCookie(TestUsingServer): + def run(self, result=None): + with StashServer(None, authkey=str(uuid.uuid4())): + super(TestResponseSetCookie, self).run(result) + def test_put_take(self): @wptserve.handlers.handler def handler(request, response): @@ -26,13 +28,13 @@ class TestResponseSetCookie(TestUsingServer): self.server.router.register(*route) resp = self.request(route[1], method="POST", body={"id": id, "data": "Sample data"}) - self.assertEquals(resp.read(), "OK") + self.assertEqual(resp.read(), "OK") resp = self.request(route[1], query="id=" + id) - self.assertEquals(resp.read(), "Sample data") + self.assertEqual(resp.read(), "Sample data") resp = self.request(route[1], query="id=" + id) - self.assertEquals(resp.read(), "NOT FOUND") + self.assertEqual(resp.read(), "NOT FOUND") if __name__ == '__main__': diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tox.ini b/tests/wpt/web-platform-tests/tools/wptserve/tox.ini new file mode 100644 index 00000000000..9532ca4c2b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tox.ini @@ -0,0 +1,17 @@ +[tox] +envlist = py27,pypy + +[testenv] +deps = + coverage + flake8 + pytest + +commands = + coverage run -m pytest tests/functional + flake8 + +[flake8] +ignore = E128,E129,E221,E226,E231,E251,E265,E302,E303,E402,E901,F821,F841 +max-line-length = 141 +exclude=docs,.git,__pycache__,.tox,.eggs,*.egg,tests/functional/docroot/ diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/__init__.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/__init__.py index cac5aeb3ca9..a286bfe0b3b 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/__init__.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/__init__.py @@ -1,3 +1,3 @@ -from server import WebTestHttpd, WebTestServer, Router -from request import Request -from response import Response +from .server import WebTestHttpd, WebTestServer, Router # noqa: F401 +from .request import Request # noqa: F401 +from .response import Response # noqa: F401 diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/constants.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/constants.py index 385e512c7d5..bd36344a445 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/constants.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/constants.py @@ -1,4 +1,4 @@ -import utils +from . import utils content_types = utils.invert_dict({"text/html": ["htm", "html"], "application/json": ["json"], @@ -89,4 +89,4 @@ response_codes = { 504: ('Gateway Timeout', 'The gateway server did not receive a timely response'), 505: ('HTTP Version Not Supported', 'Cannot fulfill request.'), - } +} diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py index 318219c30e7..9f60fd0d722 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py @@ -5,12 +5,12 @@ import traceback import urllib import urlparse -from constants import content_types -from pipes import Pipeline, template -from ranges import RangeParser -from request import Authentication -from response import MultipartContent -from utils import HTTPException +from .constants import content_types +from .pipes import Pipeline, template +from .ranges import RangeParser +from .request import Authentication +from .response import MultipartContent +from .utils import HTTPException __all__ = ["file_handler", "python_script_handler", "FunctionHandler", "handler", "json_handler", @@ -55,13 +55,14 @@ class DirectoryHandler(object): return "<%s base_path:%s url_base:%s>" % (self.__class__.__name__, self.base_path, self.url_base) def __call__(self, request, response): - if not request.url_parts.path.endswith("/"): + url_path = request.url_parts.path + + if not url_path.endswith("/"): raise HTTPException(404) path = filesystem_path(self.base_path, request, self.url_base) - if not os.path.isdir(path): - raise HTTPException(404, "%s is not a directory" % path) + assert os.path.isdir(path) response.headers = [("Content-Type", "text/html")] response.content = """ @@ -71,19 +72,18 @@ class DirectoryHandler(object):
    %(items)s
-""" % {"path": cgi.escape(request.url_parts.path), - "items": "\n".join(self.list_items(request, path))} +""" % {"path": cgi.escape(url_path), + "items": "\n".join(self.list_items(url_path, path))} # flake8: noqa + + def list_items(self, base_path, path): + assert base_path.endswith("/") - def list_items(self, request, path): # TODO: this won't actually list all routes, only the # ones that correspond to a real filesystem path. It's # not possible to list every route that will match # something, but it should be possible to at least list the # statically defined ones - base_path = request.url_parts.path - if not base_path.endswith("/"): - base_path += "/" if base_path != "/": link = urlparse.urljoin(base_path, "..") yield ("""
  • %(name)s
  • """ % @@ -99,9 +99,6 @@ class DirectoryHandler(object): {"link": link, "name": cgi.escape(item), "class": class_}) -directory_handler = DirectoryHandler() - - class FileHandler(object): def __init__(self, base_path=None, url_base="/"): self.base_path = base_path diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py index aa13e188289..41f7dd33e26 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py @@ -424,7 +424,7 @@ def template(request, content, escape_type="html"): return escape_func(unicode(value)).encode("utf-8") template_regexp = re.compile(r"{{([^}]*)}}") - new_content, count = template_regexp.subn(config_replacement, content) + new_content = template_regexp.sub(config_replacement, content) return new_content diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py index 12935fd91b1..976cb1781a0 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py @@ -1,4 +1,4 @@ -from utils import HTTPException +from .utils import HTTPException class RangeParser(object): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py index b12b4b827f3..6b8a7cef86e 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py @@ -1,13 +1,12 @@ import base64 import cgi import Cookie -import os import StringIO import tempfile import urlparse -import stash -from utils import HTTPException +from . import stash +from .utils import HTTPException missing = object() diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py index d4c7aab06b8..6c073feea9e 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py @@ -6,8 +6,8 @@ import types import uuid import socket -from constants import response_codes -from logger import get_logger +from .constants import response_codes +from .logger import get_logger missing = object() @@ -344,7 +344,7 @@ class ResponseHeaders(object): def update(self, items_iter): for name, value in items_iter: - self.set(name, value) + self.append(name, value) def __repr__(self): return repr(self.data) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/router.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/router.py index 3c8c87f4792..a35e098e62e 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/router.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/router.py @@ -2,7 +2,7 @@ import itertools import re import types -from logger import get_logger +from .logger import get_logger any_method = object() @@ -78,7 +78,7 @@ def compile_path_match(route_pattern): tokenizer = RouteTokenizer() tokens, unmatched = tokenizer.scan(route_pattern) - assert unmatched is "", unmatched + assert unmatched == "", unmatched compiler = RouteCompiler() diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/routes.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/routes.py index d2bdcfb30ef..b6e3800018a 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/routes.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/routes.py @@ -1,5 +1,5 @@ -import handlers -from router import any_method +from . import handlers +from .router import any_method routes = [(any_method, "*.py", handlers.python_script_handler), ("GET", "*.asis", handlers.as_is_handler), ("GET", "*", handlers.file_handler), diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py index cc79c08c80c..31929efd6e1 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py @@ -1,7 +1,6 @@ import BaseHTTPServer import errno import os -import re import socket from SocketServer import ThreadingMixIn import ssl @@ -12,12 +11,12 @@ import traceback import types import urlparse -import routes as default_routes -from logger import get_logger -from request import Server, Request -from response import Response -from router import Router -from utils import HTTPException +from . import routes as default_routes +from .logger import get_logger +from .request import Server, Request +from .response import Response +from .router import Router +from .utils import HTTPException """HTTP server designed for testing purposes. @@ -183,12 +182,11 @@ class WebTestServer(ThreadingMixIn, BaseHTTPServer.HTTPServer): server_side=True) def handle_error(self, request, client_address): - error = sys.exc_value + error = sys.exc_info()[1] if ((isinstance(error, socket.error) and isinstance(error.args, tuple) and - error.args[0] in self.acceptable_errors) - or + error.args[0] in self.acceptable_errors) or (isinstance(error, IOError) and error.errno in self.acceptable_errors)): pass # remote hang up before the result is sent @@ -282,7 +280,7 @@ class WebTestRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): # Ensure that the whole request has been read from the socket request.raw_input.read() - except socket.timeout, e: + except socket.timeout as e: self.log_error("Request timed out: %r", e) self.close_connection = True return @@ -419,7 +417,7 @@ class WebTestHttpd(object): _host, self.port = self.httpd.socket.getsockname() except Exception: - self.logger.error('Init failed! You may need to modify your hosts file. Refer to README.md.'); + self.logger.error('Init failed! You may need to modify your hosts file. Refer to README.md.') raise def start(self, block=False): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/stash.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/stash.py index 56476176e82..b6bd6eed442 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/stash.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/stash.py @@ -2,7 +2,6 @@ import base64 import json import os import uuid -from multiprocessing import Process from multiprocessing.managers import BaseManager, DictProxy class ServerDictManager(BaseManager): @@ -131,7 +130,7 @@ class Stash(object): the current request path)""" internal_key = self._wrap_key(key, path) value = self.data.get(internal_key, None) - if not value is None: + if value is not None: try: self.data.pop(internal_key) except KeyError: diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/startTime.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/startTime.html index d6da1ae0369..6dfd7cf2941 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/startTime.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/startTime.html @@ -44,5 +44,12 @@ promise_test(function(t) { }); }, 'startTime is resolved when running'); +test(function(t) { + var animation = createDiv(t).animate(null, 100 * MS_PER_SEC); + animation.cancel(); + assert_equals(animation.startTime, null); + assert_equals(animation.currentTime, null); +}, 'startTime and currentTime are unresolved when animation is cancelled'); + diff --git a/tests/wpt/web-platform-tests/workers/interfaces/WorkerUtils/navigator/window-only.worker.js b/tests/wpt/web-platform-tests/workers/interfaces/WorkerUtils/navigator/window-only.worker.js new file mode 100644 index 00000000000..7095281ecd3 --- /dev/null +++ b/tests/wpt/web-platform-tests/workers/interfaces/WorkerUtils/navigator/window-only.worker.js @@ -0,0 +1,22 @@ +importScripts("/resources/testharness.js"); + +var properties = [ + "appCodeName", + "product", + "productSub", + "vendor", + "vendorSub", + + // Only exist in Window scopes if navigator compatibility mode is Gecko; + // never exist in workers. + "taintEnabled", + "oscpu", +]; + +properties.forEach(function(property) { + test(function() { + assert_false(property in navigator); + }, "NavigatorID properties exposed only for Window: " + property); +}); + +done(); diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/001.worker.js b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/001.worker.js index 75cb3809f29..23df420368a 100644 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/001.worker.js +++ b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/001.worker.js @@ -1,12 +1,9 @@ importScripts("/resources/testharness.js"); var expected = [ + // https://html.spec.whatwg.org/ "WorkerGlobalScope", - "EventTarget", "DedicatedWorkerGlobalScope", - "ErrorEvent", - "Event", "Worker", - "DOMException", "SharedWorker", "MessagePort", "MessageEvent", @@ -14,12 +11,15 @@ var expected = [ "MessageChannel", "WorkerLocation", "ImageData", - "File", - "Blob", - "FileList", - "XMLHttpRequest", - "ProgressEvent", - "FormData", + "ImageBitmap", + "CanvasPath", + "Path2D", + "PromiseRejectionEvent", + "EventSource", + "WebSocket", + "CloseEvent", + "BroadcastChannel", + // https://tc39.github.io/ecma262/ "ArrayBuffer", "Int8Array", "Uint8Array", @@ -31,14 +31,45 @@ var expected = [ "Float32Array", "Float64Array", "DataView", - "CanvasProxy", - "ImageBitmap", - "CanvasRenderingContext2D", - "DrawingStyle", - "CanvasGradient", - "CanvasPattern", - "Path", - "TextMetrics" + // https://xhr.spec.whatwg.org/ + "XMLHttpRequestEventTarget", + "XMLHttpRequestUpload", + "XMLHttpRequest", + "ProgressEvent", + "FormData", + // https://url.spec.whatwg.org/ + "URL", + "URLSearchParams", + // https://w3c.github.io/FileAPI/ + "File", + "Blob", + "FileList", + "FileReader", + "FileReaderSync", + // https://dom.spec.whatwg.org/ + "EventTarget", + "ErrorEvent", + "Event", + "CustomEvent", + // http://heycam.github.io/webidl/ + "DOMException", + // https://streams.spec.whatwg.org/ + "ReadableStream", + "WritableStream", + "ByteLengthQueuingStrategy", + "CountQueuingStrategy", + // http://w3c.github.io/IndexedDB/ + "IDBRequest", + "IDBOpenDBRequest", + "IDBVersionChangeEvent", + "IDBFactory", + "IDBDatabase", + "IDBObjectStore", + "IDBIndex", + "IDBKeyRange", + "IDBCursor", + "IDBCursorWithValue", + "IDBTransaction", ]; for (var i = 0; i < expected.length; ++i) { test(function () { diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/002.worker.js b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/002.worker.js index 3fa58a25ca9..0f514988bd2 100644 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/002.worker.js +++ b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/002.worker.js @@ -1,14 +1,45 @@ importScripts("/resources/testharness.js"); var unexpected = [ + // https://html.spec.whatwg.org/ + "SharedWorkerGlobalScope", "AbstractView", "AbstractWorker", "ApplicationCache", "Location", "Navigator", - "DOMImplementation", "Audio", "HTMLCanvasElement", + "Path", + "TextMetrics", + "CanvasProxy", + "CanvasRenderingContext2D", + "DrawingStyle", + "CanvasGradient", + "CanvasPattern", + "PopStateEvent", + "HashChangeEvent", + "PageTransitionEvent", + // https://dom.spec.whatwg.org/ + "DOMImplementation", + // https://streams.spec.whatwg.org/ + "ReadableStreamDefaultReader", + "ReadableStreamBYOBReader", + "ReadableStreamDefaultController", + "ReadableByteStreamController", + "WritableStreamDefaultWriter", + "WritableStreamDefaultController", + // http://w3c.github.io/IndexedDB/ + "IDBEnvironment", + // https://www.w3.org/TR/2010/NOTE-webdatabase-20101118/ + "Database", + // https://w3c.github.io/uievents/ + "UIEvent", + "FocusEvent", "MouseEvent", + "WheelEvent", + "InputEvent", + "KeyboardEvent", + "CompositionEvent", ]; for (var i = 0; i < unexpected.length; ++i) { test(function () { diff --git a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.html b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.html index 23ae59b4576..5277825dbc1 100644 --- a/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.html +++ b/tests/wpt/web-platform-tests/workers/semantics/interface-objects/003.html @@ -1,12 +1,83 @@ @@ -16,13 +87,18 @@ onconnect = function(e) {
    @@ -16,13 +54,18 @@ onconnect = function(e) {