diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 5d096a98043..f0412365099 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -4689,6 +4689,16 @@ ], "url": "/html/rendering/bindings/the-textarea-element-0/rows-zero.html" }, + { + "path": "html/rendering/non-replaced-elements/flow-content-0/div-align.html", + "references": [ + [ + "/html/rendering/non-replaced-elements/flow-content-0/div-align-ref.html", + "==" + ] + ], + "url": "/html/rendering/non-replaced-elements/flow-content-0/div-align.html" + }, { "path": "html/rendering/non-replaced-elements/flow-content-0/figure.html", "references": [ @@ -11973,6 +11983,10 @@ "path": "IndexedDB/idbobjectstore_createIndex13.htm", "url": "/IndexedDB/idbobjectstore_createIndex13.htm" }, + { + "path": "IndexedDB/idbobjectstore_createIndex14-exception_order.htm", + "url": "/IndexedDB/idbobjectstore_createIndex14-exception_order.htm" + }, { "path": "IndexedDB/idbobjectstore_createIndex2.htm", "url": "/IndexedDB/idbobjectstore_createIndex2.htm" @@ -12253,10 +12267,26 @@ "path": "IndexedDB/value_recursive.htm", "url": "/IndexedDB/value_recursive.htm" }, + { + "path": "WebCryptoAPI/generateKey/failures.worker.js", + "url": "/WebCryptoAPI/generateKey/failures.worker" + }, + { + "path": "WebCryptoAPI/generateKey/successes.worker.js", + "url": "/WebCryptoAPI/generateKey/successes.worker" + }, { "path": "WebCryptoAPI/getRandomValues.worker.js", "url": "/WebCryptoAPI/getRandomValues.worker" }, + { + "path": "WebCryptoAPI/idlharness.html", + "url": "/WebCryptoAPI/idlharness.html" + }, + { + "path": "WebCryptoAPI/idlharness.worker.js", + "url": "/WebCryptoAPI/idlharness.worker" + }, { "path": "WebCryptoAPI/test_getRandomValues.html", "url": "/WebCryptoAPI/test_getRandomValues.html" @@ -13805,6 +13835,10 @@ "path": "cssom-view/scrollingElement.html", "url": "/cssom-view/scrollingElement.html" }, + { + "path": "custom-elements/custom-elements-registry/define.html", + "url": "/custom-elements/custom-elements-registry/define.html" + }, { "path": "custom-elements/v0/concepts/custom-elements-type-naming.html", "url": "/custom-elements/v0/concepts/custom-elements-type-naming.html" @@ -14069,14 +14103,30 @@ "path": "dom/events/Event-dispatch-bubbles-false.html", "url": "/dom/events/Event-dispatch-bubbles-false.html" }, + { + "path": "dom/events/Event-dispatch-bubbles-true.html", + "url": "/dom/events/Event-dispatch-bubbles-true.html" + }, + { + "path": "dom/events/Event-dispatch-detached-click.html", + "url": "/dom/events/Event-dispatch-detached-click.html" + }, { "path": "dom/events/Event-dispatch-handlers-changed.html", "url": "/dom/events/Event-dispatch-handlers-changed.html" }, + { + "path": "dom/events/Event-dispatch-multiple-stopPropagation.html", + "url": "/dom/events/Event-dispatch-multiple-stopPropagation.html" + }, { "path": "dom/events/Event-dispatch-omitted-capture.html", "url": "/dom/events/Event-dispatch-omitted-capture.html" }, + { + "path": "dom/events/Event-dispatch-order.html", + "url": "/dom/events/Event-dispatch-order.html" + }, { "path": "dom/events/Event-dispatch-propagation-stopped.html", "url": "/dom/events/Event-dispatch-propagation-stopped.html" @@ -14097,6 +14147,14 @@ "path": "dom/events/Event-dispatch-target-removed.html", "url": "/dom/events/Event-dispatch-target-removed.html" }, + { + "path": "dom/events/Event-dispatch-throwing.html", + "url": "/dom/events/Event-dispatch-throwing.html" + }, + { + "path": "dom/events/Event-init-while-dispatching.html", + "url": "/dom/events/Event-init-while-dispatching.html" + }, { "path": "dom/events/Event-initEvent.html", "url": "/dom/events/Event-initEvent.html" @@ -14105,6 +14163,10 @@ "path": "dom/events/Event-propagation.html", "url": "/dom/events/Event-propagation.html" }, + { + "path": "dom/events/Event-subclasses-constructors.html", + "url": "/dom/events/Event-subclasses-constructors.html" + }, { "path": "dom/events/Event-type-empty.html", "url": "/dom/events/Event-type-empty.html" @@ -14113,6 +14175,18 @@ "path": "dom/events/Event-type.html", "url": "/dom/events/Event-type.html" }, + { + "path": "dom/events/EventListener-handleEvent.html", + "url": "/dom/events/EventListener-handleEvent.html" + }, + { + "path": "dom/events/EventListener-incumbent-global.sub.html", + "url": "/dom/events/EventListener-incumbent-global.sub.html" + }, + { + "path": "dom/events/EventListenerOptions-capture.html", + "url": "/dom/events/EventListenerOptions-capture.html" + }, { "path": "dom/events/EventTarget-addEventListener.html", "url": "/dom/events/EventTarget-addEventListener.html" @@ -16093,6 +16167,10 @@ "path": "html/browsers/browsing-the-web/navigating-across-documents/javascript-url-query-fragment-components.html", "url": "/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-query-fragment-components.html" }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html" + }, { "path": "html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url.html", "url": "/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url.html" @@ -18853,6 +18931,10 @@ "path": "html/semantics/embedded-content/the-embed-element/embed-ignored-in-media-element.html", "url": "/html/semantics/embedded-content/the-embed-element/embed-ignored-in-media-element.html" }, + { + "path": "html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html", + "url": "/html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html" + }, { "path": "html/semantics/embedded-content/the-iframe-element/iframe-load-event.html", "url": "/html/semantics/embedded-content/the-iframe-element/iframe-load-event.html" @@ -18865,6 +18947,14 @@ "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_allow_script.html", "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_allow_script.html" }, + { + "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping.html", + "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping.html" + }, + { + "path": "html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping.html", + "url": "/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping.html" + }, { "path": "html/semantics/embedded-content/the-iframe-element/move_iframe_in_dom_01.html", "url": "/html/semantics/embedded-content/the-iframe-element/move_iframe_in_dom_01.html" @@ -19417,6 +19507,14 @@ "path": "html/semantics/interfaces.html", "url": "/html/semantics/interfaces.html" }, + { + "path": "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html", + "url": "/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html" + }, + { + "path": "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_getter.html", + "url": "/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_getter.html" + }, { "path": "html/semantics/scripting-1/the-script-element/async_001.htm", "url": "/html/semantics/scripting-1/the-script-element/async_001.htm" @@ -28417,6 +28515,10 @@ "path": "shadow-dom/Element-interface-shadowRoot-attribute.html", "url": "/shadow-dom/Element-interface-shadowRoot-attribute.html" }, + { + "path": "shadow-dom/HTMLSlotElement-interface.html", + "url": "/shadow-dom/HTMLSlotElement-interface.html" + }, { "path": "shadow-dom/Node-prototype-cloneNode.html", "url": "/shadow-dom/Node-prototype-cloneNode.html" @@ -28425,10 +28527,22 @@ "path": "shadow-dom/ShadowRoot-interface.html", "url": "/shadow-dom/ShadowRoot-interface.html" }, + { + "path": "shadow-dom/leaktests/get-elements.html", + "url": "/shadow-dom/leaktests/get-elements.html" + }, { "path": "shadow-dom/leaktests/html-collection.html", "url": "/shadow-dom/leaktests/html-collection.html" }, + { + "path": "shadow-dom/leaktests/window-frames.html", + "url": "/shadow-dom/leaktests/window-frames.html" + }, + { + "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/untriaged/elements-and-dom-objects/extensions-to-element-interface/attributes/test-006.html", "url": "/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/attributes/test-006.html" @@ -28809,26 +28923,6 @@ "path": "typedarrays/constructors.html", "url": "/typedarrays/constructors.html" }, - { - "path": "uievents/ClickFakeEvent.nondocument.html", - "url": "/uievents/ClickFakeEvent.nondocument.html" - }, - { - "path": "uievents/constructors/constructors.html", - "url": "/uievents/constructors/constructors.html" - }, - { - "path": "uievents/legacy-domevents-tests/approved/DOM.event.flow.html", - "url": "/uievents/legacy-domevents-tests/approved/DOM.event.flow.html" - }, - { - "path": "uievents/legacy-domevents-tests/approved/EventListener.eventHandler.html", - "url": "/uievents/legacy-domevents-tests/approved/EventListener.eventHandler.html" - }, - { - "path": "uievents/legacy-domevents-tests/approved/EventObject.multiple.dispatchEvent.html", - "url": "/uievents/legacy-domevents-tests/approved/EventObject.multiple.dispatchEvent.html" - }, { "path": "uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html", "url": "/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html" @@ -28853,22 +28947,6 @@ "path": "uievents/legacy-domevents-tests/submissions/Microsoft/converted/EventListener.dispatch.new.event.html", "url": "/uievents/legacy-domevents-tests/submissions/Microsoft/converted/EventListener.dispatch.new.event.html" }, - { - "path": "uievents/order-of-events/event-phases-order.html", - "url": "/uievents/order-of-events/event-phases-order.html" - }, - { - "path": "uievents/order-of-events/init-event-while-dispatching.html", - "url": "/uievents/order-of-events/init-event-while-dispatching.html" - }, - { - "path": "uievents/throwing-in-listener-and-window-error-event.html", - "url": "/uievents/throwing-in-listener-and-window-error-event.html" - }, - { - "path": "uievents/throwing-in-listener-when-all-have-not-run-yet.html", - "url": "/uievents/throwing-in-listener-when-all-have-not-run-yet.html" - }, { "path": "url/a-element-xhtml.xhtml", "url": "/url/a-element-xhtml.xhtml" @@ -28893,6 +28971,10 @@ "path": "url/url-constructor.html", "url": "/url/url-constructor.html" }, + { + "path": "url/url-setters.html", + "url": "/url/url-setters.html" + }, { "path": "url/urlsearchparams-append.html", "url": "/url/urlsearchparams-append.html" @@ -28989,153 +29071,153 @@ "path": "vibration/silent-ignore.html", "url": "/vibration/silent-ignore.html" }, - { - "path": "web-animations/animatable/animate.html", - "url": "/web-animations/animatable/animate.html" - }, - { - "path": "web-animations/animation-effect-timing/delay.html", - "url": "/web-animations/animation-effect-timing/delay.html" - }, - { - "path": "web-animations/animation-effect-timing/direction.html", - "url": "/web-animations/animation-effect-timing/direction.html" - }, - { - "path": "web-animations/animation-effect-timing/duration.html", - "url": "/web-animations/animation-effect-timing/duration.html" - }, - { - "path": "web-animations/animation-effect-timing/easing.html", - "url": "/web-animations/animation-effect-timing/easing.html" - }, - { - "path": "web-animations/animation-effect-timing/endDelay.html", - "url": "/web-animations/animation-effect-timing/endDelay.html" - }, - { - "path": "web-animations/animation-effect-timing/fill.html", - "url": "/web-animations/animation-effect-timing/fill.html" - }, - { - "path": "web-animations/animation-effect-timing/getAnimations.html", - "url": "/web-animations/animation-effect-timing/getAnimations.html" - }, - { - "path": "web-animations/animation-effect-timing/getComputedStyle.html", - "url": "/web-animations/animation-effect-timing/getComputedStyle.html" - }, - { - "path": "web-animations/animation-effect-timing/iterationStart.html", - "url": "/web-animations/animation-effect-timing/iterationStart.html" - }, - { - "path": "web-animations/animation-effect-timing/iterations.html", - "url": "/web-animations/animation-effect-timing/iterations.html" - }, { "path": "web-animations/animation-model/animation-types/discrete-animation.html", "url": "/web-animations/animation-model/animation-types/discrete-animation.html" }, { - "path": "web-animations/animation-model/animation-types/not-animatable.html", - "url": "/web-animations/animation-model/animation-types/not-animatable.html" + "path": "web-animations/animation-model/keyframe-effects/effect-value-context.html", + "url": "/web-animations/animation-model/keyframe-effects/effect-value-context.html" }, { - "path": "web-animations/animation-model/keyframes/effect-value-context.html", - "url": "/web-animations/animation-model/keyframes/effect-value-context.html" + "path": "web-animations/animation-model/keyframe-effects/the-effect-value-of-a-keyframe-effect.html", + "url": "/web-animations/animation-model/keyframe-effects/the-effect-value-of-a-keyframe-effect.html" }, { - "path": "web-animations/animation-timeline/document-timeline.html", - "url": "/web-animations/animation-timeline/document-timeline.html" + "path": "web-animations/interfaces/Animatable/animate.html", + "url": "/web-animations/interfaces/Animatable/animate.html" }, { - "path": "web-animations/animation-timeline/idlharness.html", - "url": "/web-animations/animation-timeline/idlharness.html" + "path": "web-animations/interfaces/Animation/cancel.html", + "url": "/web-animations/interfaces/Animation/cancel.html" }, { - "path": "web-animations/animation/cancel.html", - "url": "/web-animations/animation/cancel.html" + "path": "web-animations/interfaces/Animation/constructor.html", + "url": "/web-animations/interfaces/Animation/constructor.html" }, { - "path": "web-animations/animation/constructor.html", - "url": "/web-animations/animation/constructor.html" + "path": "web-animations/interfaces/Animation/finish.html", + "url": "/web-animations/interfaces/Animation/finish.html" }, { - "path": "web-animations/animation/finish.html", - "url": "/web-animations/animation/finish.html" + "path": "web-animations/interfaces/Animation/finished.html", + "url": "/web-animations/interfaces/Animation/finished.html" }, { - "path": "web-animations/animation/finished.html", - "url": "/web-animations/animation/finished.html" + "path": "web-animations/interfaces/Animation/id.html", + "url": "/web-animations/interfaces/Animation/id.html" }, { - "path": "web-animations/animation/id.html", - "url": "/web-animations/animation/id.html" + "path": "web-animations/interfaces/Animation/oncancel.html", + "url": "/web-animations/interfaces/Animation/oncancel.html" }, { - "path": "web-animations/animation/oncancel.html", - "url": "/web-animations/animation/oncancel.html" + "path": "web-animations/interfaces/Animation/onfinish.html", + "url": "/web-animations/interfaces/Animation/onfinish.html" }, { - "path": "web-animations/animation/onfinish.html", - "url": "/web-animations/animation/onfinish.html" + "path": "web-animations/interfaces/Animation/pause.html", + "url": "/web-animations/interfaces/Animation/pause.html" }, { - "path": "web-animations/animation/pause.html", - "url": "/web-animations/animation/pause.html" + "path": "web-animations/interfaces/Animation/play.html", + "url": "/web-animations/interfaces/Animation/play.html" }, { - "path": "web-animations/animation/play.html", - "url": "/web-animations/animation/play.html" + "path": "web-animations/interfaces/Animation/playState.html", + "url": "/web-animations/interfaces/Animation/playState.html" }, { - "path": "web-animations/animation/playState.html", - "url": "/web-animations/animation/playState.html" + "path": "web-animations/interfaces/Animation/playbackRate.html", + "url": "/web-animations/interfaces/Animation/playbackRate.html" }, { - "path": "web-animations/animation/playbackRate.html", - "url": "/web-animations/animation/playbackRate.html" + "path": "web-animations/interfaces/Animation/ready.html", + "url": "/web-animations/interfaces/Animation/ready.html" }, { - "path": "web-animations/animation/ready.html", - "url": "/web-animations/animation/ready.html" + "path": "web-animations/interfaces/Animation/reverse.html", + "url": "/web-animations/interfaces/Animation/reverse.html" }, { - "path": "web-animations/animation/reverse.html", - "url": "/web-animations/animation/reverse.html" + "path": "web-animations/interfaces/Animation/startTime.html", + "url": "/web-animations/interfaces/Animation/startTime.html" }, { - "path": "web-animations/animation/startTime.html", - "url": "/web-animations/animation/startTime.html" + "path": "web-animations/interfaces/AnimationEffectTiming/delay.html", + "url": "/web-animations/interfaces/AnimationEffectTiming/delay.html" }, { - "path": "web-animations/document/getAnimations.html", - "url": "/web-animations/document/getAnimations.html" + "path": "web-animations/interfaces/AnimationEffectTiming/direction.html", + "url": "/web-animations/interfaces/AnimationEffectTiming/direction.html" }, { - "path": "web-animations/keyframe-effect/constructor.html", - "url": "/web-animations/keyframe-effect/constructor.html" + "path": "web-animations/interfaces/AnimationEffectTiming/duration.html", + "url": "/web-animations/interfaces/AnimationEffectTiming/duration.html" }, { - "path": "web-animations/keyframe-effect/effect-easing.html", - "url": "/web-animations/keyframe-effect/effect-easing.html" + "path": "web-animations/interfaces/AnimationEffectTiming/easing.html", + "url": "/web-animations/interfaces/AnimationEffectTiming/easing.html" }, { - "path": "web-animations/keyframe-effect/getComputedTiming.html", - "url": "/web-animations/keyframe-effect/getComputedTiming.html" + "path": "web-animations/interfaces/AnimationEffectTiming/endDelay.html", + "url": "/web-animations/interfaces/AnimationEffectTiming/endDelay.html" }, { - "path": "web-animations/keyframe-effect/keyframe-handling.html", - "url": "/web-animations/keyframe-effect/keyframe-handling.html" + "path": "web-animations/interfaces/AnimationEffectTiming/fill.html", + "url": "/web-animations/interfaces/AnimationEffectTiming/fill.html" }, { - "path": "web-animations/keyframe-effect/setFrames.html", - "url": "/web-animations/keyframe-effect/setFrames.html" + "path": "web-animations/interfaces/AnimationEffectTiming/getAnimations.html", + "url": "/web-animations/interfaces/AnimationEffectTiming/getAnimations.html" }, { - "path": "web-animations/keyframe-effect/setTarget.html", - "url": "/web-animations/keyframe-effect/setTarget.html" + "path": "web-animations/interfaces/AnimationEffectTiming/getComputedStyle.html", + "url": "/web-animations/interfaces/AnimationEffectTiming/getComputedStyle.html" + }, + { + "path": "web-animations/interfaces/AnimationEffectTiming/iterationStart.html", + "url": "/web-animations/interfaces/AnimationEffectTiming/iterationStart.html" + }, + { + "path": "web-animations/interfaces/AnimationEffectTiming/iterations.html", + "url": "/web-animations/interfaces/AnimationEffectTiming/iterations.html" + }, + { + "path": "web-animations/interfaces/AnimationTimeline/document-timeline.html", + "url": "/web-animations/interfaces/AnimationTimeline/document-timeline.html" + }, + { + "path": "web-animations/interfaces/AnimationTimeline/idlharness.html", + "url": "/web-animations/interfaces/AnimationTimeline/idlharness.html" + }, + { + "path": "web-animations/interfaces/Document/getAnimations.html", + "url": "/web-animations/interfaces/Document/getAnimations.html" + }, + { + "path": "web-animations/interfaces/KeyframeEffect/constructor.html", + "url": "/web-animations/interfaces/KeyframeEffect/constructor.html" + }, + { + "path": "web-animations/interfaces/KeyframeEffect/effect-easing.html", + "url": "/web-animations/interfaces/KeyframeEffect/effect-easing.html" + }, + { + "path": "web-animations/interfaces/KeyframeEffect/getComputedTiming.html", + "url": "/web-animations/interfaces/KeyframeEffect/getComputedTiming.html" + }, + { + "path": "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html", + "url": "/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html" + }, + { + "path": "web-animations/interfaces/KeyframeEffect/setKeyframes.html", + "url": "/web-animations/interfaces/KeyframeEffect/setKeyframes.html" + }, + { + "path": "web-animations/interfaces/KeyframeEffect/setTarget.html", + "url": "/web-animations/interfaces/KeyframeEffect/setTarget.html" }, { "path": "web-animations/timing-model/animation-effects/active-time.html", @@ -34380,6 +34462,16 @@ "timeout": "long", "url": "/IndexedDB/writer-starvation.htm" }, + { + "path": "WebCryptoAPI/generateKey/test_failures.html", + "timeout": "long", + "url": "/WebCryptoAPI/generateKey/test_failures.html" + }, + { + "path": "WebCryptoAPI/generateKey/test_successes.html", + "timeout": "long", + "url": "/WebCryptoAPI/generateKey/test_successes.html" + }, { "path": "XMLHttpRequest/progress-events-response-data-gzip.htm", "timeout": "long", @@ -35936,28 +36028,7 @@ "local_changes": { "deleted": [], "deleted_reftests": {}, - "items": { - "testharness": { - "html/browsers/the-window-object/browser-interface-elements/status.html": [ - { - "path": "html/browsers/the-window-object/browser-interface-elements/status.html", - "url": "/html/browsers/the-window-object/browser-interface-elements/status.html" - } - ], - "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html": [ - { - "path": "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html", - "url": "/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html" - } - ], - "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_getter.html": [ - { - "path": "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_getter.html", - "url": "/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_getter.html" - } - ] - } - }, + "items": {}, "reftest_nodes": {} }, "reftest_nodes": { @@ -38145,16 +38216,16 @@ "url": "/html/rendering/bindings/the-textarea-element-0/rows-zero.html" } ], - "html/rendering/non-replaced-elements/flow-content-0/div-align-ref.html": [ + "html/rendering/non-replaced-elements/flow-content-0/div-align.html": [ { - "path": "html/rendering/non-replaced-elements/flow-content-0/div-align-ref.html", + "path": "html/rendering/non-replaced-elements/flow-content-0/div-align.html", "references": [ [ "/html/rendering/non-replaced-elements/flow-content-0/div-align-ref.html", "==" ] ], - "url": "/html/rendering/non-replaced-elements/flow-content-0/div-align-ref.html" + "url": "/html/rendering/non-replaced-elements/flow-content-0/div-align.html" } ], "html/rendering/non-replaced-elements/flow-content-0/figure.html": [ @@ -42286,7 +42357,7 @@ } ] }, - "rev": "697b971060b2d475a73c1c3755232a4674d61cf5", + "rev": "bda2059150dca8ab47f088b4cc619fcdc1f262fa", "url_base": "/", "version": 3 } diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/failures.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures.worker.js.ini new file mode 100644 index 00000000000..36690a4f41c --- /dev/null +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/failures.worker.js.ini @@ -0,0 +1,3 @@ +[failures.worker] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/successes.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes.worker.js.ini new file mode 100644 index 00000000000..40b0d52323b --- /dev/null +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/successes.worker.js.ini @@ -0,0 +1,3 @@ +[successes.worker] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures.html.ini new file mode 100644 index 00000000000..fd00b19afd1 --- /dev/null +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_failures.html.ini @@ -0,0 +1,3 @@ +[test_failures.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes.html.ini b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes.html.ini new file mode 100644 index 00000000000..cf54027d7ee --- /dev/null +++ b/tests/wpt/metadata/WebCryptoAPI/generateKey/test_successes.html.ini @@ -0,0 +1,3 @@ +[test_successes.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/WebCryptoAPI/idlharness.html.ini b/tests/wpt/metadata/WebCryptoAPI/idlharness.html.ini new file mode 100644 index 00000000000..00bc82e22c5 --- /dev/null +++ b/tests/wpt/metadata/WebCryptoAPI/idlharness.html.ini @@ -0,0 +1,164 @@ +[idlharness.html] + type: testharness + [Crypto interface: attribute subtle] + expected: FAIL + + [Crypto interface: crypto must inherit property "subtle" with the proper type (0)] + expected: FAIL + + [CryptoKey interface: existence and properties of interface object] + expected: FAIL + + [CryptoKey interface object length] + expected: FAIL + + [CryptoKey interface object name] + expected: FAIL + + [CryptoKey interface: existence and properties of interface prototype object] + expected: FAIL + + [CryptoKey interface: existence and properties of interface prototype object's "constructor" property] + expected: FAIL + + [CryptoKey interface: attribute type] + expected: FAIL + + [CryptoKey interface: attribute extractable] + expected: FAIL + + [CryptoKey interface: attribute algorithm] + expected: FAIL + + [CryptoKey interface: attribute usages] + expected: FAIL + + [SubtleCrypto interface: existence and properties of interface object] + expected: FAIL + + [SubtleCrypto interface object length] + expected: FAIL + + [SubtleCrypto interface object name] + expected: FAIL + + [SubtleCrypto interface: existence and properties of interface prototype object] + expected: FAIL + + [SubtleCrypto interface: existence and properties of interface prototype object's "constructor" property] + expected: FAIL + + [SubtleCrypto interface: operation encrypt(AlgorithmIdentifier,CryptoKey,BufferSource)] + expected: FAIL + + [SubtleCrypto interface: operation decrypt(AlgorithmIdentifier,CryptoKey,BufferSource)] + expected: FAIL + + [SubtleCrypto interface: operation sign(AlgorithmIdentifier,CryptoKey,BufferSource)] + expected: FAIL + + [SubtleCrypto interface: operation verify(AlgorithmIdentifier,CryptoKey,BufferSource,BufferSource)] + expected: FAIL + + [SubtleCrypto interface: operation digest(AlgorithmIdentifier,BufferSource)] + expected: FAIL + + [SubtleCrypto interface: operation generateKey(AlgorithmIdentifier,boolean,[object Object\])] + expected: FAIL + + [SubtleCrypto interface: operation deriveKey(AlgorithmIdentifier,CryptoKey,AlgorithmIdentifier,boolean,[object Object\])] + expected: FAIL + + [SubtleCrypto interface: operation deriveBits(AlgorithmIdentifier,CryptoKey,unsigned long)] + expected: FAIL + + [SubtleCrypto interface: operation importKey(KeyFormat,[object Object\],[object Object\],AlgorithmIdentifier,boolean,[object Object\])] + expected: FAIL + + [SubtleCrypto interface: operation exportKey(KeyFormat,CryptoKey)] + expected: FAIL + + [SubtleCrypto interface: operation wrapKey(KeyFormat,CryptoKey,CryptoKey,AlgorithmIdentifier)] + expected: FAIL + + [SubtleCrypto interface: operation unwrapKey(KeyFormat,BufferSource,CryptoKey,AlgorithmIdentifier,AlgorithmIdentifier,boolean,[object Object\])] + expected: FAIL + + [SubtleCrypto must be primary interface of crypto.subtle] + expected: FAIL + + [Stringification of crypto.subtle] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "encrypt" with the proper type (0)] + expected: FAIL + + [SubtleCrypto interface: calling encrypt(AlgorithmIdentifier,CryptoKey,BufferSource) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "decrypt" with the proper type (1)] + expected: FAIL + + [SubtleCrypto interface: calling decrypt(AlgorithmIdentifier,CryptoKey,BufferSource) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "sign" with the proper type (2)] + expected: FAIL + + [SubtleCrypto interface: calling sign(AlgorithmIdentifier,CryptoKey,BufferSource) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "verify" with the proper type (3)] + expected: FAIL + + [SubtleCrypto interface: calling verify(AlgorithmIdentifier,CryptoKey,BufferSource,BufferSource) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "digest" with the proper type (4)] + expected: FAIL + + [SubtleCrypto interface: calling digest(AlgorithmIdentifier,BufferSource) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "generateKey" with the proper type (5)] + expected: FAIL + + [SubtleCrypto interface: calling generateKey(AlgorithmIdentifier,boolean,[object Object\]) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "deriveKey" with the proper type (6)] + expected: FAIL + + [SubtleCrypto interface: calling deriveKey(AlgorithmIdentifier,CryptoKey,AlgorithmIdentifier,boolean,[object Object\]) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "deriveBits" with the proper type (7)] + expected: FAIL + + [SubtleCrypto interface: calling deriveBits(AlgorithmIdentifier,CryptoKey,unsigned long) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "importKey" with the proper type (8)] + expected: FAIL + + [SubtleCrypto interface: calling importKey(KeyFormat,[object Object\],[object Object\],AlgorithmIdentifier,boolean,[object Object\]) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "exportKey" with the proper type (9)] + expected: FAIL + + [SubtleCrypto interface: calling exportKey(KeyFormat,CryptoKey) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "wrapKey" with the proper type (10)] + expected: FAIL + + [SubtleCrypto interface: calling wrapKey(KeyFormat,CryptoKey,CryptoKey,AlgorithmIdentifier) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "unwrapKey" with the proper type (11)] + expected: FAIL + + [SubtleCrypto interface: calling unwrapKey(KeyFormat,BufferSource,CryptoKey,AlgorithmIdentifier,AlgorithmIdentifier,boolean,[object Object\]) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + diff --git a/tests/wpt/metadata/WebCryptoAPI/idlharness.worker.js.ini b/tests/wpt/metadata/WebCryptoAPI/idlharness.worker.js.ini new file mode 100644 index 00000000000..2fd46e13deb --- /dev/null +++ b/tests/wpt/metadata/WebCryptoAPI/idlharness.worker.js.ini @@ -0,0 +1,164 @@ +[idlharness.worker] + type: testharness + [Crypto interface: attribute subtle] + expected: FAIL + + [Crypto interface: crypto must inherit property "subtle" with the proper type (0)] + expected: FAIL + + [CryptoKey interface: existence and properties of interface object] + expected: FAIL + + [CryptoKey interface object length] + expected: FAIL + + [CryptoKey interface object name] + expected: FAIL + + [CryptoKey interface: existence and properties of interface prototype object] + expected: FAIL + + [CryptoKey interface: existence and properties of interface prototype object's "constructor" property] + expected: FAIL + + [CryptoKey interface: attribute type] + expected: FAIL + + [CryptoKey interface: attribute extractable] + expected: FAIL + + [CryptoKey interface: attribute algorithm] + expected: FAIL + + [CryptoKey interface: attribute usages] + expected: FAIL + + [SubtleCrypto interface: existence and properties of interface object] + expected: FAIL + + [SubtleCrypto interface object length] + expected: FAIL + + [SubtleCrypto interface object name] + expected: FAIL + + [SubtleCrypto interface: existence and properties of interface prototype object] + expected: FAIL + + [SubtleCrypto interface: existence and properties of interface prototype object's "constructor" property] + expected: FAIL + + [SubtleCrypto interface: operation encrypt(AlgorithmIdentifier,CryptoKey,BufferSource)] + expected: FAIL + + [SubtleCrypto interface: operation decrypt(AlgorithmIdentifier,CryptoKey,BufferSource)] + expected: FAIL + + [SubtleCrypto interface: operation sign(AlgorithmIdentifier,CryptoKey,BufferSource)] + expected: FAIL + + [SubtleCrypto interface: operation verify(AlgorithmIdentifier,CryptoKey,BufferSource,BufferSource)] + expected: FAIL + + [SubtleCrypto interface: operation digest(AlgorithmIdentifier,BufferSource)] + expected: FAIL + + [SubtleCrypto interface: operation generateKey(AlgorithmIdentifier,boolean,[object Object\])] + expected: FAIL + + [SubtleCrypto interface: operation deriveKey(AlgorithmIdentifier,CryptoKey,AlgorithmIdentifier,boolean,[object Object\])] + expected: FAIL + + [SubtleCrypto interface: operation deriveBits(AlgorithmIdentifier,CryptoKey,unsigned long)] + expected: FAIL + + [SubtleCrypto interface: operation importKey(KeyFormat,[object Object\],[object Object\],AlgorithmIdentifier,boolean,[object Object\])] + expected: FAIL + + [SubtleCrypto interface: operation exportKey(KeyFormat,CryptoKey)] + expected: FAIL + + [SubtleCrypto interface: operation wrapKey(KeyFormat,CryptoKey,CryptoKey,AlgorithmIdentifier)] + expected: FAIL + + [SubtleCrypto interface: operation unwrapKey(KeyFormat,BufferSource,CryptoKey,AlgorithmIdentifier,AlgorithmIdentifier,boolean,[object Object\])] + expected: FAIL + + [SubtleCrypto must be primary interface of crypto.subtle] + expected: FAIL + + [Stringification of crypto.subtle] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "encrypt" with the proper type (0)] + expected: FAIL + + [SubtleCrypto interface: calling encrypt(AlgorithmIdentifier,CryptoKey,BufferSource) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "decrypt" with the proper type (1)] + expected: FAIL + + [SubtleCrypto interface: calling decrypt(AlgorithmIdentifier,CryptoKey,BufferSource) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "sign" with the proper type (2)] + expected: FAIL + + [SubtleCrypto interface: calling sign(AlgorithmIdentifier,CryptoKey,BufferSource) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "verify" with the proper type (3)] + expected: FAIL + + [SubtleCrypto interface: calling verify(AlgorithmIdentifier,CryptoKey,BufferSource,BufferSource) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "digest" with the proper type (4)] + expected: FAIL + + [SubtleCrypto interface: calling digest(AlgorithmIdentifier,BufferSource) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "generateKey" with the proper type (5)] + expected: FAIL + + [SubtleCrypto interface: calling generateKey(AlgorithmIdentifier,boolean,[object Object\]) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "deriveKey" with the proper type (6)] + expected: FAIL + + [SubtleCrypto interface: calling deriveKey(AlgorithmIdentifier,CryptoKey,AlgorithmIdentifier,boolean,[object Object\]) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "deriveBits" with the proper type (7)] + expected: FAIL + + [SubtleCrypto interface: calling deriveBits(AlgorithmIdentifier,CryptoKey,unsigned long) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "importKey" with the proper type (8)] + expected: FAIL + + [SubtleCrypto interface: calling importKey(KeyFormat,[object Object\],[object Object\],AlgorithmIdentifier,boolean,[object Object\]) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "exportKey" with the proper type (9)] + expected: FAIL + + [SubtleCrypto interface: calling exportKey(KeyFormat,CryptoKey) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "wrapKey" with the proper type (10)] + expected: FAIL + + [SubtleCrypto interface: calling wrapKey(KeyFormat,CryptoKey,CryptoKey,AlgorithmIdentifier) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + + [SubtleCrypto interface: crypto.subtle must inherit property "unwrapKey" with the proper type (11)] + expected: FAIL + + [SubtleCrypto interface: calling unwrapKey(KeyFormat,BufferSource,CryptoKey,AlgorithmIdentifier,AlgorithmIdentifier,boolean,[object Object\]) on crypto.subtle with too few arguments must throw TypeError] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/events/Event-dispatch-multiple-stopPropagation.html.ini b/tests/wpt/metadata/dom/events/Event-dispatch-multiple-stopPropagation.html.ini new file mode 100644 index 00000000000..5da27d7bc78 --- /dev/null +++ b/tests/wpt/metadata/dom/events/Event-dispatch-multiple-stopPropagation.html.ini @@ -0,0 +1,5 @@ +[Event-dispatch-multiple-stopPropagation.html] + type: testharness + [ Multiple dispatchEvent() and stopPropagation() ] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/events/Event-dispatch-throwing.html.ini b/tests/wpt/metadata/dom/events/Event-dispatch-throwing.html.ini new file mode 100644 index 00000000000..a4a0a2984a8 --- /dev/null +++ b/tests/wpt/metadata/dom/events/Event-dispatch-throwing.html.ini @@ -0,0 +1,8 @@ +[Event-dispatch-throwing.html] + type: testharness + [Throwing in event listener with a single listeners] + expected: FAIL + + [Throwing in event listener with multiple listeners] + expected: FAIL + diff --git a/tests/wpt/metadata/uievents/constructors/constructors.html.ini b/tests/wpt/metadata/dom/events/Event-subclasses-constructors.html.ini similarity index 97% rename from tests/wpt/metadata/uievents/constructors/constructors.html.ini rename to tests/wpt/metadata/dom/events/Event-subclasses-constructors.html.ini index f4e1d843e45..f25d6555b66 100644 --- a/tests/wpt/metadata/uievents/constructors/constructors.html.ini +++ b/tests/wpt/metadata/dom/events/Event-subclasses-constructors.html.ini @@ -1,4 +1,4 @@ -[constructors.html] +[Event-subclasses-constructors.html] type: testharness [MouseEvent constructor (no argument)] expected: FAIL diff --git a/tests/wpt/metadata/dom/events/EventListener-incumbent-global.sub.html.ini b/tests/wpt/metadata/dom/events/EventListener-incumbent-global.sub.html.ini new file mode 100644 index 00000000000..2b1cc7ebd11 --- /dev/null +++ b/tests/wpt/metadata/dom/events/EventListener-incumbent-global.sub.html.ini @@ -0,0 +1,5 @@ +[EventListener-incumbent-global.sub.html] + type: testharness + [Check the incumbent global EventListeners are called with] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/events/EventListenerOptions-capture.html.ini b/tests/wpt/metadata/dom/events/EventListenerOptions-capture.html.ini new file mode 100644 index 00000000000..5733103af38 --- /dev/null +++ b/tests/wpt/metadata/dom/events/EventListenerOptions-capture.html.ini @@ -0,0 +1,11 @@ +[EventListenerOptions-capture.html] + type: testharness + [Capture option should be honored correctly] + expected: FAIL + + [Supports capture option] + expected: FAIL + + [Equivalence of option values] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html.ini new file mode 100644 index 00000000000..0231fdf6cad --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html.ini @@ -0,0 +1,3 @@ +[javascript-url-return-value-handling.html] + type: testharness + expected: CRASH diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index 661e0438bd4..83d3c5a9cb3 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -7608,3 +7608,1983 @@ [HTMLSlotElement interface: calling assignedNodes(AssignedNodesOptions) on document.createElement("slot") with too few arguments must throw TypeError] expected: FAIL + [HTMLInputElement interface: createInput("text") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("text") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("text") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("text") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("text") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("text") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("text") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("hidden") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("hidden") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("hidden") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("hidden") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("hidden") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("hidden") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("search") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("search") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("search") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("search") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("search") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("search") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("tel") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("tel") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("tel") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("tel") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("tel") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("tel") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("url") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("url") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("url") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("url") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("url") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("url") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("email") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("email") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("email") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("email") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("email") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("email") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("password") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("password") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("password") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("password") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("password") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("password") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("date") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("date") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("date") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("date") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("date") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("date") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("month") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("month") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("month") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("month") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("month") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("month") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("week") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("week") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("week") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("week") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("week") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("week") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("time") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("time") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("time") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("time") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("time") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("time") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("datetime-local") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("datetime-local") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("datetime-local") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("datetime-local") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("datetime-local") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("datetime-local") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("number") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("number") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("number") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("number") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("number") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("number") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("range") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("range") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("range") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("range") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("range") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("range") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("color") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("color") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("color") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("color") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("color") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("color") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("checkbox") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("checkbox") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("checkbox") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("checkbox") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("checkbox") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("checkbox") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("radio") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("radio") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("radio") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("radio") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("radio") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("radio") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("file") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("file") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("file") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("file") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("file") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("file") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("submit") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("submit") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("submit") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("submit") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("submit") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("submit") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("image") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("image") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("image") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("image") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("image") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("image") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("reset") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("reset") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("reset") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("reset") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("reset") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("reset") must inherit property "useMap" with the proper type (57)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "autocomplete" with the proper type (2)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "autofocus" with the proper type (3)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "files" with the proper type (9)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "height" with the proper type (15)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "inputMode" with the proper type (17)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "list" with the proper type (18)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "minLength" with the proper type (22)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "valueAsDate" with the proper type (35)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "valueAsNumber" with the proper type (36)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "valueLow" with the proper type (37)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "valueHigh" with the proper type (38)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "width" with the proper type (39)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "stepUp" with the proper type (40)] + expected: FAIL + + [HTMLInputElement interface: calling stepUp(long) on createInput("button") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "stepDown" with the proper type (41)] + expected: FAIL + + [HTMLInputElement interface: calling stepDown(long) on createInput("button") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "willValidate" with the proper type (42)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "validity" with the proper type (43)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "validationMessage" with the proper type (44)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "checkValidity" with the proper type (45)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "reportValidity" with the proper type (46)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "setCustomValidity" with the proper type (47)] + expected: FAIL + + [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("button") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "select" with the proper type (49)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "setRangeText" with the proper type (53)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString) on createInput("button") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "setRangeText" with the proper type (54)] + expected: FAIL + + [HTMLInputElement interface: calling setRangeText(DOMString,unsigned long,unsigned long,SelectionMode) on createInput("button") with too few arguments must throw TypeError] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "align" with the proper type (56)] + expected: FAIL + + [HTMLInputElement interface: createInput("button") must inherit property "useMap" with the proper type (57)] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html.ini index 357ef0f07d7..35dd9ff3c2d 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html.ini @@ -1,6 +1,6 @@ [load-events-networkState.html] type: testharness expected: TIMEOUT - [NETWORK_NO_SOURCE] expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html.ini new file mode 100644 index 00000000000..dee424a69ad --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html.ini @@ -0,0 +1,14 @@ +[iframe-allowfullscreen.html] + type: testharness + [iframe-allowfullscreen] + expected: FAIL + + [iframe-sandbox-allowfullscreen] + expected: FAIL + + [iframe-allowfullscreen-dialog] + expected: FAIL + + [iframe-sandbox-allowfullscreen-dialog] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping.html.ini new file mode 100644 index 00000000000..506953b59b5 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping.html.ini @@ -0,0 +1,6 @@ +[iframe_sandbox_popups_escaping.html] + type: testharness + expected: TIMEOUT + [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping.html.ini new file mode 100644 index 00000000000..9b96fa64ffa --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping.html.ini @@ -0,0 +1,6 @@ +[iframe_sandbox_popups_nonescaping.html] + type: testharness + expected: TIMEOUT + [Check that popups from a sandboxed iframe do not escape the sandbox] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/semantics/forms/form-control-infrastructure/form.html.ini b/tests/wpt/metadata/html/semantics/forms/form-control-infrastructure/form.html.ini index fc4b144051e..2182e7efee3 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-control-infrastructure/form.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-control-infrastructure/form.html.ini @@ -3,3 +3,30 @@ [keygen.form] expected: FAIL + [label.form] + expected: FAIL + + [label-form.form] + expected: FAIL + + [label-form-form2.form] + expected: FAIL + + [label-with-progress.form] + expected: FAIL + + [label-with-meter.form] + expected: FAIL + + [label-for-control-form-in-form.form] + expected: FAIL + + [label-for-control-form.form] + expected: FAIL + + [label-in-table-with-control.form] + expected: FAIL + + [label-in-table-for.form] + 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 afdd08c6014..8c1a6388ba5 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,3 +6,6 @@ [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/radio.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/radio.html.ini deleted file mode 100644 index 3abe4b7fbf8..00000000000 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/radio.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[radio.html] - type: testharness - [click on mutable radio fires click event, then input event, then change event] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/forms/the-label-element/label-attributes.html.ini b/tests/wpt/metadata/html/semantics/forms/the-label-element/label-attributes.html.ini index 9caf6fc4cf7..26a7bbdc4f7 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-label-element/label-attributes.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-label-element/label-attributes.html.ini @@ -3,3 +3,9 @@ [A non-control follows by a control with same ID.] expected: FAIL + [A label in a form without a control] + expected: FAIL + + [A label outside a form with a control inside the form] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-body-window.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-body-window.html.ini index 73a352f1139..7b40b5b1667 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-body-window.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-body-window.html.ini @@ -2,3 +2,4 @@ type: testharness [error] expected: FAIL + diff --git a/tests/wpt/metadata/mozilla-sync b/tests/wpt/metadata/mozilla-sync index defa831cbdb..04f87e65b85 100644 --- a/tests/wpt/metadata/mozilla-sync +++ b/tests/wpt/metadata/mozilla-sync @@ -1 +1 @@ -f60598909a8ffd69fe1d87ee92aa94f1a26ef12e \ No newline at end of file +3535f3f6c25b6e380d190559a5ca03ea70282fe0 \ No newline at end of file diff --git a/tests/wpt/metadata/uievents/legacy-domevents-tests/approved/EventObject.multiple.dispatchEvent.html.ini b/tests/wpt/metadata/uievents/legacy-domevents-tests/approved/EventObject.multiple.dispatchEvent.html.ini deleted file mode 100644 index 91e92f9d793..00000000000 --- a/tests/wpt/metadata/uievents/legacy-domevents-tests/approved/EventObject.multiple.dispatchEvent.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[EventObject.multiple.dispatchEvent.html] - type: testharness - [Test Description: An event object may be properly dispatched multiple times while also allowing to prevent the event objects propagation prior to the event dispatch.] - expected: FAIL - diff --git a/tests/wpt/metadata/uievents/order-of-events/event-phases-order.html.ini b/tests/wpt/metadata/uievents/order-of-events/event-phases-order.html.ini deleted file mode 100644 index feaa22695ce..00000000000 --- a/tests/wpt/metadata/uievents/order-of-events/event-phases-order.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[event-phases-order.html] - type: testharness - [Event phases order] - expected: FAIL - diff --git a/tests/wpt/metadata/uievents/throwing-in-listener-and-window-error-event.html.ini b/tests/wpt/metadata/uievents/throwing-in-listener-and-window-error-event.html.ini deleted file mode 100644 index 1ac95ab9e55..00000000000 --- a/tests/wpt/metadata/uievents/throwing-in-listener-and-window-error-event.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[throwing-in-listener-and-window-error-event.html] - type: testharness - [Throwing in event listener generates an error event on the window object] - expected: FAIL - diff --git a/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini b/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini index a4093616c75..135034d73c9 100644 --- a/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini +++ b/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini @@ -810,3 +810,12 @@ [Parsing: against ] expected: FAIL + [Parsing: against ] + expected: FAIL + + [Parsing: against ] + expected: FAIL + + [Parsing: against ] + expected: FAIL + diff --git a/tests/wpt/metadata/url/a-element.html.ini b/tests/wpt/metadata/url/a-element.html.ini index c6ba8129967..14138808343 100644 --- a/tests/wpt/metadata/url/a-element.html.ini +++ b/tests/wpt/metadata/url/a-element.html.ini @@ -810,3 +810,12 @@ [Parsing: against ] expected: FAIL + [Parsing: against ] + expected: FAIL + + [Parsing: against ] + expected: FAIL + + [Parsing: against ] + expected: FAIL + diff --git a/tests/wpt/metadata/url/url-setters.html.ini b/tests/wpt/metadata/url/url-setters.html.ini new file mode 100644 index 00000000000..1f6563a640f --- /dev/null +++ b/tests/wpt/metadata/url/url-setters.html.ini @@ -0,0 +1,23 @@ +[url-setters.html] + type: testharness + [Setting .protocol = 'b' Can’t switch from special scheme to non-special. Note: this may change, see https://github.com/whatwg/url/issues/104] + expected: FAIL + + [Setting .protocol = 'http' Can’t switch from non-special scheme to special. Note: this may change, see https://github.com/whatwg/url/issues/104] + expected: FAIL + + [Setting .host = 'example.com:' Port number is unchanges if empty in the new value. Note: this may change, see https://github.com/whatwg/url/pull/113] + expected: FAIL + + [Setting .port = '' Port number is unchanged if empty in the new value. Note: this may change, see https://github.com/whatwg/url/pull/113] + expected: FAIL + + [Setting .pathname = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.] + expected: FAIL + + [Setting .search = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.] + expected: FAIL + + [Setting .hash = '\x00\x01\t\n\r\x1f !"#$%&'()*+,-./09:;<=>?@AZ[\\\]^_`az{|}~€Éé' No percent-encoding at all (!); nuls, tabs, and newlines are removed] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-G_I.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-G_I.html.ini index d33f9da7ec3..ff00a954593 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-G_I.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-G_I.html.ini @@ -1,4 +1,3 @@ [quickCheckAPI-G_I.html] type: testharness disabled: https://github.com/servo/servo/issues/10656 - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-2d-formats.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-2d-formats.html.ini index 24c29fd6283..18ab3c5a0ca 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-2d-formats.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-2d-formats.html.ini @@ -1,14 +1,20 @@ [copy-tex-image-2d-formats.html] + type: testharness [WebGL test #3: getError expected: NO_ERROR. Was INVALID_ENUM : should be no errors] expected: FAIL + [WebGL test #6: getError expected: NO_ERROR. Was INVALID_ENUM : should be no errors] expected: FAIL + [WebGL test #9: getError expected: NO_ERROR. Was INVALID_ENUM : should be no errors] expected: FAIL + [WebGL test #12: getError expected: NO_ERROR. Was INVALID_ENUM : should be no errors] expected: FAIL + [WebGL test #15: getError expected: NO_ERROR. Was INVALID_ENUM : should be no errors] expected: FAIL + [WebGL test #16: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini index 74d5d3bb7cc..b20314b47d2 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini @@ -3,4 +3,3 @@ expected: if os == "linux": CRASH if os == "mac": TIMEOUT - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot.html.ini index 218d01d3a14..97ff4a8fd16 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot.html.ini @@ -1,6 +1,5 @@ [texture-npot.html] type: testharness - [WebGL test #4: at (0, 0) expected: 0,0,0,255 was 192,0,128,64] expected: FAIL @@ -117,3 +116,4 @@ [WebGL test #83: getError expected: NO_ERROR. Was INVALID_ENUM : gl.generateMipmap with POT texture should return succeed] expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini index 5de1af7ba3f..993c55127dc 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini @@ -3,4 +3,3 @@ expected: if os == "linux": CRASH if os == "mac": TIMEOUT - diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex14-exception_order.htm b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex14-exception_order.htm new file mode 100644 index 00000000000..75d805a6d8b --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex14-exception_order.htm @@ -0,0 +1,105 @@ + +IndexedDB: Exception Order of IDBObjectStore.createIndex() + + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/interfaces.worker.js b/tests/wpt/web-platform-tests/IndexedDB/interfaces.worker.js index 5da0590bb29..161acca34da 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/interfaces.worker.js +++ b/tests/wpt/web-platform-tests/IndexedDB/interfaces.worker.js @@ -11,13 +11,11 @@ request.onload = function() { var idls = request.responseText; idlArray.add_untested_idls("interface WorkerGlobalScope {};"); - idlArray.add_untested_idls("interface WorkerUtils {};"); - idlArray.add_untested_idls("WorkerGlobalScope implements WorkerUtils;"); idlArray.add_untested_idls("interface Event { };"); idlArray.add_untested_idls("interface EventTarget { };"); // From Indexed DB: - idlArray.add_idls("WorkerUtils implements IDBEnvironment;"); + idlArray.add_idls("WorkerGlobalScope implements IDBEnvironment;"); idlArray.add_idls(idls); idlArray.add_objects({ diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/OWNERS b/tests/wpt/web-platform-tests/WebCryptoAPI/OWNERS index 70190999b7c..6924cd9438c 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/OWNERS +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/OWNERS @@ -1,2 +1,4 @@ @Wafflespeanut @Ms2ger +@jimsch +@engelke diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/WebCryptoAPI.idl b/tests/wpt/web-platform-tests/WebCryptoAPI/WebCryptoAPI.idl new file mode 100644 index 00000000000..132c6d076ca --- /dev/null +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/WebCryptoAPI.idl @@ -0,0 +1,277 @@ +[NoInterfaceObject] +interface GlobalCrypto { + readonly attribute Crypto crypto; +}; + +//Window implements GlobalCrypto; +//WorkerGlobalScope implements GlobalCrypto; + +[Exposed=(Window,Worker)] +interface Crypto { + readonly attribute SubtleCrypto subtle; + ArrayBufferView getRandomValues(ArrayBufferView array); +}; + +typedef (object or DOMString) AlgorithmIdentifier; + +typedef AlgorithmIdentifier HashAlgorithmIdentifier; + +dictionary Algorithm { + required DOMString name; +}; + +dictionary KeyAlgorithm { + required DOMString name; +}; + +enum KeyType { "public", "private", "secret" }; + +enum KeyUsage { "encrypt", "decrypt", "sign", "verify", "deriveKey", "deriveBits", "wrapKey", "unwrapKey" }; + +[Exposed=(Window,Worker)] +interface CryptoKey { + readonly attribute KeyType type; + readonly attribute boolean extractable; + readonly attribute object algorithm; + readonly attribute object usages; +}; + + +enum KeyFormat { "raw", "spki", "pkcs8", "jwk" }; + +[Exposed=(Window,Worker)] +interface SubtleCrypto { + Promise encrypt(AlgorithmIdentifier algorithm, + CryptoKey key, + BufferSource data); + Promise decrypt(AlgorithmIdentifier algorithm, + CryptoKey key, + BufferSource data); + Promise sign(AlgorithmIdentifier algorithm, + CryptoKey key, + BufferSource data); + Promise verify(AlgorithmIdentifier algorithm, + CryptoKey key, + BufferSource signature, + BufferSource data); + Promise digest(AlgorithmIdentifier algorithm, + BufferSource data); + + Promise generateKey(AlgorithmIdentifier algorithm, + boolean extractable, + sequence keyUsages ); + Promise deriveKey(AlgorithmIdentifier algorithm, + CryptoKey baseKey, + AlgorithmIdentifier derivedKeyType, + boolean extractable, + sequence keyUsages ); + Promise deriveBits(AlgorithmIdentifier algorithm, + CryptoKey baseKey, + unsigned long length); + + Promise importKey(KeyFormat format, + (BufferSource or JsonWebKey) keyData, + AlgorithmIdentifier algorithm, + boolean extractable, + sequence keyUsages ); + Promise exportKey(KeyFormat format, CryptoKey key); + + Promise wrapKey(KeyFormat format, + CryptoKey key, + CryptoKey wrappingKey, + AlgorithmIdentifier wrapAlgorithm); + Promise unwrapKey(KeyFormat format, + BufferSource wrappedKey, + CryptoKey unwrappingKey, + AlgorithmIdentifier unwrapAlgorithm, + AlgorithmIdentifier unwrappedKeyAlgorithm, + boolean extractable, + sequence keyUsages ); +}; + +dictionary RsaOtherPrimesInfo { + // The following fields are defined in Section 6.3.2.7 of JSON Web Algorithms + DOMString r; + DOMString d; + DOMString t; +}; + +dictionary JsonWebKey { + // The following fields are defined in Section 3.1 of JSON Web Key + DOMString kty; + DOMString use; + sequence key_ops; + DOMString alg; + + // The following fields are defined in JSON Web Key Parameters Registration + boolean ext; + + // The following fields are defined in Section 6 of JSON Web Algorithms + DOMString crv; + DOMString x; + DOMString y; + DOMString d; + DOMString n; + DOMString e; + DOMString p; + DOMString q; + DOMString dp; + DOMString dq; + DOMString qi; + sequence oth; + DOMString k; +}; + +typedef Uint8Array BigInteger; + +dictionary CryptoKeyPair { + CryptoKey publicKey; + CryptoKey privateKey; +}; + +dictionary RsaKeyGenParams : Algorithm { + // The length, in bits, of the RSA modulus + [EnforceRange] required unsigned long modulusLength; + // The RSA public exponent + required BigInteger publicExponent; +}; + +dictionary RsaHashedKeyGenParams : RsaKeyGenParams { + // The hash algorithm to use + required HashAlgorithmIdentifier hash; +}; + +dictionary RsaKeyAlgorithm : KeyAlgorithm { + // The length, in bits, of the RSA modulus + required unsigned long modulusLength; + // The RSA public exponent + required BigInteger publicExponent; +}; + +dictionary RsaHashedKeyAlgorithm : RsaKeyAlgorithm { + // The hash algorithm that is used with this key + required KeyAlgorithm hash; +}; + +dictionary RsaHashedImportParams { + // The hash algorithm to use + required HashAlgorithmIdentifier hash; +}; + +dictionary RsaPssParams : Algorithm { +// The desired length of the random salt +[EnforceRange] required unsigned long saltLength; +}; + +dictionary RsaOaepParams : Algorithm { +// The optional label/application data to associate with the message +BufferSource label; +}; + +dictionary EcdsaParams : Algorithm { +// The hash algorithm to use +required HashAlgorithmIdentifier hash; +}; + +typedef DOMString NamedCurve; + +dictionary EcKeyGenParams : Algorithm { +// A named curve +required NamedCurve namedCurve; +}; + +dictionary EcKeyAlgorithm : KeyAlgorithm { +// The named curve that the key uses +required NamedCurve namedCurve; +}; + +dictionary EcKeyImportParams : Algorithm { +// A named curve +required NamedCurve namedCurve; +}; + +dictionary EcdhKeyDeriveParams : Algorithm { +// The peer's EC public key. +required CryptoKey public; +}; + +dictionary AesCtrParams : Algorithm { +// The initial value of the counter block. counter MUST be 16 bytes +// (the AES block size). The counter bits are the rightmost length +// bits of the counter block. The rest of the counter block is for +// the nonce. The counter bits are incremented using the standard +// incrementing function specified in NIST SP 800-38A Appendix B.1: +// the counter bits are interpreted as a big-endian integer and +// incremented by one. +required BufferSource counter; +// The length, in bits, of the rightmost part of the counter block +// that is incremented. +[EnforceRange] required octet length; +}; + +dictionary AesKeyAlgorithm : KeyAlgorithm { +// The length, in bits, of the key. +required unsigned short length; +}; + +dictionary AesKeyGenParams : Algorithm { +// The length, in bits, of the key. +[EnforceRange] required unsigned short length; +}; + +dictionary AesDerivedKeyParams : Algorithm { +// The length, in bits, of the key. +[EnforceRange] required unsigned short length; +}; + +dictionary AesCbcParams : Algorithm { +// The initialization vector. MUST be 16 bytes. +required BufferSource iv; +}; + +dictionary AesGcmParams : Algorithm { +// The initialization vector to use. May be up to 2^64-1 bytes long. +required BufferSource iv; +// The additional authentication data to include. +BufferSource additionalData; +// The desired length of the authentication tag. May be 0 - 128. +[EnforceRange] octet tagLength; +}; + +dictionary HmacImportParams : Algorithm { +// The inner hash function to use. +HashAlgorithmIdentifier hash; +// The length (in bits) of the key. +[EnforceRange] unsigned long length; +}; + +dictionary HmacKeyAlgorithm : KeyAlgorithm { +// The inner hash function to use. +required KeyAlgorithm hash; +// The length (in bits) of the key. +required unsigned long length; +}; + +dictionary HmacKeyGenParams : Algorithm { +// The inner hash function to use. +required HashAlgorithmIdentifier hash; +// The length (in bits) of the key to generate. If unspecified, the +// recommended length will be used, which is the size of the associated hash function's block +// size. +[EnforceRange] unsigned long length; +}; + +dictionary HkdfCtrParams : Algorithm { +// The algorithm to use with HMAC (e.g.: SHA-256) +required HashAlgorithmIdentifier hash; +// A bit string that corresponds to the label that identifies the purpose for the derived keying material. +required BufferSource label; +// A bit string that corresponds to the context of the key derivation, as described in Section 5 of [NIST SP800-108] +required BufferSource context; +}; + +dictionary Pbkdf2Params : Algorithm { +required BufferSource salt; +[EnforceRange] required unsigned long iterations; +required HashAlgorithmIdentifier hash; +}; diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/failures.js b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/failures.js new file mode 100644 index 00000000000..2fba64da72c --- /dev/null +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/failures.js @@ -0,0 +1,213 @@ +function run_test(algorithmNames) { + var subtle = crypto.subtle; // Change to test prefixed implementations + + setup({explicit_timeout: true}); + +// These tests check that generateKey throws an error, and that +// the error is of the right type, for a wide set of incorrect parameters. +// +// Error testing occurs by setting the parameter that should trigger the +// error to an invalid value, then combining that with all valid +// parameters that should be checked earlier by generateKey, and all +// valid and invalid parameters that should be checked later by +// generateKey. +// +// There are a lot of combinations of possible parameters for both +// success and failure modes, resulting in a very large number of tests +// performed. + + +// Setup: define the correct behaviors that should be sought, and create +// helper functions that generate all possible test parameters for +// different situations. + + var allTestVectors = [ // Parameters that should work for generateKey + {name: "AES-CTR", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, + {name: "AES-CBC", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, + {name: "AES-GCM", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, + {name: "AES-KW", resultType: CryptoKey, usages: ["wrapKey", "unwrapKey"], mandatoryUsages: []}, + {name: "HMAC", resultType: CryptoKey, usages: ["sign", "verify"], mandatoryUsages: []}, + {name: "RSASSA-PKCS1-v1_5", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, + {name: "RSA-PSS", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, + {name: "RSA-OAEP", resultType: "CryptoKeyPair", usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: ["decrypt", "unwrapKey"]}, + {name: "ECDSA", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, + {name: "ECDH", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]} + ]; + + var testVectors = []; + allTestVectors.forEach(function(vector) { + if (!algorithmNames || algorithmNames.includes(vector.name)) { + testVectors.push(vector); + } + }); + + + function parameterString(algorithm, extractable, usages) { + if (typeof algorithm !== "object" && typeof algorithm !== "string") { + alert(algorithm); + } + + var result = "(" + + objectToString(algorithm) + ", " + + objectToString(extractable) + ", " + + objectToString(usages) + + ")"; + + return result; + } + + // Test that a given combination of parameters results in an error, + // AND that it is the correct kind of error. + // + // Expected error is either a number, tested against the error code, + // or a string, tested against the error name. + function testError(algorithm, extractable, usages, expectedError, testTag) { + promise_test(function(test) { + return crypto.subtle.generateKey(algorithm, extractable, usages) + .then(function(result) { + assert_unreached("Operation succeeded, but should not have"); + }, function(err) { + if (typeof expectedError === "number") { + assert_equals(err.code, expectedError, testTag + " not supported"); + } else { + assert_equals(err.name, expectedError, testTag + " not supported"); + } + }); + }, testTag + ": generateKey" + parameterString(algorithm, extractable, usages)); + } + + + // Given an algorithm name, create several invalid parameters. + function badAlgorithmPropertySpecifiersFor(algorithmName) { + var results = []; + + if (algorithmName.toUpperCase().substring(0, 3) === "AES") { + // Specifier properties are name and length + [64, 127, 129, 255, 257, 512].forEach(function(length) { + results.push({name: algorithmName, length: length}); + }); + } else if (algorithmName.toUpperCase().substring(0, 3) === "RSA") { + [new Uint8Array([1]), new Uint8Array([1,0,0])].forEach(function(publicExponent) { + results.push({name: algorithmName, hash: "SHA-256", modulusLength: 1024, publicExponent: publicExponent}); + }); + } else if (algorithmName.toUpperCase().substring(0, 2) === "EC") { + ["P-512", "Curve25519"].forEach(function(curveName) { + results.push({name: algorithmName, namedCurve: curveName}); + }); + } + + return results; + } + + + // Don't create an exhaustive list of all invalid usages, + // because there would usually be nearly 2**8 of them, + // way too many to test. Instead, create every singleton + // of an illegal usage, and "poison" every valid usage + // with an illegal one. + function invalidUsages(validUsages, mandatoryUsages) { + var results = []; + + var illegalUsages = []; + ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey", "deriveKey", "deriveBits"].forEach(function(usage) { + if (!validUsages.includes(usage)) { + illegalUsages.push(usage); + } + }); + + var goodUsageCombinations = allValidUsages(validUsages, false, mandatoryUsages); + + illegalUsages.forEach(function(illegalUsage) { + results.push([illegalUsage]); + goodUsageCombinations.forEach(function(usageCombination) { + results.push(usageCombination.concat([illegalUsage])); + }); + }); + + return results; + } + + +// Now test for properly handling errors +// - Unsupported algorithm +// - Bad usages for algorithm +// - Bad key lengths + + // Algorithm normalization should fail with "Not supported" + var badAlgorithmNames = [ + "AES", + {name: "AES"}, + {name: "AES", length: 128}, + {name: "AES-CMAC", length: 128}, // Removed after CR + {name: "AES-CFB", length: 128}, // Removed after CR + {name: "HMAC", hash: "MD5"}, + {name: "RSA", hash: "SHA-256", modulusLength: 2048, publicExponent: new Uint8Array([1,0,1])}, + {name: "RSA-PSS", hash: "SHA", modulusLength: 2048, publicExponent: new Uint8Array([1,0,1])}, + {name: "EC", namedCurve: "P521"} + ]; + + + // Algorithm normalization failures should be found first + // - all other parameters can be good or bad, should fail + // due to NotSupportedError. + badAlgorithmNames.forEach(function(algorithm) { + allValidUsages(["decrypt", "sign", "deriveBits"], true, []) // Small search space, shouldn't matter because should fail before used + .forEach(function(usages) { + [false, true, "RED", 7].forEach(function(extractable){ + testError(algorithm, extractable, usages, "NotSupportedError", "Bad algorithm"); + }); + }); + }); + + + // Algorithms normalize okay, but usages bad (though not empty). + // It shouldn't matter what other extractable is. Should fail + // due to SyntaxError + testVectors.forEach(function(vector) { + var name = vector.name; + + allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + invalidUsages(vector.usages, vector.mandatoryUsages).forEach(function(usages) { + [true].forEach(function(extractable) { + testError(algorithm, extractable, usages, "SyntaxError", "Bad usages"); + }); + }); + }); + }); + + + // Other algorithm properties should be checked next, so try good + // algorithm names and usages, but bad algorithm properties next. + // - Special case: normally bad usage [] isn't checked until after properties, + // so it's included in this test case. It should NOT cause an error. + testVectors.forEach(function(vector) { + var name = vector.name; + badAlgorithmPropertySpecifiersFor(name).forEach(function(algorithm) { + allValidUsages(vector.usages, true, vector.mandatoryUsages) + .forEach(function(usages) { + [false, true].forEach(function(extractable) { + if (name.substring(0,2) === "EC") { + testError(algorithm, extractable, usages, "NotSupportedError", "Bad algorithm property"); + } else { + testError(algorithm, extractable, usages, "OperationError", "Bad algorithm property"); + } + }); + }); + }); + }); + + + // The last thing that should be checked is an empty usages (for secret keys). + testVectors.forEach(function(vector) { + var name = vector.name; + + allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + var usages = []; + [false, true].forEach(function(extractable) { + testError(algorithm, extractable, usages, "SyntaxError", "Empty usages"); + }); + }); + }); + + +} diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/failures.worker.js b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/failures.worker.js new file mode 100644 index 00000000000..705664c2d92 --- /dev/null +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/failures.worker.js @@ -0,0 +1,5 @@ +importScripts("/resources/testharness.js"); +importScripts("../util/helpers.js"); +importScripts("failures.js"); +run_test(); +done(); diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/successes.js b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/successes.js new file mode 100644 index 00000000000..d5e8baff587 --- /dev/null +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/successes.js @@ -0,0 +1,79 @@ + +function run_test(algorithmNames) { + var subtle = crypto.subtle; // Change to test prefixed implementations + + setup({explicit_timeout: true}); + +// These tests check that generateKey successfully creates keys +// when provided any of a wide set of correct parameters. +// +// There are a lot of combinations of possible parameters, +// resulting in a very large number of tests +// performed. + + +// Setup: define the correct behaviors that should be sought, and create +// helper functions that generate all possible test parameters for +// different situations. + + var testVectors = [ // Parameters that should work for generateKey + {name: "AES-CTR", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, + {name: "AES-CBC", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, + {name: "AES-GCM", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, + {name: "AES-KW", resultType: CryptoKey, usages: ["wrapKey", "unwrapKey"], mandatoryUsages: []}, + {name: "HMAC", resultType: CryptoKey, usages: ["sign", "verify"], mandatoryUsages: []}, + {name: "RSASSA-PKCS1-v1_5", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, + {name: "RSA-PSS", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, + {name: "RSA-OAEP", resultType: "CryptoKeyPair", usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: ["decrypt", "unwrapKey"]}, + {name: "ECDSA", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, + {name: "ECDH", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]} + ]; + + + function parameterString(algorithm, extractable, usages) { + var result = "(" + + objectToString(algorithm) + ", " + + objectToString(extractable) + ", " + + objectToString(usages) + + ")"; + + return result; + } + + // Test that a given combination of parameters is successful + function testSuccess(algorithm, extractable, usages, resultType, testTag) { + // algorithm, extractable, and usages are the generateKey parameters + // resultType is the expected result, either the CryptoKey object or "CryptoKeyPair" + // testTag is a string to prepend to the test name. + + promise_test(function(test) { + return subtle.generateKey(algorithm, extractable, usages) + .then(function(result) { + if (resultType === "CryptoKeyPair") { + assert_goodCryptoKey(result.privateKey, algorithm, extractable, usages, "private"); + assert_goodCryptoKey(result.publicKey, algorithm, extractable, usages, "public"); + } else { + assert_goodCryptoKey(result, algorithm, extractable, usages, "secret"); + } + }, function(err) { + assert_unreached("Threw an unexpected error: " + err.toString()); + }); + }, testTag + ": generateKey" + parameterString(algorithm, extractable, usages)); + } + + + // Test all valid sets of parameters for successful + // key generation. + testVectors.forEach(function(vector) { + allNameVariants(vector.name).forEach(function(name) { + allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + allValidUsages(vector.usages, false, vector.mandatoryUsages).forEach(function(usages) { + [false, true].forEach(function(extractable) { + testSuccess(algorithm, extractable, usages, vector.resultType, "Success"); + }); + }); + }); + }); + }); + +} diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/successes.worker.js b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/successes.worker.js new file mode 100644 index 00000000000..52e34946ef0 --- /dev/null +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/successes.worker.js @@ -0,0 +1,6 @@ +importScripts("/resources/testharness.js"); +importScripts("../util/helpers.js"); +importScripts("successes.js"); + +run_test(); +done(); diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/test_failures.html b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/test_failures.html new file mode 100644 index 00000000000..14e57b25cf2 --- /dev/null +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/test_failures.html @@ -0,0 +1,18 @@ + + + +WebCryptoAPI: generateKey() for Failures + + + + + + + + +

generateKey Tests for Bad Parameters

+ +
+ diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/test_successes.html b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/test_successes.html new file mode 100644 index 00000000000..384db1cd198 --- /dev/null +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/test_successes.html @@ -0,0 +1,23 @@ + + + +WebCryptoAPI: generateKey() Successful Calls + + + + + + + + +

generateKey Tests for Good Parameters

+

+ Warning! RSA key generation is intrinsically + very slow, so the related tests can take up to + several minutes to complete, depending on browser! +

+ +
+ diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/idlharness.html b/tests/wpt/web-platform-tests/WebCryptoAPI/idlharness.html new file mode 100644 index 00000000000..81e1e04f9c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/idlharness.html @@ -0,0 +1,45 @@ + + + + +IDL check of WebCrypto + + + + + + + + + +

Description

+ +

This test verifies that the implementations of the WebCrypto API match with its WebIDL definition.

+ +
+ + diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/idlharness.worker.js b/tests/wpt/web-platform-tests/WebCryptoAPI/idlharness.worker.js new file mode 100644 index 00000000000..ba033014e8f --- /dev/null +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/idlharness.worker.js @@ -0,0 +1,22 @@ +importScripts("/resources/testharness.js"); +importScripts("/resources/WebIDLParser.js", "/resources/idlharness.js"); + +var request = new XMLHttpRequest(); +request.open("GET", "WebCryptoAPI.idl"); +request.send(); +request.onload = function() { + var idl_array = new IdlArray(); + var idls = request.responseText; + + idl_array.add_untested_idls("[Global] interface Window { };"); + + idl_array.add_untested_idls("interface ArrayBuffer {};"); + idl_array.add_untested_idls("interface ArrayBufferView {};"); + + idl_array.add_idls(idls); + + idl_array.add_objects({"Crypto":["crypto"], "SubtleCrypto":["crypto.subtle"]}); + + idl_array.test(); + done(); +}; diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/util/helpers.js b/tests/wpt/web-platform-tests/WebCryptoAPI/util/helpers.js new file mode 100644 index 00000000000..fb723c3f790 --- /dev/null +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/util/helpers.js @@ -0,0 +1,230 @@ +// +// helpers.js +// +// Helper functions used by several WebCryptoAPI tests +// + +var registeredAlgorithmNames = [ + "RSASSA-PKCS1-v1_5", + "RSA-PSS", + "RSA-OAEP", + "ECDSA", + "ECDH", + "AES-CTR", + "AES-CBC", + "AES-GCM", + "AES-KW", + "HMAC", + "SHA-1", + "SHA-256", + "SHA-384", + "SHA-512", + "HKDF-CTR", + "PBKDF2" +]; + + +// Treats an array as a set, and generates an array of all non-empty +// subsets (which are themselves arrays). +// +// The order of members of the "subsets" is not guaranteed. +function allNonemptySubsetsOf(arr) { + var results = []; + var firstElement; + var remainingElements; + + for(var i=0; i 0) { + allNonemptySubsetsOf(remainingElements).forEach(function(combination) { + combination.push(firstElement); + results.push(combination); + }); + } + } + + return results; +} + + +// Create a string representation of keyGeneration parameters for +// test names and labels. +function objectToString(obj) { + var keyValuePairs = []; + + if (Array.isArray(obj)) { + return "[" + obj.map(function(elem){return objectToString(elem);}).join(", ") + "]"; + } else if (typeof obj === "object") { + Object.keys(obj).sort().forEach(function(keyName) { + keyValuePairs.push(keyName + ": " + objectToString(obj[keyName])); + }); + return "{" + keyValuePairs.join(", ") + "}"; + } else if (typeof obj === "undefined") { + return "undefined"; + } else { + return obj.toString(); + } + + var keyValuePairs = []; + + Object.keys(obj).sort().forEach(function(keyName) { + var value = obj[keyName]; + if (typeof value === "object") { + value = objectToString(value); + } else if (typeof value === "array") { + value = "[" + value.map(function(elem){return objectToString(elem);}).join(", ") + "]"; + } else { + value = value.toString(); + } + + keyValuePairs.push(keyName + ": " + value); + }); + + return "{" + keyValuePairs.join(", ") + "}"; +} + +// Is key a CryptoKey object with correct algorithm, extractable, and usages? +// Is it a secret, private, or public kind of key? +function assert_goodCryptoKey(key, algorithm, extractable, usages, kind) { + var correctUsages = []; + + var registeredAlgorithmName; + registeredAlgorithmNames.forEach(function(name) { + if (name.toUpperCase() === algorithm.name.toUpperCase()) { + registeredAlgorithmName = name; + } + }); + + assert_equals(key.constructor, CryptoKey, "Is a CryptoKey"); + assert_equals(key.type, kind, "Is a " + kind + " key"); + if (key.type === "public") { + extractable = true; // public keys are always extractable + } + assert_equals(key.extractable, extractable, "Extractability is correct"); + + assert_equals(key.algorithm.name, registeredAlgorithmName, "Correct algorithm name"); + assert_equals(key.algorithm.length, algorithm.length, "Correct length"); + if (["HMAC", "RSASSA-PKCS1-v1_5", "RSA-PSS"].includes(registeredAlgorithmName)) { + assert_equals(key.algorithm.hash.name.toUpperCase(), algorithm.hash.toUpperCase(), "Correct hash function"); + } + + // usages is expected to be provided for a key pair, but we are checking + // only a single key. The publicKey and privateKey portions of a key pair + // recognize only some of the usages appropriate for a key pair. + if (key.type === "public") { + ["encrypt", "verify", "wrapKey"].forEach(function(usage) { + if (usages.includes(usage)) { + correctUsages.push(usage); + } + }); + } else if (key.type === "private") { + ["decrypt", "sign", "unwrapKey", "deriveKey", "deriveBits"].forEach(function(usage) { + if (usages.includes(usage)) { + correctUsages.push(usage); + } + }); + } else { + correctUsages = usages; + } + + assert_equals((typeof key.usages), "object", key.type + " key.usages is an object"); + assert_not_equals(key.usages, null, key.type + " key.usages isn't null"); + + // The usages parameter could have repeats, but the usages + // property of the result should not. + var usageCount = 0; + key.usages.forEach(function(usage) { + usageCount += 1; + assert_in_array(usage, correctUsages, "Has " + usage + " usage"); + }); + assert_equals(key.usages.length, usageCount, "usages property is correct"); +} + + +// The algorithm parameter is an object with a name and other +// properties. Given the name, generate all valid parameters. +function allAlgorithmSpecifiersFor(algorithmName) { + var results = []; + + // RSA key generation is slow. Test a minimal set of parameters + var hashes = ["SHA-1", "SHA-256"]; + + // EC key generation is a lot faster. Check all curves in the spec + var curves = ["P-256", "P-384", "P-521"]; + + if (algorithmName.toUpperCase().substring(0, 3) === "AES") { + // Specifier properties are name and length + [128, 192, 256].forEach(function(length) { + results.push({name: algorithmName, length: length}); + }); + } else if (algorithmName.toUpperCase() === "HMAC") { + [ + {name: "SHA-1", length: 160}, + {name: "SHA-256", length: 256}, + {name: "SHA-384", length: 384}, + {name: "SHA-512", length: 512} + ].forEach(function(hashAlgorithm) { + results.push({name: algorithmName, hash: hashAlgorithm.name, length: hashAlgorithm.length}); + }); + } else if (algorithmName.toUpperCase().substring(0, 3) === "RSA") { + hashes.forEach(function(hashName) { + results.push({name: algorithmName, hash: hashName, modulusLength: 2048, publicExponent: new Uint8Array([1,0,1])}); + }); + } else if (algorithmName.toUpperCase().substring(0, 2) === "EC") { + curves.forEach(function(curveName) { + results.push({name: algorithmName, namedCurve: curveName}); + }); + } + + return results; +} + + +// Create every possible valid usages parameter, given legal +// usages. Note that an empty usages parameter is not always valid. +// +// There is an optional parameter - mandatoryUsages. If provided, +// it should be an array containing those usages of which one must be +// included. +function allValidUsages(validUsages, emptyIsValid, mandatoryUsages) { + if (typeof mandatoryUsages === "undefined") { + mandatoryUsages = []; + } + + okaySubsets = []; + allNonemptySubsetsOf(validUsages).forEach(function(subset) { + if (mandatoryUsages.length === 0) { + okaySubsets.push(subset); + } else { + for (var i=0; i diff --git a/tests/wpt/web-platform-tests/battery-status/battery-promise.html b/tests/wpt/web-platform-tests/battery-status/battery-promise.html index 2e2910cda60..9160c040491 100644 --- a/tests/wpt/web-platform-tests/battery-status/battery-promise.html +++ b/tests/wpt/web-platform-tests/battery-status/battery-promise.html @@ -1,26 +1,88 @@ -Battery Test: navigator.getBattery() returns BatteryManager as a promise +Battery Test: each Navigator object has a battery promise for BatteryManager - - - + +
+ Allow pop-up windows before running the tests. +
+ + diff --git a/tests/wpt/web-platform-tests/battery-status/support-iframe.html b/tests/wpt/web-platform-tests/battery-status/support-iframe.html new file mode 100644 index 00000000000..d4e5b31f130 --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/support-iframe.html @@ -0,0 +1,5 @@ + + +
+Hello! +
diff --git a/tests/wpt/web-platform-tests/battery-status/support-window-open.html b/tests/wpt/web-platform-tests/battery-status/support-window-open.html new file mode 100644 index 00000000000..afffc3af28e --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/support-window-open.html @@ -0,0 +1,10 @@ + + + diff --git a/tests/wpt/web-platform-tests/content-security-policy/support/alertAssert.sub.js b/tests/wpt/web-platform-tests/content-security-policy/support/alertAssert.sub.js index 607d0d4212c..ee9e54ea79f 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/support/alertAssert.sub.js +++ b/tests/wpt/web-platform-tests/content-security-policy/support/alertAssert.sub.js @@ -11,12 +11,12 @@ if(expected_alerts.length == 0) { } } else { var t_alert = async_test('Expecting alerts: {{GET[alerts]}}'); - setTimeout(function() { + step_timeout(function() { if(t_alert.phase != t_alert.phases.COMPLETE) { t_alert.step(function() { assert_unreached('Alert timeout, expected alerts ' + expected_alerts + ' not fired.') }); t_alert.done(); } - }, timeout * 100); + }, timeout * 1000); var alert_assert = function (msg) { t_alert.step(function () { if(msg && msg instanceof Error) { diff --git a/tests/wpt/web-platform-tests/content-security-policy/support/logTest.sub.js b/tests/wpt/web-platform-tests/content-security-policy/support/logTest.sub.js index 6bbdb43f72d..f712252cef5 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/support/logTest.sub.js +++ b/tests/wpt/web-platform-tests/content-security-policy/support/logTest.sub.js @@ -11,8 +11,8 @@ if (expected_logs.length == 0) { } } else { var t_log = async_test('Expecting logs: {{GET[logs]}}'); - setTimeout(function() { - if(t_log.phase != t_log.phases.COMPLETE){ + step_timeout(function() { + if(t_log.phase != t_log.phases.COMPLETE){ t_log.step(function () { assert_unreached('Logging timeout, expected logs ' + expected_logs + ' not sent.') }); t_log.done(); } diff --git a/tests/wpt/web-platform-tests/custom-elements/custom-elements-registry/define.html b/tests/wpt/web-platform-tests/custom-elements/custom-elements-registry/define.html new file mode 100644 index 00000000000..b4f15063e0e --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/custom-elements-registry/define.html @@ -0,0 +1,250 @@ + +Custom Elements: Element definition + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/dom/events/Event-dispatch-bubbles-true.html b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-bubbles-true.html new file mode 100644 index 00000000000..b23605a1ebc --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-bubbles-true.html @@ -0,0 +1,108 @@ + + + Event.bubbles attribute is set to false + + + + +
+ + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/uievents/ClickFakeEvent.nondocument.html b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-detached-click.html similarity index 100% rename from tests/wpt/web-platform-tests/uievents/ClickFakeEvent.nondocument.html rename to tests/wpt/web-platform-tests/dom/events/Event-dispatch-detached-click.html diff --git a/tests/wpt/web-platform-tests/dom/events/Event-dispatch-multiple-stopPropagation.html b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-multiple-stopPropagation.html new file mode 100644 index 00000000000..72644bd861e --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-multiple-stopPropagation.html @@ -0,0 +1,51 @@ + + + + Multiple dispatchEvent() and stopPropagation() + + + + +
+ + + + + + diff --git a/tests/wpt/web-platform-tests/uievents/order-of-events/event-phases-order.html b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-order.html similarity index 86% rename from tests/wpt/web-platform-tests/uievents/order-of-events/event-phases-order.html rename to tests/wpt/web-platform-tests/dom/events/Event-dispatch-order.html index d2dc4048787..ca94434595c 100644 --- a/tests/wpt/web-platform-tests/uievents/order-of-events/event-phases-order.html +++ b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-order.html @@ -1,5 +1,4 @@ - Event phases order @@ -16,13 +15,12 @@ async_test(function() { child.addEventListener('click', this.step_func(function(){ order.push(2) }), false); parent.addEventListener('click', this.step_func(function(){ order.push(3) }), false); - child.click(); + child.dispatchEvent(new Event('click', {bubbles: true})); assert_array_equals(order, [1, 2, 3]); })); }, "Event phases order"); - -
-
-
+
+
+
diff --git a/tests/wpt/web-platform-tests/dom/events/Event-dispatch-throwing.html b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-throwing.html new file mode 100644 index 00000000000..7d1c0d94a08 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-throwing.html @@ -0,0 +1,51 @@ + + +Throwing in event listeners + + +
+ diff --git a/tests/wpt/web-platform-tests/uievents/order-of-events/init-event-while-dispatching.html b/tests/wpt/web-platform-tests/dom/events/Event-init-while-dispatching.html similarity index 100% rename from tests/wpt/web-platform-tests/uievents/order-of-events/init-event-while-dispatching.html rename to tests/wpt/web-platform-tests/dom/events/Event-init-while-dispatching.html diff --git a/tests/wpt/web-platform-tests/uievents/constructors/constructors.html b/tests/wpt/web-platform-tests/dom/events/Event-subclasses-constructors.html similarity index 100% rename from tests/wpt/web-platform-tests/uievents/constructors/constructors.html rename to tests/wpt/web-platform-tests/dom/events/Event-subclasses-constructors.html diff --git a/tests/wpt/web-platform-tests/dom/events/EventListener-handleEvent.html b/tests/wpt/web-platform-tests/dom/events/EventListener-handleEvent.html new file mode 100644 index 00000000000..3b58c49696d --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/EventListener-handleEvent.html @@ -0,0 +1,41 @@ + + +EventListener::handleEvent() + + +
+ + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/dom/events/EventListener-incumbent-global-subframe.sub.html b/tests/wpt/web-platform-tests/dom/events/EventListener-incumbent-global-subframe.sub.html new file mode 100644 index 00000000000..25487cc5e0b --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/EventListener-incumbent-global-subframe.sub.html @@ -0,0 +1,13 @@ + + + diff --git a/tests/wpt/web-platform-tests/dom/events/EventListener-incumbent-global-subsubframe.sub.html b/tests/wpt/web-platform-tests/dom/events/EventListener-incumbent-global-subsubframe.sub.html new file mode 100644 index 00000000000..f438f535218 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/EventListener-incumbent-global-subsubframe.sub.html @@ -0,0 +1,17 @@ + + diff --git a/tests/wpt/web-platform-tests/dom/events/EventListener-incumbent-global.sub.html b/tests/wpt/web-platform-tests/dom/events/EventListener-incumbent-global.sub.html new file mode 100644 index 00000000000..6eaf93890ac --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/EventListener-incumbent-global.sub.html @@ -0,0 +1,20 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/dom/events/EventListenerOptions-capture.html b/tests/wpt/web-platform-tests/dom/events/EventListenerOptions-capture.html new file mode 100644 index 00000000000..377b6c77e31 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/EventListenerOptions-capture.html @@ -0,0 +1,98 @@ + + +EventListenerOptions.capture + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html b/tests/wpt/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html index fc44213caa8..880ce286496 100644 --- a/tests/wpt/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html +++ b/tests/wpt/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html @@ -12,9 +12,7 @@ var pairs = [ {attr: "classList", sup: ["anyElement"]}, // Defined in HTML {attr: "dropzone", sup: ["anyHTMLElement"]}, - {attr: "headers", sup: ["td", "th"]}, {attr: "htmlFor", sup: ["output"]}, - {attr: "ping", sup: ["a", "area"]}, {attr: "relList", sup: ["a", "area", "link"]}, {attr: "sandbox", sup: ["iframe"]}, {attr: "sizes", sup: ["link"]} diff --git a/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-location.js b/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-location.js index 5b081a75408..0297250b535 100644 --- a/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-location.js +++ b/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-location.js @@ -41,7 +41,7 @@ for (var statusCode of [301, 302, 303, 307, 308]) { redirectLocation("Redirect " + statusCode + " in \"manual\" mode without location", redirUrl, undefined, statusCode, "manual", true); redirectLocation("Redirect " + statusCode + " in \"follow\" mode with invalid location", redirUrl, invalidLocationUrl, statusCode, "follow", false); - redirectLocation("Redirect " + statusCode + " in \"manual\" mode with invalid location", redirUrl, invalidLocationUrl, statusCode, "manual", false); + redirectLocation("Redirect " + statusCode + " in \"manual\" mode with invalid location", redirUrl, invalidLocationUrl, statusCode, "manual", true); redirectLocation("Redirect " + statusCode + " in \"follow\" mode with data location", redirUrl, dataLocationUrl, statusCode, "follow", false); redirectLocation("Redirect " + statusCode + " in \"manual\" mode with data location", redirUrl, dataLocationUrl, statusCode, "manual", true); diff --git a/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-method.js b/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-method.js index a7e1b0b69c5..13433a1bb39 100644 --- a/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-method.js +++ b/tests/wpt/web-platform-tests/fetch/api/redirect/redirect-method.js @@ -17,6 +17,7 @@ function redirectMethod(desc, redirectUrl, redirectLocation, redirectStatus, met assert_equals(resp.status, 200, "Response's status is 200"); assert_equals(resp.type, "basic", "Response's type basic"); assert_equals(resp.headers.get("x-request-method"), expectedMethod, "Request method after redirection is " + expectedMethod); + assert_true(resp.redirected); return resp.text().then(function(text) { assert_equals(text, expectedMethod == "POST" ? requestInit.body : ""); }); @@ -24,6 +25,14 @@ function redirectMethod(desc, redirectUrl, redirectLocation, redirectStatus, met }, desc); } +promise_test(function(test) { + assert_false(new Response().redirected); + return fetch(RESOURCES_DIR + "method.py").then(function(resp) { + assert_equals(resp.status, 200, "Response's status is 200"); + assert_false(resp.redirected); + }); +}, "Response.redirected should be false on not-redirected responses"); + var redirUrl = RESOURCES_DIR + "redirect.py"; var locationUrl = "method.py"; diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-1.html index 625f98bf32c..02f916fd9ce 100644 --- a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-1.html +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-1.html @@ -1,7 +1,7 @@ diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/005.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/005.html index 7efad8d6cde..4a044bb250c 100644 --- a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/005.html +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/005.html @@ -3,7 +3,7 @@
- + Test
+ Test diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/014.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/014.html index 6e4399e67d1..d084f5829df 100644 --- a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/014.html +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/014.html @@ -14,8 +14,8 @@ t.step(function() { events.push('after script'); }); onload = t.step_func(function() { - //assuming the order is sync - assert_array_equals(events, ['javascript', 'after script']); + // javascript: executions are async. + assert_array_equals(events, ['after script', 'submit']); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/015.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/015.html index 33dd4538c5f..eb54622b785 100644 --- a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/015.html +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/015.html @@ -13,8 +13,8 @@ t.step(function() { events.push('after script'); }); onload = t.step_func(function() { - //assuming the order is sync - assert_array_equals(events, ['click', 'href', 'after script']); + // javascript: executions are async. + assert_array_equals(events, ['click', 'after script', 'href']); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html new file mode 100644 index 00000000000..2abf37c317f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html @@ -0,0 +1,32 @@ + + +Test that javascript: evaluation only performs a navigation to the + result when the result is a string value. + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/browser-interface-elements/status.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/browser-interface-elements/status.html deleted file mode 100644 index ed3facb53f8..00000000000 --- a/tests/wpt/web-platform-tests/html/browsers/the-window-object/browser-interface-elements/status.html +++ /dev/null @@ -1,18 +0,0 @@ - - -Window.status tests - - - -
- diff --git a/tests/wpt/web-platform-tests/html/dom/interfaces.html b/tests/wpt/web-platform-tests/html/dom/interfaces.html index 9886e7538f4..1eac04b29e5 100644 --- a/tests/wpt/web-platform-tests/html/dom/interfaces.html +++ b/tests/wpt/web-platform-tests/html/dom/interfaces.html @@ -1131,7 +1131,7 @@ interface HTMLDivElement : HTMLElement { interface HTMLAnchorElement : HTMLElement { attribute DOMString target; attribute DOMString download; - [PutForwards=value] readonly attribute DOMTokenList ping; + [CEReactions] attribute USVString ping; attribute DOMString rel; [PutForwards=value] readonly attribute DOMTokenList relList; attribute DOMString hreflang; @@ -1501,7 +1501,7 @@ interface HTMLAreaElement : HTMLElement { attribute DOMString shape; attribute DOMString target; attribute DOMString download; - [PutForwards=value] readonly attribute DOMTokenList ping; + [CEReactions] attribute USVString ping; attribute DOMString rel; [PutForwards=value] readonly attribute DOMTokenList relList; // hreflang and type are not reflected @@ -1560,7 +1560,7 @@ interface HTMLTableRowElement : HTMLElement { interface HTMLTableCellElement : HTMLElement { [CEReactions] attribute unsigned long colSpan; [CEReactions] attribute unsigned long rowSpan; - [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList headers; + [CEReactions] attribute DOMString headers; readonly attribute long cellIndex; [CEReactions] attribute DOMString scope; // only conforming for th elements @@ -1655,9 +1655,9 @@ interface HTMLInputElement : HTMLElement { readonly attribute NodeList labels; void select(); - attribute unsigned long selectionStart; - attribute unsigned long selectionEnd; - attribute DOMString selectionDirection; + attribute unsigned long? selectionStart; + attribute unsigned long? selectionEnd; + attribute DOMString? selectionDirection; void setRangeText(DOMString replacement); void setRangeText(DOMString replacement, unsigned long start, unsigned long end, optional SelectionMode selectionMode = "preserve"); void setSelectionRange(unsigned long start, unsigned long end, optional DOMString direction); @@ -1778,9 +1778,9 @@ interface HTMLTextAreaElement : HTMLElement { readonly attribute NodeList labels; void select(); - attribute unsigned long selectionStart; - attribute unsigned long selectionEnd; - attribute DOMString selectionDirection; + attribute unsigned long? selectionStart; + attribute unsigned long? selectionEnd; + attribute DOMString? selectionDirection; void setRangeText(DOMString replacement); void setRangeText(DOMString replacement, unsigned long start, unsigned long end, optional SelectionMode selectionMode = "preserve"); void setSelectionRange(unsigned long start, unsigned long end, optional DOMString direction); @@ -3187,6 +3187,13 @@ setup(function() { iframe.hidden = true; document.body.appendChild(iframe); }, {explicit_done:true}); + +function createInput(type) { + var input = document.createElement('input'); + input.type = type; + return input; +} + window.onload = function() { idlArray.add_objects({ NodeList: ['document.getElementsByName("name")'], @@ -3292,7 +3299,31 @@ window.onload = function() { HTMLFieldsetElement: ['document.createElement("fieldset")'], HTMLLegendElement: ['document.createElement("legend")'], HTMLLabelElement: ['document.createElement("label")'], - HTMLInputElement: ['document.createElement("input")'], + HTMLInputElement: [ + 'document.createElement("input")', + 'createInput("text")', + 'createInput("hidden")', + 'createInput("search")', + 'createInput("tel")', + 'createInput("url")', + 'createInput("email")', + 'createInput("password")', + 'createInput("date")', + 'createInput("month")', + 'createInput("week")', + 'createInput("time")', + 'createInput("datetime-local")', + 'createInput("number")', + 'createInput("range")', + 'createInput("color")', + 'createInput("checkbox")', + 'createInput("radio")', + 'createInput("file")', + 'createInput("submit")', + 'createInput("image")', + 'createInput("reset")', + 'createInput("button")' + ], HTMLButtonElement: ['document.createElement("button")'], HTMLSelectElement: ['document.createElement("select")'], HTMLDataListElement: ['document.createElement("datalist")'], diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/flow-content-0/div-align-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/flow-content-0/div-align-ref.html index 3f2fbca317c..da8e4d0dc1a 100644 --- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/flow-content-0/div-align-ref.html +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/flow-content-0/div-align-ref.html @@ -2,7 +2,6 @@ - -
-WERBEH -HEBREW -HEBREW -WERBEH -HEBREW -WERBEH -WERBEH -HEBREW -‮WERBEH‬ -WERBEH -HEBREW -HEBREW -إيان -עברית + + + + Selector: pseudo-classes (:dir(ltr), :dir(rtl)) + + + + + + + + +
+ WERBEH + HEBREW + HEBREW + WERBEH + HEBREW + إيان + WERBEH + WERBEH + HEBREW + ‮WERBEH‬ + WERBEH + HEBREW + HEBREW + إيان + עברית - + var ltrElements = ["html", "head", "meta", "title", "link1", "link2", "script1", "script2", "script3", "style", "body", "log", "bdo2", "bdi1", "bdi3", "span1", "span3", "span4", "span6", "bdo3", "bdo5", "script4"]; + + testSelectorIdsMatch(":dir(ltr)", ltrElements, "':dir(ltr)' matches all elements whose directionality is 'ltr'."); + + var bdo = document.createElement("bdo"); + bdo.setAttribute("dir", "ltr"); + testSelectorIdsMatch(":dir(ltr)", ltrElements, "':dir(ltr)' doesn't match elements not in the document."); + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/dir01.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/dir01.html index 6f9dedb0ae5..61bbd574a32 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/dir01.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/dir01.html @@ -14,5 +14,5 @@ var ltr = new Array(), all = document.querySelectorAll('*'); for(var i = all.length; i--; ltr.unshift(all[i])); - testSelector(":dir(ltr)", ltr, "direction doesn't affect :dir()"); + testSelectorElementsMatch(":dir(ltr)", ltr, "direction doesn't affect :dir()"); diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html index 65de6473bdc..8808675eb69 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html @@ -40,21 +40,21 @@ diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html index 66d48d5517c..98d81297ef4 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html @@ -38,5 +38,5 @@
diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/focus.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/focus.html index 22d6d8fffda..a319b24ef0d 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/focus.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/focus.html @@ -16,24 +16,36 @@
hello
content
- + diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/indeterminate.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/indeterminate.html index 62a40641b46..ffe607389a4 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/indeterminate.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/indeterminate.html @@ -18,20 +18,20 @@ diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/inrange-outofrange.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/inrange-outofrange.html index d3b23ebbc37..e9acbb37416 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/inrange-outofrange.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/inrange-outofrange.html @@ -70,15 +70,15 @@ diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/link.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/link.html index b7667bf956a..fd485b83ec5 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/link.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/link.html @@ -16,8 +16,8 @@ diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html index 66fb952e37a..d9bbadbe617 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html @@ -45,45 +45,45 @@ diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/required-optional.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/required-optional.html index 5c6df2ebcd0..f06fdfa1e0d 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/required-optional.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/required-optional.html @@ -22,14 +22,14 @@ diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/utils.js b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/utils.js index 8f5497ec57e..a8b1cd62a81 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/utils.js +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/utils.js @@ -6,9 +6,15 @@ function getElementsByIds(ids) { return result; } -function testSelector(selector, expected, testName) { +function testSelectorIdsMatch(selector, ids, testName) { test(function(){ var elements = document.querySelectorAll(selector); - assert_array_equals(elements, getElementsByIds(expected)); + assert_array_equals(elements, getElementsByIds(ids)); + }, testName); +} + +function testSelectorElementsMatch(selector, elements, testName) { + test(function(){ + assert_array_equals(document.querySelectorAll(selector), elements); }, testName); } diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/valid-invalid.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/valid-invalid.html index 746f7e96c33..034b6ff31f9 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/valid-invalid.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/valid-invalid.html @@ -37,32 +37,32 @@ diff --git a/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-table-element/table-rows.html b/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-table-element/table-rows.html index c813e0866e6..8bc23d5a7c4 100644 --- a/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-table-element/table-rows.html +++ b/tests/wpt/web-platform-tests/html/semantics/tabular-data/the-table-element/table-rows.html @@ -34,6 +34,14 @@ function test_table_simple(group, table) { assert_equals(table.rows.bar, bar1); assert_equals(table.rows["bar"], bar1); assert_equals(table.rows.namedItem("bar"), bar1); + assert_array_equals(Object.getOwnPropertyNames(table.rows), [ + "0", + "1", + "2", + "3", + "foo", + "bar" + ]); } test(function() { var table = document.createElement("table"); @@ -145,6 +153,46 @@ test(function() { foot2row1, foot2row2 ]); + assert_array_equals(Object.getOwnPropertyNames(table.rows), [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "head1row1", + "head1row2", + "head2row1", + "head2row2", + "orphan1", + "orphan2", + "orphan3", + "body1row1", + "body1row2", + "orphan4", + "body2row1", + "body2row2", + "orphan5", + "orphan6", + "orphan7", + "foot1row1", + "foot1row2", + "foot2row1", + "foot2row2" + ]); var ids = [ "orphan1", diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-compile-error-data-url.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-compile-error-data-url.html index 006ca13db04..66e1dfed4dd 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-compile-error-data-url.html +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-compile-error-data-url.html @@ -19,7 +19,7 @@ assert_equals(typeof lineno, 'number', 'third arg'); }); t_col.step(function() { - assert_equals(typeof column, 'number', 'fourth arg'); + assert_equals(typeof colno, 'number', 'fourth arg'); }); ">
@@ -34,4 +34,4 @@ }); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-compile-error.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-compile-error.html index f80981ddcd3..0f65f739991 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-compile-error.html +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-compile-error.html @@ -19,7 +19,7 @@ assert_equals(typeof lineno, 'number', 'third arg'); }); t_col.step(function() { - assert_equals(typeof column, 'number', 'fourth arg'); + assert_equals(typeof colno, 'number', 'fourth arg'); }); ">
@@ -36,4 +36,4 @@ }); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-runtime-error.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-runtime-error.html index 95ddd5d5b4e..faaddd9ed95 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-runtime-error.html +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/body-onerror-runtime-error.html @@ -19,7 +19,7 @@ assert_equals(typeof lineno, 'number', 'third arg'); }); t_col.step(function(){ - assert_equals(typeof column, 'number', 'fourth arg'); + assert_equals(typeof colno, 'number', 'fourth arg'); }); ">
@@ -36,4 +36,4 @@ }); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/compile-error-data-url.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/compile-error-data-url.html index ef7dd8913d6..08ce2f348f1 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/compile-error-data-url.html +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/compile-error-data-url.html @@ -17,11 +17,11 @@ ran = true; col_value = d; assert_equals(typeof a, 'string', 'first arg'); - assert_equals(b, 'data:text/javascript,for(;) {}', 'second arg'); + assert_equals(b, 'data:text/javascript,for(;){}', 'second arg'); assert_equals(typeof c, 'number', 'third arg'); }); - + - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/runtime-error-data-url.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/runtime-error-data-url.html index 1b203601b24..485ce90aa60 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/runtime-error-data-url.html +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/runtime-error-data-url.html @@ -28,9 +28,9 @@ t.done(); }); t_col.step(function(){ - assert_equals(typeof col_value, number, 'fourth arg'); + assert_equals(typeof col_value, 'number', 'fourth arg'); t_col.done(); }); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/progress-events/interface.html b/tests/wpt/web-platform-tests/progress-events/interface.html index 3bd7a0dadef..850d1b23dcf 100644 --- a/tests/wpt/web-platform-tests/progress-events/interface.html +++ b/tests/wpt/web-platform-tests/progress-events/interface.html @@ -7,10 +7,6 @@ test(function() { assert_equals(typeof ProgressEvent, "function") assert_equals(ProgressEvent.length, 1) - assert_throws(new TypeError(), function() { - "use strict"; - delete ProgressEvent.length; - }) }) test(function() { var desc = Object.getOwnPropertyDescriptor(ProgressEvent, "prototype") diff --git a/tests/wpt/web-platform-tests/resources/docs/api.md b/tests/wpt/web-platform-tests/resources/docs/api.md index 1f50c73a6ee..2fe0b09cc32 100644 --- a/tests/wpt/web-platform-tests/resources/docs/api.md +++ b/tests/wpt/web-platform-tests/resources/docs/api.md @@ -37,17 +37,21 @@ are complete", below. ## Synchronous Tests ## -To create a synchronous test use the test() function: +To create a synchronous test use the `test()` function: ```js test(test_function, name, properties) ``` `test_function` is a function that contains the code to test. For example a -trivial passing test would be: +trivial test for the DOM +[`hasFeature()`](https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature) +method (which is defined to always return true) would be: ```js -test(function() {assert_true(true)}, "assert_true with true") +test(function() { + assert_true(document.implementation.hasFeature()); +}, "hasFeature() with no arguments") ``` The function passed in is run in the `test()` call. @@ -63,38 +67,48 @@ a test may depend on one or more events or other callbacks. The API provided for testing these features is intended to be rather low-level but hopefully applicable to many situations. -To create a test, one starts by getting a Test object using async_test: +To create a test, one starts by getting a `Test` object using `async_test`: ```js async_test(name, properties) ``` e.g. - var t = async_test("Simple async test") + +```js +var t = async_test("DOMContentLoaded") +``` Assertions can be added to the test by calling the step method of the test object with a function containing the test assertions: ```js -t.step(function() {assert_true(true)}); +document.addEventListener("DOMContentLoaded", function() { + t.step(function() { + assert_true(e.bubbles, "bubbles should be true"); + }); +}); ``` -When all the steps are complete, the done() method must be called: +When all the steps are complete, the `done()` method must be called: ```js t.done(); ``` -As a convenience, async_test can also takes a function as first argument. +As a convenience, `async_test` can also takes a function as first argument. This function is called with the test object as both its `this` object and first argument. The above example can be rewritten as: ```js async_test(function(t) { - object.some_event = function() { - t.step(function (){assert_true(true); t.done();}); - }; -}, "Simple async test"); + document.addEventListener("DOMContentLoaded", function() { + t.step(function() { + assert_true(e.bubbles, "bubbles should be true"); + }); + t.done(); + }); +}, "DOMContentLoaded"); ``` which avoids cluttering the global scope with references to async @@ -103,18 +117,31 @@ tests instances. The properties argument is identical to that for `test()`. In many cases it is convenient to run a step in response to an event or a -callback. A convenient method of doing this is through the step_func method +callback. A convenient method of doing this is through the `step_func` method which returns a function that, when called runs a test step. For example ```js -object.some_event = t.step_func(function(e) {assert_true(e.a)}); +document.addEventListener("DOMContentLoaded", t.step_func(function() { + assert_true(e.bubbles, "bubbles should be true"); + t.done(); +}); +``` + +As a further convenience, the `step_func` that calls `done()` can instead +use `step_func_done`, as follows: + +```js +document.addEventListener("DOMContentLoaded", t.step_func_done(function() { + assert_true(e.bubbles, "bubbles should be true"); +}); ``` For asynchronous callbacks that should never execute, `unreached_func` can be used. For example: ```js -object.some_event = t.unreached_func("some_event should not fire"); +document.documentElement.addEventListener("DOMContentLoaded", + t.unreached_func("DOMContentLoaded should not be fired on the document element")); ``` Keep in mind that other tests could start executing before an Asynchronous @@ -233,7 +260,7 @@ the normal step function wrapper. For example: ```html -Example single-page test +Basic document.body test @@ -276,11 +303,13 @@ function on the test object. All registered callbacks will be run as soon as the test result is known. For example ```js -test(function() { - window.some_global = "example"; - this.add_cleanup(function() {delete window.some_global}); - assert_true(false); - }); + test(function() { + var element = document.createElement("div"); + element.setAttribute("id", "null"); + document.body.appendChild(element); + this.add_cleanup(function() { document.body.removeChild(element) }); + assert_equals(document.getElementById(null), element); + }, "Calling document.getElementById with a null argument."); ``` ## Timeouts in Tests ## @@ -298,9 +327,14 @@ that only passes if some event is *not* fired). In this case it is must use the `step_timeout` function: ```js -var t = async_test("Some test that does something after a timeout"); - -t.step_timeout(function() {assert_true(true); this.done()}, 2000); +async_test(function(t) { + var gotEvent = false; + document.addEventListener("DOMContentLoaded", t.step_func(function() { + assert_false(gotEvent, "Unexpected DOMContentLoaded event"); + gotEvent = true; + t.step_timeout(function() { t.done(); }, 2000); + }); +}, "Only one DOMContentLoaded"); ``` The difference between `setTimeout` and `step_timeout` is that the @@ -309,6 +343,9 @@ delay; e.g., in the above case a timeout multiplier of 2 would cause a pause of 4000ms before calling the callback. This makes it less likely to produce unstable results in slow configurations. +Note that timeouts generally need to be a few seconds long in order to +produce stable results in all test environments. + For single-page tests, `step_timeout` is also available as a global function. diff --git a/tests/wpt/web-platform-tests/resources/examples/apisample17.html b/tests/wpt/web-platform-tests/resources/examples/apisample17.html new file mode 100644 index 00000000000..c27c417b8fb --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/examples/apisample17.html @@ -0,0 +1,59 @@ + + + +Sample for using generate_tests to create a series of tests that share the same callback. + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index 52b65ddf19c..a13cacc8e2c 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -830,7 +830,7 @@ policies and contribution forms [3]. /* falls through */ default: try { - return typeof val + ' "' + truncate(String(val), 60) + '"'; + return typeof val + ' "' + truncate(String(val), 1000) + '"'; } catch(e) { return ("[stringifying object threw " + String(e) + " with type " + String(typeof e) + "]"); @@ -2464,7 +2464,9 @@ policies and contribution forms [3]. // Create a pattern to match stack frames originating within testharness.js. These include the // script URL, followed by the line/col (e.g., '/resources/testharness.js:120:21'). - var re = new RegExp((get_script_url() || "\\btestharness.js") + ":\\d+:\\d+"); + // Escape the URL per http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + // in case it contains RegExp characters. + var re = new RegExp((get_script_url().replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') || "\\btestharness.js") + ":\\d+:\\d+"); // Some browsers include a preamble that specifies the type of the error object. Skip this by // advancing until we find the first stack frame originating from testharness.js. diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/script-tests/cache-storage-match.js b/tests/wpt/web-platform-tests/service-workers/cache-storage/script-tests/cache-storage-match.js index 269df3b85c0..0052e43ca30 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/script-tests/cache-storage-match.js +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/script-tests/cache-storage-match.js @@ -111,11 +111,9 @@ promise_test(function(test) { return self.caches.match(transaction.request, {cacheName: 'foo'}); }) .then(function(response) { - assert_unreached('The match with bad cache name should reject.'); - }) - .catch(function(err) { - assert_equals(err.name, 'NotFoundError', - 'The match should reject with NotFoundError.'); + assert_equals(response, undefined, + 'The match with bad cache name should resolve to ' + + 'undefined.'); return self.caches.has('foo'); }) .then(function(has_foo) { diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-redirect.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-redirect.https.html index 23bb85612c9..17f4cb15e80 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-redirect.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-redirect.https.html @@ -45,9 +45,13 @@ function redirect_fetch_test(t, test) { ? '&expected_type=' + test['expected_type'] : ''; + var expectedRedirectedParam = test['expected_redirected'] + ? '&expected_redirected=' + test['expected_redirected'] + : ''; + var url = scope + '?url=' + encodeURIComponent(redirect + dest) + - expectedTypeParam + expectedTypeParam + expectedRedirectedParam var p = new Promise(function(resolve, reject) { var channel = new MessageChannel(); @@ -66,6 +70,7 @@ function redirect_fetch_test(t, test) { request_init: test.request_init, redirect_dest: test.redirect_dest, expected_type: test.expected_type, + expected_redirected: test.expected_redirected, }, '*', [channel.port2]); }); @@ -103,6 +108,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: false, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'cors' @@ -112,7 +118,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, cors mode Request redirected to ' + - 'same-origin without credentials should fail opaqueredirect interception'); + 'same-origin without credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -120,6 +127,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: false, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'cors' @@ -129,7 +137,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, cors mode Request redirected to ' + - 'no-cors without credentials should fail opaqueredirect interception'); + 'no-cors without credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -137,6 +146,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: false, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'cors' @@ -146,7 +156,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, cors mode Request redirected to ' + - 'cors without credentials should fail opaqueredirect interception'); + 'cors without credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -154,6 +165,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: false, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'same-origin' @@ -163,7 +175,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + - 'same-origin without credentials should fail opaqueredirect interception'); + 'same-origin without credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -171,6 +184,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: false, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'same-origin' @@ -180,7 +194,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + - 'no-cors without credentials should fail opaqueredirect interception'); + 'no-cors without credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -188,6 +203,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: false, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'same-origin' @@ -197,7 +213,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + - 'cors without credentials should fail opaqueredirect interception'); + 'cors without credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -205,6 +222,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: false, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'no-cors' @@ -214,7 +232,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + - 'same-origin without credentials should fail opaqueredirect interception'); + 'same-origin without credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -222,6 +241,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: false, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'no-cors' @@ -229,7 +249,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + - 'no-cors without credentials should succeed interception'); + 'no-cors without credentials should succeed interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -237,6 +258,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: false, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'no-cors' @@ -244,7 +266,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + - 'cors without credentials should succeed interception'); + 'cors without credentials should succeed interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -252,6 +275,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: true, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'cors' @@ -261,7 +285,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, cors mode Request redirected to ' + - 'same-origin with credentials should fail opaqueredirect interception'); + 'same-origin with credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -269,6 +294,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: true, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'cors' @@ -278,7 +304,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, cors mode Request redirected to ' + - 'no-cors with credentials should fail opaqueredirect interception'); + 'no-cors with credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -286,6 +313,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: true, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'cors' @@ -295,7 +323,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, cors mode Request redirected to ' + - 'cors with credentials should fail opaqueredirect interception'); + 'cors with credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -303,6 +332,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: true, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'same-origin' @@ -312,7 +342,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + - 'same-origin with credentials should fail opaqueredirect interception'); + 'same-origin with credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -320,6 +351,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: true, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'same-origin' @@ -329,7 +361,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + - 'no-cors with credentials should fail opaqueredirect interception'); + 'no-cors with credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -337,6 +370,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: true, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'same-origin' @@ -346,7 +380,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + - 'cors with credentials should fail opaqueredirect interception'); + 'cors with credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -354,6 +389,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: true, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'no-cors' @@ -363,7 +399,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + - 'same-origin with credentials should fail opaqueredirect interception'); + 'same-origin with credentials should fail opaqueredirect interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -371,6 +408,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: true, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'no-cors' @@ -378,7 +416,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + - 'no-cors with credentials should succeed interception'); + 'no-cors with credentials should succeed interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -386,6 +425,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: true, expected_type: 'opaqueredirect', + expected_redirected: false, request_init: { redirect: 'manual', mode: 'no-cors' @@ -393,7 +433,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + - 'cors with credentials should succeed interception'); + 'cors with credentials should succeed interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -401,6 +442,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: false, expected_type: 'basic', + expected_redirected: true, request_init: { redirect: 'follow', mode: 'cors' @@ -408,7 +450,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, cors mode Request redirected to ' + - 'same-origin without credentials should succeed interception'); + 'same-origin without credentials should succeed interception ' + + 'and response should be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -416,6 +459,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: false, expected_type: 'should-not-get-a-response', + expected_redirected: false, request_init: { redirect: 'follow', mode: 'cors' @@ -425,7 +469,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, follow redirect, cors mode Request redirected to ' + - 'no-cors without credentials should fail interception'); + 'no-cors without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -433,6 +478,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: false, expected_type: 'cors', + expected_redirected: true, request_init: { redirect: 'follow', mode: 'cors' @@ -440,7 +486,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, cors mode Request redirected to ' + - 'cors without credentials should succeed interception'); + 'cors without credentials should succeed interception ' + + 'and response should be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -448,6 +495,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: false, expected_type: 'basic', + expected_redirected: true, request_init: { redirect: 'follow', mode: 'same-origin' @@ -455,7 +503,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + - 'same-origin without credentials should succeed interception'); + 'same-origin without credentials should succeed interception ' + + 'and response should be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -463,6 +512,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: false, expected_type: 'should-not-get-a-response', + expected_redirected: false, request_init: { redirect: 'follow', mode: 'same-origin' @@ -472,7 +522,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + - 'no-cors without credentials should fail interception'); + 'no-cors without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -480,6 +531,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: false, expected_type: 'should-not-get-a-response', + expected_redirected: false, request_init: { redirect: 'follow', mode: 'same-origin' @@ -489,7 +541,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + - 'cors without credentials should fail interception'); + 'cors without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -497,6 +550,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: false, expected_type: 'basic', + expected_redirected: true, request_init: { redirect: 'follow', mode: 'no-cors' @@ -504,7 +558,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + - 'same-origin without credentials should succeed interception'); + 'same-origin without credentials should succeed interception ' + + 'and response should be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -512,6 +567,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: false, expected_type: 'opaque', + expected_redirected: false, request_init: { redirect: 'follow', mode: 'no-cors' @@ -519,7 +575,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + - 'no-cors without credentials should succeed interception'); + 'no-cors without credentials should succeed interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -527,6 +584,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: false, expected_type: 'opaque', + expected_redirected: false, request_init: { redirect: 'follow', mode: 'no-cors' @@ -534,7 +592,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + - 'cors without credentials should succeed interception'); + 'cors without credentials should succeed interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -542,6 +601,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: true, expected_type: 'basic', + expected_redirected: true, request_init: { redirect: 'follow', mode: 'cors' @@ -549,7 +609,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, cors mode Request redirected to ' + - 'same-origin with credentials should succeed interception'); + 'same-origin with credentials should succeed interception ' + + 'and response should be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -557,6 +618,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: true, expected_type: 'should-not-get-a-response', + expected_redirected: false, request_init: { redirect: 'follow', mode: 'cors' @@ -566,7 +628,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, follow redirect, cors mode Request redirected to ' + - 'no-cors with credentials should fail interception'); + 'no-cors with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -574,6 +637,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: true, expected_type: 'cors', + expected_redirected: true, request_init: { redirect: 'follow', mode: 'cors' @@ -584,7 +648,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, follow redirect, cors mode Request redirected to ' + - 'cors with credentials should fail interception'); + 'cors with credentials should fail interception ' + + 'and response should be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -592,6 +657,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: true, expected_type: 'basic', + expected_redirected: true, request_init: { redirect: 'follow', mode: 'same-origin' @@ -599,7 +665,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + - 'same-origin with credentials should succeed interception'); + 'same-origin with credentials should succeed interception ' + + 'and response should be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -607,6 +674,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: true, expected_type: 'should-not-get-a-response', + expected_redirected: false, request_init: { redirect: 'follow', mode: 'same-origin' @@ -616,7 +684,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + - 'no-cors with credentials should fail interception'); + 'no-cors with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -624,6 +693,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: true, expected_type: 'should-not-get-a-response', + expected_redirected: false, request_init: { redirect: 'follow', mode: 'same-origin' @@ -633,7 +703,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + - 'cors with credentials should fail interception'); + 'cors with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -641,6 +712,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: true, expected_type: 'basic', + expected_redirected: true, request_init: { redirect: 'follow', mode: 'no-cors' @@ -648,7 +720,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + - 'same-origin with credentials should succeed interception'); + 'same-origin with credentials should succeed interception ' + + 'and response should be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -656,6 +729,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: true, expected_type: 'opaque', + expected_redirected: false, request_init: { redirect: 'follow', mode: 'no-cors' @@ -663,7 +737,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + - 'no-cors with credentials should succeed interception'); + 'no-cors with credentials should succeed interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -671,6 +746,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: true, expected_type: 'opaque', + expected_redirected: false, request_init: { redirect: 'follow', mode: 'no-cors' @@ -678,7 +754,8 @@ async_test(function(t) { should_reject: false }); }, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + - 'cors with credentials should succeed interception'); + 'cors with credentials should succeed interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -686,6 +763,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: false, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'cors' @@ -695,7 +773,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, cors mode Request redirected to ' + - 'same-origin without credentials should fail interception'); + 'same-origin without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -703,6 +782,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: false, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'cors' @@ -712,7 +792,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, cors mode Request redirected to ' + - 'no-cors without credentials should fail interception'); + 'no-cors without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -720,6 +801,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: false, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'cors' @@ -729,7 +811,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, cors mode Request redirected to ' + - 'cors without credentials should fail interception'); + 'cors without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -737,6 +820,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: false, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'same-origin' @@ -746,7 +830,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + - 'same-origin without credentials should fail interception'); + 'same-origin without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -754,6 +839,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: false, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'same-origin' @@ -763,7 +849,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + - 'no-cors without credentials should fail interception'); + 'no-cors without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -771,6 +858,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: false, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'same-origin' @@ -780,7 +868,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + - 'cors without credentials should fail interception'); + 'cors without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -788,6 +877,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: false, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'no-cors' @@ -797,7 +887,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + - 'same-origin without credentials should fail interception'); + 'same-origin without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -805,6 +896,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: false, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'no-cors' @@ -814,7 +906,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + - 'no-cors without credentials should fail interception'); + 'no-cors without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -822,6 +915,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: false, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'no-cors' @@ -831,7 +925,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + - 'cors without credentials should fail interception'); + 'cors without credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -839,6 +934,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: true, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'cors' @@ -848,7 +944,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, cors mode Request redirected to ' + - 'same-origin with credentials should fail interception'); + 'same-origin with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -856,6 +953,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: true, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'cors' @@ -865,7 +963,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, cors mode Request redirected to ' + - 'no-cors with credentials should fail interception'); + 'no-cors with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -873,6 +972,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: true, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'cors' @@ -882,7 +982,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, cors mode Request redirected to ' + - 'cors with credentials should fail interception'); + 'cors with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -890,6 +991,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: true, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'same-origin' @@ -899,7 +1001,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + - 'same-origin with credentials should fail interception'); + 'same-origin with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -907,6 +1010,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: true, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'same-origin' @@ -916,7 +1020,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + - 'no-cors with credentials should fail interception'); + 'no-cors with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -924,6 +1029,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: true, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'same-origin' @@ -933,7 +1039,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + - 'cors with credentials should fail interception'); + 'cors with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -941,6 +1048,7 @@ async_test(function(t) { redirect_dest: 'same-origin', url_credentials: true, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'no-cors' @@ -950,7 +1058,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + - 'same-origin with credentials should fail interception'); + 'same-origin with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -958,6 +1067,7 @@ async_test(function(t) { redirect_dest: 'no-cors', url_credentials: true, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'no-cors' @@ -967,7 +1077,8 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + - 'no-cors with credentials should fail interception'); + 'no-cors with credentials should fail interception ' + + 'and response should not be redirected'); async_test(function(t) { redirect_fetch_test(t, { @@ -975,6 +1086,7 @@ async_test(function(t) { redirect_dest: 'cors', url_credentials: true, expected_type: 'error', + expected_redirected: false, request_init: { redirect: 'error', mode: 'no-cors' @@ -984,7 +1096,7 @@ async_test(function(t) { should_reject: true }); }, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + - 'cors with credentials should fail interception'); - + 'cors with credentials should fail interception and response should not ' + + 'be redirected'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-redirect.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-redirect.https.html index fa937f2e189..c4e8c2cbaf2 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-redirect.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-request-redirect.https.html @@ -146,12 +146,13 @@ promise_test(function(t) { assert_resolves( iframe_test(REDIRECT_TO_HTML_URL), 'Normal redirected iframe loading should succeed.'), - assert_resolves( + assert_rejects( iframe_test(SCOPE + '?url=' + encodeURIComponent(REDIRECT_TO_HTML_URL) + - '&redirect-mode=follow'), + '&redirect-mode=follow', + true /* timeout_enabled */), 'Redirected iframe loading with Request.redirect=follow should'+ - ' succeed.'), + ' fail.'), assert_rejects( iframe_test(SCOPE + '?url=' + encodeURIComponent(REDIRECT_TO_HTML_URL) + @@ -173,4 +174,182 @@ promise_test(function(t) { service_worker_unregister_and_done(t, SCOPE); }); }, 'Verify redirect mode of Fetch API and ServiceWorker FetchEvent.'); + + // test for reponse.redirected + promise_test(function(t) { + var SCOPE = 'resources/fetch-request-redirect-iframe.html'; + var SCRIPT = 'resources/fetch-rewrite-worker.js'; + var REDIRECT_URL = base_path() + 'resources/redirect.py?Redirect='; + var XHR_URL = base_path() + 'resources/simple.txt'; + var IMAGE_URL = base_path() + 'resources/square.png'; + + var REDIRECT_TO_XHR_URL = REDIRECT_URL + encodeURIComponent(XHR_URL); + + var host_info = get_host_info(); + + var CROSS_ORIGIN_URL = host_info['HTTPS_REMOTE_ORIGIN'] + IMAGE_URL; + + var REDIRECT_TO_CROSS_ORIGIN = REDIRECT_URL + encodeURIComponent(CROSS_ORIGIN_URL + '?ACAOrigin=*'); + + var worker; + var frame; + return service_worker_unregister_and_register(t, SCRIPT, SCOPE) + .then(function(registration) { + worker = registration.installing; + return wait_for_state(t, worker, 'activated'); + }) + .then(function() { return with_iframe(SCOPE); }) + .then(function(f) { + frame = f; + return Promise.all([ + // XMLHttpRequest tests. + assert_resolves( + frame.contentWindow.xhr( + './?url=' + encodeURIComponent(XHR_URL) + + '&expected_redirected=false' + + '&expected_resolves=true'), + 'Normal XHR should be resolved and response should not be redirected.'), + assert_resolves( + frame.contentWindow.xhr( + './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) + + '&expected_redirected=true' + + '&expected_resolves=true'), + 'Redirected XHR should be resolved and response should be redirected.'), + + // tests for request's mode = cors + assert_resolves( + frame.contentWindow.xhr( + './?url=' + encodeURIComponent(XHR_URL) + + '&mode=cors' + + '&expected_redirected=false' + + '&expected_resolves=true'), + 'Normal XHR should be resolved and response should not be redirected even with CORS mode.'), + assert_resolves( + frame.contentWindow.xhr( + './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) + + '&mode=cors' + + '&redirect-mode=follow' + + '&expected_redirected=true' + + '&expected_resolves=true'), + 'Redirected XHR should be resolved and response.redirected should be redirected with CORS mode.'), + + // tests for request's mode = no-cors + // The response.redirect should be false since we will not add redirected url list when redirect-mode is not follow. + assert_rejects( + frame.contentWindow.xhr( + './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) + + '&mode=no-cors' + + '&redirect-mode=manual' + + '&expected_redirected=false' + + '&expected_resolves=false'), + 'Redirected XHR should be reject and response should be redirected with NO-CORS mode and redirect-mode=manual.'), + + // tests for redirecting to a cors + assert_resolves( + frame.contentWindow.load_image( + './?url=' + encodeURIComponent(REDIRECT_TO_CROSS_ORIGIN) + + '&mode=no-cors' + + '&redirect-mode=follow' + + '&expected_redirected=false' + + '&expected_resolves=true'), + 'Redirected COS image should be reject and response should not be redirected with NO-CORS mode.'), + ]); + }) + .then(function() { + frame.remove(); + service_worker_unregister_and_done(t, SCOPE); + }); + }, 'Verify redirected of Response(Fetch API) and ServiceWorker FetchEvent.'); + + // test for reponse.redirected after cached + promise_test(function(t) { + var SCOPE = 'resources/fetch-request-redirect-iframe.html'; + var SCRIPT = 'resources/fetch-rewrite-worker.js'; + var REDIRECT_URL = base_path() + 'resources/redirect.py?Redirect='; + var XHR_URL = base_path() + 'resources/simple.txt'; + var IMAGE_URL = base_path() + 'resources/square.png'; + + var REDIRECT_TO_XHR_URL = REDIRECT_URL + encodeURIComponent(XHR_URL); + + var host_info = get_host_info(); + + var CROSS_ORIGIN_URL = host_info['HTTPS_REMOTE_ORIGIN'] + IMAGE_URL; + + var REDIRECT_TO_CROSS_ORIGIN = REDIRECT_URL + encodeURIComponent(CROSS_ORIGIN_URL + '?ACAOrigin=*'); + + var worker; + var frame; + return service_worker_unregister_and_register(t, SCRIPT, SCOPE) + .then(function(registration) { + worker = registration.installing; + return wait_for_state(t, worker, 'activated'); + }) + .then(function() { return with_iframe(SCOPE); }) + .then(function(f) { + frame = f; + return Promise.all([ + // XMLHttpRequest tests. + assert_resolves( + frame.contentWindow.xhr( + './?url=' + encodeURIComponent(XHR_URL) + + '&expected_redirected=false' + + '&expected_resolves=true' + + '&cache'), + 'Normal XHR should be resolved and response should not be redirected.'), + assert_resolves( + frame.contentWindow.xhr( + './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) + + '&expected_redirected=true' + + '&expected_resolves=true' + + '&cache'), + 'Redirected XHR should be resolved and response should be redirected.'), + + // tests for request's mode = cors + assert_resolves( + frame.contentWindow.xhr( + './?url=' + encodeURIComponent(XHR_URL) + + '&mode=cors' + + '&expected_redirected=false' + + '&expected_resolves=true' + + '&cache'), + 'Normal XHR should be resolved and response should not be redirected even with CORS mode.'), + assert_resolves( + frame.contentWindow.xhr( + './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) + + '&mode=cors' + + '&redirect-mode=follow' + + '&expected_redirected=true' + + '&expected_resolves=true' + + '&cache'), + 'Redirected XHR should be resolved and response.redirected should be redirected with CORS mode.'), + + // tests for request's mode = no-cors + // The response.redirect should be false since we will not add redirected url list when redirect-mode is not follow. + assert_rejects( + frame.contentWindow.xhr( + './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) + + '&mode=no-cors' + + '&redirect-mode=manual' + + '&expected_redirected=false' + + '&expected_resolves=false' + + '&cache'), + 'Redirected XHR should be reject and response should be redirected with NO-CORS mode and redirect-mode=manual.'), + + // tests for redirecting to a cors + assert_resolves( + frame.contentWindow.load_image( + './?url=' + encodeURIComponent(REDIRECT_TO_CROSS_ORIGIN) + + '&mode=no-cors' + + '&redirect-mode=follow' + + '&expected_redirected=false' + + '&expected_resolves=true' + + '&cache'), + 'Redirected COS image should be reject and response should not be redirected with NO-CORS mode.'), + ]); + }) + .then(function() { + frame.remove(); + service_worker_unregister_and_done(t, SCOPE); + }); + }, 'Verify redirected of Response(Fetch API), Cache API and ServiceWorker FetchEvent.'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-redirect-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-redirect-iframe.html index fbe3bda8471..7548d8af7d6 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-redirect-iframe.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-redirect-iframe.html @@ -5,10 +5,14 @@ window.addEventListener('message', function(evt) { fetch(new Request(data.url, data.request_init)).then(function(response) { if (data.request_init.mode === 'no-cors' && data.redirect_dest != 'same-origin') { if (response.type === data.expected_type && - (response.type === 'opaque' || response.type === 'opaqueredirect')) { + (response.type === 'opaque' || response.type === 'opaqueredirect') && + response.redirected === data.expected_redirected) { return {result: 'success', detail: ''}; } else { - return {result: 'failure', detail: 'expected ' + data.expected_type + ' response'}; + return {result: 'failure', + detail: 'expected type ' + data.expected_type + + ', expected redirected ' + data.expected_redirected + + ' response'}; } } return response.json(); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker.js index 3929f2cccf1..710057bda4a 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-rewrite-worker.js @@ -95,6 +95,33 @@ self.addEventListener('fetch', function(event) { }))); } + var expectedRedirected = params['expected_redirected']; + if (typeof expectedRedirected !== 'undefined') { + var expected_redirected = (expectedRedirected === 'true'); + if(response.redirected !== expected_redirected) { + // This is simply determining how to pass an error to the outer + // test case(fetch-request-redirect.https.html). + var execptedResolves = params['expected_resolves']; + if (execptedResolves === 'true') { + // Reject a JSON object with a failure since promise is expected + // to be resolved. + reject(new Response(JSON.stringify({ + result: 'failure', + detail: 'got '+ response.redirected + + ' Response.redirected instead of ' + expectedRedirected + }))); + } else { + // Resolve a JSON object with a failure since promise is expected + // to be rejected. + resolve(new Response(JSON.stringify({ + result: 'failure', + detail: 'got '+ response.redirected + + ' Response.redirected instead of ' + expectedRedirected + }))); + } + } + } + if (params['cache']) { var cacheName = "cached-fetches-" + Date.now(); var cache; diff --git a/tests/wpt/web-platform-tests/shadow-dom/HTMLSlotElement-interface.html b/tests/wpt/web-platform-tests/shadow-dom/HTMLSlotElement-interface.html new file mode 100644 index 00000000000..a9ab4661b55 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/HTMLSlotElement-interface.html @@ -0,0 +1,269 @@ + + + +Shadow DOM: HTMLSlotElement interface + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/leaktests/get-elements.html b/tests/wpt/web-platform-tests/shadow-dom/leaktests/get-elements.html new file mode 100644 index 00000000000..2ce916a650e --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/leaktests/get-elements.html @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + +
+
+
+
+ + + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/leaktests/window-frames.html b/tests/wpt/web-platform-tests/shadow-dom/leaktests/window-frames.html new file mode 100644 index 00000000000..5ba2531ff26 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/leaktests/window-frames.html @@ -0,0 +1,36 @@ + + + + + + + + + + +
+ +
+
+ + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/scroll-to-the-fragment-in-shadow-tree.html b/tests/wpt/web-platform-tests/shadow-dom/scroll-to-the-fragment-in-shadow-tree.html new file mode 100644 index 00000000000..c87932eb62f --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/scroll-to-the-fragment-in-shadow-tree.html @@ -0,0 +1,127 @@ + + + +Shadow DOM: The indicated part of the document should not match an element inside a shadow tree + + + + + + + +
+
+ + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html index 9faab3c642e..455ee40c383 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html @@ -13,7 +13,7 @@ policies and contribution forms [3]. Shadow DOM Test - event path - + @@ -22,7 +22,7 @@ policies and contribution forms [3].
- + diff --git a/tests/wpt/web-platform-tests/streams/count-queuing-strategy.https.html b/tests/wpt/web-platform-tests/streams/count-queuing-strategy.https.html index 2afd1268865..a7f5570d313 100644 --- a/tests/wpt/web-platform-tests/streams/count-queuing-strategy.https.html +++ b/tests/wpt/web-platform-tests/streams/count-queuing-strategy.https.html @@ -2,7 +2,7 @@ - + diff --git a/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/approved/DOM.event.flow.html b/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/approved/DOM.event.flow.html deleted file mode 100644 index 35355f766b0..00000000000 --- a/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/approved/DOM.event.flow.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - Event dispatch and DOM event flow - - - - -
- - - - - - - - - - - - - - - - - diff --git a/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/approved/EventListener.eventHandler.html b/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/approved/EventListener.eventHandler.html deleted file mode 100644 index eed710a39d7..00000000000 --- a/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/approved/EventListener.eventHandler.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - EventLister member: handleEvent() - - - - -
- - - - - - - - - - - - - - - - - diff --git a/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/approved/EventObject.multiple.dispatchEvent.html b/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/approved/EventObject.multiple.dispatchEvent.html deleted file mode 100644 index 6de97a80553..00000000000 --- a/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/approved/EventObject.multiple.dispatchEvent.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - Multiple dispatchEvent() and stopPropagation() - - - - -
- - - - - - diff --git a/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/submissions/Microsoft/dispatchEvent.UNSPECIFIED_EVENT_TYPE_ERR.html b/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/submissions/Microsoft/dispatchEvent.UNSPECIFIED_EVENT_TYPE_ERR.html deleted file mode 100644 index d239f06aa92..00000000000 --- a/tests/wpt/web-platform-tests/uievents/legacy-domevents-tests/submissions/Microsoft/dispatchEvent.UNSPECIFIED_EVENT_TYPE_ERR.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - EventException.UNSPECIFIED_EVENT_TYPE_ERR and dispatchEvent() - - - -

DOM Events

-

- Test Description: dispatchEvent - EventException UNSPECIFIED_EVENT_TYPE_ERR raises if the Event.type - was not specified by initializing the event before dispatchEvent was called. -

- -

Test passes if the word "PASS" appears below.

-
Test result:
-
FAIL
- - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/uievents/throwing-in-listener-and-window-error-event.html b/tests/wpt/web-platform-tests/uievents/throwing-in-listener-and-window-error-event.html deleted file mode 100644 index 29841d9ac17..00000000000 --- a/tests/wpt/web-platform-tests/uievents/throwing-in-listener-and-window-error-event.html +++ /dev/null @@ -1,33 +0,0 @@ - - -Throwing in event listener generates an error event on the window object - - - -
- - - -
-
diff --git a/tests/wpt/web-platform-tests/uievents/throwing-in-listener-when-all-have-not-run-yet.html b/tests/wpt/web-platform-tests/uievents/throwing-in-listener-when-all-have-not-run-yet.html deleted file mode 100644 index 52196329bec..00000000000 --- a/tests/wpt/web-platform-tests/uievents/throwing-in-listener-when-all-have-not-run-yet.html +++ /dev/null @@ -1,31 +0,0 @@ - - -Throwing in event listener - - - -
- - - -
-
diff --git a/tests/wpt/web-platform-tests/url/setters_tests.json b/tests/wpt/web-platform-tests/url/setters_tests.json new file mode 100644 index 00000000000..9512d2547e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/url/setters_tests.json @@ -0,0 +1,1130 @@ +{ + "comment": [ + "## Tests for setters of https://url.spec.whatwg.org/#urlutils-members", + "", + "This file contains a JSON object.", + "Other than 'comment', each key is an attribute of the `URL` interface", + "defined in WHATWG’s URL Standard.", + "The values are arrays of test case objects for that attribute.", + "", + "To run a test case for the attribute `attr`:", + "", + "* Create a new `URL` object with the value for the 'href' key", + " the constructor single parameter. (Without a base URL.)", + " This must not throw.", + "* Set the attribute `attr` to (invoke its setter with)", + " with the value of for 'new_value' key.", + "* The value for the 'expected' key is another object.", + " For each `key` / `value` pair of that object,", + " get the attribute `key` (invoke its getter).", + " The returned string must be equal to `value`.", + "", + "Note: the 'href' setter is already covered by urltestdata.json." + ], + "protocol": [ + { + "comment": "The empty string is not a valid scheme. Setter leaves the URL unchanged.", + "href": "a://example.net", + "new_value": "", + "expected": { + "href": "a://example.net/", + "protocol": "a:" + } + }, + { + "href": "a://example.net", + "new_value": "b", + "expected": { + "href": "b://example.net/", + "protocol": "b:" + } + }, + { + "comment": "Upper-case ASCII is lower-cased", + "href": "a://example.net", + "new_value": "B", + "expected": { + "href": "b://example.net/", + "protocol": "b:" + } + }, + { + "comment": "Non-ASCII is rejected", + "href": "a://example.net", + "new_value": "é", + "expected": { + "href": "a://example.net/", + "protocol": "a:" + } + }, + { + "comment": "No leading digit", + "href": "a://example.net", + "new_value": "0b", + "expected": { + "href": "a://example.net/", + "protocol": "a:" + } + }, + { + "comment": "No leading punctuation", + "href": "a://example.net", + "new_value": "+b", + "expected": { + "href": "a://example.net/", + "protocol": "a:" + } + }, + { + "href": "a://example.net", + "new_value": "bC0+-.", + "expected": { + "href": "bc0+-.://example.net/", + "protocol": "bc0+-.:" + } + }, + { + "comment": "Only some punctuation is acceptable", + "href": "a://example.net", + "new_value": "b,c", + "expected": { + "href": "a://example.net/", + "protocol": "a:" + } + }, + { + "comment": "Non-ASCII is rejected", + "href": "a://example.net", + "new_value": "bé", + "expected": { + "href": "a://example.net/", + "protocol": "a:" + } + }, + { + "comment": "Can’t switch from special scheme to non-special. Note: this may change, see https://github.com/whatwg/url/issues/104", + "href": "http://example.net", + "new_value": "b", + "expected": { + "href": "http://example.net/", + "protocol": "http:" + } + }, + { + "comment": "Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must.", + "href": "mailto:me@example.net", + "new_value": "http", + "expected": { + "href": "mailto:me@example.net", + "protocol": "mailto:" + } + }, + { + "comment": "Can’t switch from non-special scheme to special. Note: this may change, see https://github.com/whatwg/url/issues/104", + "href": "ssh://me@example.net", + "new_value": "http", + "expected": { + "href": "ssh://me@example.net/", + "protocol": "ssh:" + } + }, + { + "comment": "Stuff after the first ':' is ignored", + "href": "http://example.net", + "new_value": "https:foo : bar", + "expected": { + "href": "https://example.net/", + "protocol": "https:" + } + }, + { + "comment": "Stuff after the first ':' is ignored", + "href": "data:text/html,

Test", + "new_value": "view-source+data:foo : bar", + "expected": { + "href": "view-source+data:text/html,

Test", + "protocol": "view-source+data:" + } + } + ], + "username": [ + { + "comment": "No host means no username", + "href": "file:///home/you/index.html", + "new_value": "me", + "expected": { + "href": "file:///home/you/index.html", + "username": "" + } + }, + { + "comment": "No host means no username", + "href": "unix:/run/foo.socket", + "new_value": "me", + "expected": { + "href": "unix:/run/foo.socket", + "username": "" + } + }, + { + "comment": "Cannot-be-a-base means no username", + "href": "mailto:you@example.net", + "new_value": "me", + "expected": { + "href": "mailto:you@example.net", + "username": "" + } + }, + { + "href": "http://example.net", + "new_value": "me", + "expected": { + "href": "http://me@example.net/", + "username": "me" + } + }, + { + "href": "http://:secret@example.net", + "new_value": "me", + "expected": { + "href": "http://me:secret@example.net/", + "username": "me" + } + }, + { + "href": "http://me@example.net", + "new_value": "", + "expected": { + "href": "http://example.net/", + "username": "" + } + }, + { + "href": "http://me:secret@example.net", + "new_value": "", + "expected": { + "href": "http://:secret@example.net/", + "username": "" + } + }, + { + "comment": "UTF-8 percent encoding with the userinfo encode set.", + "href": "http://example.net", + "new_value": "\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé", + "expected": { + "href": "http://%00%01%09%0A%0D%1F%20!%22%23$%&'()*+,-.%2F09%3A%3B%3C%3D%3E%3F%40AZ%5B%5C%5D%5E_%60az%7B%7C%7D~%7F%C2%80%C2%81%C3%89%C3%A9@example.net/", + "username": "%00%01%09%0A%0D%1F%20!%22%23$%&'()*+,-.%2F09%3A%3B%3C%3D%3E%3F%40AZ%5B%5C%5D%5E_%60az%7B%7C%7D~%7F%C2%80%C2%81%C3%89%C3%A9" + } + }, + { + "comment": "Bytes already percent-encoded are left as-is.", + "href": "http://example.net", + "new_value": "%c3%89té", + "expected": { + "href": "http://%c3%89t%C3%A9@example.net/", + "username": "%c3%89t%C3%A9" + } + } + ], + "password": [ + { + "comment": "No host means no password", + "href": "file:///home/me/index.html", + "new_value": "secret", + "expected": { + "href": "file:///home/me/index.html", + "password": "" + } + }, + { + "comment": "No host means no password", + "href": "unix:/run/foo.socket", + "new_value": "secret", + "expected": { + "href": "unix:/run/foo.socket", + "password": "" + } + }, + { + "comment": "Cannot-be-a-base means no password", + "href": "mailto:me@example.net", + "new_value": "secret", + "expected": { + "href": "mailto:me@example.net", + "password": "" + } + }, + { + "href": "http://example.net", + "new_value": "secret", + "expected": { + "href": "http://:secret@example.net/", + "password": "secret" + } + }, + { + "href": "http://me@example.net", + "new_value": "secret", + "expected": { + "href": "http://me:secret@example.net/", + "password": "secret" + } + }, + { + "href": "http://:secret@example.net", + "new_value": "", + "expected": { + "href": "http://example.net/", + "password": "" + } + }, + { + "href": "http://me:secret@example.net", + "new_value": "", + "expected": { + "href": "http://me@example.net/", + "password": "" + } + }, + { + "comment": "UTF-8 percent encoding with the userinfo encode set.", + "href": "http://example.net", + "new_value": "\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé", + "expected": { + "href": "http://:%00%01%09%0A%0D%1F%20!%22%23$%&'()*+,-.%2F09%3A%3B%3C%3D%3E%3F%40AZ%5B%5C%5D%5E_%60az%7B%7C%7D~%7F%C2%80%C2%81%C3%89%C3%A9@example.net/", + "password": "%00%01%09%0A%0D%1F%20!%22%23$%&'()*+,-.%2F09%3A%3B%3C%3D%3E%3F%40AZ%5B%5C%5D%5E_%60az%7B%7C%7D~%7F%C2%80%C2%81%C3%89%C3%A9" + } + }, + { + "comment": "Bytes already percent-encoded are left as-is.", + "href": "http://example.net", + "new_value": "%c3%89té", + "expected": { + "href": "http://:%c3%89t%C3%A9@example.net/", + "password": "%c3%89t%C3%A9" + } + } + ], + "host": [ + { + "comment": "Cannot-be-a-base means no host", + "href": "mailto:me@example.net", + "new_value": "example.com", + "expected": { + "href": "mailto:me@example.net", + "host": "" + } + }, + { + "comment": "Cannot-be-a-base means no password", + "href": "data:text/plain,Stuff", + "new_value": "example.net", + "expected": { + "href": "data:text/plain,Stuff", + "host": "" + } + }, + { + "href": "http://example.net", + "new_value": "example.com:8080", + "expected": { + "href": "http://example.com:8080/", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "Port number is unchanged if not specified in the new value", + "href": "http://example.net:8080", + "new_value": "example.com", + "expected": { + "href": "http://example.com:8080/", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "Port number is unchanges if empty in the new value. Note: this may change, see https://github.com/whatwg/url/pull/113", + "href": "http://example.net:8080", + "new_value": "example.com:", + "expected": { + "href": "http://example.com:8080/", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "The empty host is not valid for special schemes", + "href": "http://example.net", + "new_value": "", + "expected": { + "href": "http://example.net/", + "host": "example.net" + } + }, + { + "comment": "The empty host is OK for non-special schemes", + "href": "view-source+http://example.net/foo", + "new_value": "", + "expected": { + "href": "view-source+http:///foo", + "host": "" + } + }, + { + "comment": "Path-only URLs can gain a host", + "href": "a:/foo", + "new_value": "example.net", + "expected": { + "href": "a://example.net/foo", + "host": "example.net" + } + }, + { + "comment": "IPv4 address syntax is normalized", + "href": "http://example.net", + "new_value": "0x7F000001:8080", + "expected": { + "href": "http://127.0.0.1:8080/", + "host": "127.0.0.1:8080", + "hostname": "127.0.0.1", + "port": "8080" + } + }, + { + "comment": "IPv6 address syntax is normalized", + "href": "http://example.net", + "new_value": "[::0:01]:2", + "expected": { + "href": "http://[::1]:2/", + "host": "[::1]:2", + "hostname": "[::1]", + "port": "2" + } + }, + { + "comment": "Default port number is removed", + "href": "http://example.net", + "new_value": "example.com:80", + "expected": { + "href": "http://example.com/", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "Default port number is removed", + "href": "https://example.net", + "new_value": "example.com:443", + "expected": { + "href": "https://example.com/", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "Default port number is only removed for the relevant scheme", + "href": "https://example.net", + "new_value": "example.com:80", + "expected": { + "href": "https://example.com:80/", + "host": "example.com:80", + "hostname": "example.com", + "port": "80" + } + }, + { + "comment": "Stuff after a / delimiter is ignored", + "href": "http://example.net/path", + "new_value": "example.com/stuff", + "expected": { + "href": "http://example.com/path", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "Stuff after a / delimiter is ignored", + "href": "http://example.net/path", + "new_value": "example.com:8080/stuff", + "expected": { + "href": "http://example.com:8080/path", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "Stuff after a ? delimiter is ignored", + "href": "http://example.net/path", + "new_value": "example.com?stuff", + "expected": { + "href": "http://example.com/path", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "Stuff after a ? delimiter is ignored", + "href": "http://example.net/path", + "new_value": "example.com:8080?stuff", + "expected": { + "href": "http://example.com:8080/path", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "Stuff after a # delimiter is ignored", + "href": "http://example.net/path", + "new_value": "example.com#stuff", + "expected": { + "href": "http://example.com/path", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "Stuff after a # delimiter is ignored", + "href": "http://example.net/path", + "new_value": "example.com:8080#stuff", + "expected": { + "href": "http://example.com:8080/path", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "Stuff after a \\ delimiter is ignored for special schemes", + "href": "http://example.net/path", + "new_value": "example.com\\stuff", + "expected": { + "href": "http://example.com/path", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "Stuff after a \\ delimiter is ignored for special schemes", + "href": "http://example.net/path", + "new_value": "example.com:8080\\stuff", + "expected": { + "href": "http://example.com:8080/path", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "\\ is not a delimiter for non-special schemes, and it’s invalid in a domain", + "href": "view-source+http://example.net/path", + "new_value": "example.com\\stuff", + "expected": { + "href": "view-source+http://example.net/path", + "host": "example.net", + "hostname": "example.net", + "port": "" + } + }, + { + "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error", + "href": "view-source+http://example.net/path", + "new_value": "example.com:8080stuff2", + "expected": { + "href": "view-source+http://example.com:8080/path", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error", + "href": "http://example.net/path", + "new_value": "example.com:8080stuff2", + "expected": { + "href": "http://example.com:8080/path", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error", + "href": "http://example.net/path", + "new_value": "example.com:8080+2", + "expected": { + "href": "http://example.com:8080/path", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "Port numbers are 16 bit integers", + "href": "http://example.net/path", + "new_value": "example.com:65535", + "expected": { + "href": "http://example.com:65535/path", + "host": "example.com:65535", + "hostname": "example.com", + "port": "65535" + } + }, + { + "comment": "Port numbers are 16 bit integers, overflowing is an error. Hostname is still set, though.", + "href": "http://example.net/path", + "new_value": "example.com:65536", + "expected": { + "href": "http://example.com/path", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + } + ], + "hostname": [ + { + "comment": "Cannot-be-a-base means no host", + "href": "mailto:me@example.net", + "new_value": "example.com", + "expected": { + "href": "mailto:me@example.net", + "host": "" + } + }, + { + "comment": "Cannot-be-a-base means no password", + "href": "data:text/plain,Stuff", + "new_value": "example.net", + "expected": { + "href": "data:text/plain,Stuff", + "host": "" + } + }, + { + "href": "http://example.net:8080", + "new_value": "example.com", + "expected": { + "href": "http://example.com:8080/", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "The empty host is not valid for special schemes", + "href": "http://example.net", + "new_value": "", + "expected": { + "href": "http://example.net/", + "host": "example.net" + } + }, + { + "comment": "The empty host is OK for non-special schemes", + "href": "view-source+http://example.net/foo", + "new_value": "", + "expected": { + "href": "view-source+http:///foo", + "host": "" + } + }, + { + "comment": "Path-only URLs can gain a host", + "href": "a:/foo", + "new_value": "example.net", + "expected": { + "href": "a://example.net/foo", + "host": "example.net" + } + }, + { + "comment": "IPv4 address syntax is normalized", + "href": "http://example.net:8080", + "new_value": "0x7F000001", + "expected": { + "href": "http://127.0.0.1:8080/", + "host": "127.0.0.1:8080", + "hostname": "127.0.0.1", + "port": "8080" + } + }, + { + "comment": "IPv6 address syntax is normalized", + "href": "http://example.net", + "new_value": "[::0:01]", + "expected": { + "href": "http://[::1]/", + "host": "[::1]", + "hostname": "[::1]", + "port": "" + } + }, + { + "comment": "Stuff after a : delimiter is ignored", + "href": "http://example.net/path", + "new_value": "example.com:8080", + "expected": { + "href": "http://example.com/path", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "Stuff after a : delimiter is ignored", + "href": "http://example.net:8080/path", + "new_value": "example.com:", + "expected": { + "href": "http://example.com:8080/path", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080" + } + }, + { + "comment": "Stuff after a / delimiter is ignored", + "href": "http://example.net/path", + "new_value": "example.com/stuff", + "expected": { + "href": "http://example.com/path", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "Stuff after a ? delimiter is ignored", + "href": "http://example.net/path", + "new_value": "example.com?stuff", + "expected": { + "href": "http://example.com/path", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "Stuff after a # delimiter is ignored", + "href": "http://example.net/path", + "new_value": "example.com#stuff", + "expected": { + "href": "http://example.com/path", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "Stuff after a \\ delimiter is ignored for special schemes", + "href": "http://example.net/path", + "new_value": "example.com\\stuff", + "expected": { + "href": "http://example.com/path", + "host": "example.com", + "hostname": "example.com", + "port": "" + } + }, + { + "comment": "\\ is not a delimiter for non-special schemes, and it’s invalid in a domain", + "href": "view-source+http://example.net/path", + "new_value": "example.com\\stuff", + "expected": { + "href": "view-source+http://example.net/path", + "host": "example.net", + "hostname": "example.net", + "port": "" + } + } + ], + "port": [ + { + "href": "http://example.net", + "new_value": "8080", + "expected": { + "href": "http://example.net:8080/", + "host": "example.net:8080", + "hostname": "example.net", + "port": "8080" + } + }, + { + "comment": "Port number is unchanged if empty in the new value. Note: this may change, see https://github.com/whatwg/url/pull/113", + "href": "http://example.net:8080", + "new_value": "", + "expected": { + "href": "http://example.net:8080/", + "host": "example.net:8080", + "hostname": "example.net", + "port": "8080" + } + }, + { + "comment": "Default port number is removed", + "href": "http://example.net:8080", + "new_value": "80", + "expected": { + "href": "http://example.net/", + "host": "example.net", + "hostname": "example.net", + "port": "" + } + }, + { + "comment": "Default port number is removed", + "href": "https://example.net:4433", + "new_value": "443", + "expected": { + "href": "https://example.net/", + "host": "example.net", + "hostname": "example.net", + "port": "" + } + }, + { + "comment": "Default port number is only removed for the relevant scheme", + "href": "https://example.net", + "new_value": "80", + "expected": { + "href": "https://example.net:80/", + "host": "example.net:80", + "hostname": "example.net", + "port": "80" + } + }, + { + "comment": "Stuff after a / delimiter is ignored", + "href": "http://example.net/path", + "new_value": "8080/stuff", + "expected": { + "href": "http://example.net:8080/path", + "host": "example.net:8080", + "hostname": "example.net", + "port": "8080" + } + }, + { + "comment": "Stuff after a ? delimiter is ignored", + "href": "http://example.net/path", + "new_value": "8080?stuff", + "expected": { + "href": "http://example.net:8080/path", + "host": "example.net:8080", + "hostname": "example.net", + "port": "8080" + } + }, + { + "comment": "Stuff after a # delimiter is ignored", + "href": "http://example.net/path", + "new_value": "8080#stuff", + "expected": { + "href": "http://example.net:8080/path", + "host": "example.net:8080", + "hostname": "example.net", + "port": "8080" + } + }, + { + "comment": "Stuff after a \\ delimiter is ignored for special schemes", + "href": "http://example.net/path", + "new_value": "8080\\stuff", + "expected": { + "href": "http://example.net:8080/path", + "host": "example.net:8080", + "hostname": "example.net", + "port": "8080" + } + }, + { + "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error", + "href": "view-source+http://example.net/path", + "new_value": "8080stuff2", + "expected": { + "href": "view-source+http://example.net:8080/path", + "host": "example.net:8080", + "hostname": "example.net", + "port": "8080" + } + }, + { + "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error", + "href": "http://example.net/path", + "new_value": "8080stuff2", + "expected": { + "href": "http://example.net:8080/path", + "host": "example.net:8080", + "hostname": "example.net", + "port": "8080" + } + }, + { + "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error", + "href": "http://example.net/path", + "new_value": "8080+2", + "expected": { + "href": "http://example.net:8080/path", + "host": "example.net:8080", + "hostname": "example.net", + "port": "8080" + } + }, + { + "comment": "Port numbers are 16 bit integers", + "href": "http://example.net/path", + "new_value": "65535", + "expected": { + "href": "http://example.net:65535/path", + "host": "example.net:65535", + "hostname": "example.net", + "port": "65535" + } + }, + { + "comment": "Port numbers are 16 bit integers, overflowing is an error", + "href": "http://example.net:8080/path", + "new_value": "65536", + "expected": { + "href": "http://example.net:8080/path", + "host": "example.net:8080", + "hostname": "example.net", + "port": "8080" + } + } + ], + "pathname": [ + { + "comment": "Cannot-be-a-base don’t have a path", + "href": "mailto:me@example.net", + "new_value": "/foo", + "expected": { + "href": "mailto:me@example.net", + "pathname": "me@example.net" + } + }, + { + "href": "unix:/run/foo.socket?timeout=10", + "new_value": "/var/log/../run/bar.socket", + "expected": { + "href": "unix:/var/run/bar.socket?timeout=10", + "pathname": "/var/run/bar.socket" + } + }, + { + "href": "https://example.net#nav", + "new_value": "home", + "expected": { + "href": "https://example.net/home#nav", + "pathname": "/home" + } + }, + { + "href": "https://example.net#nav", + "new_value": "../home", + "expected": { + "href": "https://example.net/home#nav", + "pathname": "/home" + } + }, + { + "comment": "\\ is a segment delimiter for 'special' URLs", + "href": "http://example.net/home?lang=fr#nav", + "new_value": "\\a\\%2E\\b\\%2e.\\c", + "expected": { + "href": "http://example.net/a/c?lang=fr#nav", + "pathname": "/a/c" + } + }, + { + "comment": "\\ is *not* a segment delimiter for non-'special' URLs", + "href": "view-source+http://example.net/home?lang=fr#nav", + "new_value": "\\a\\%2E\\b\\%2e.\\c", + "expected": { + "href": "view-source+http://example.net/\\a\\.\\b\\..\\c?lang=fr#nav", + "pathname": "/\\a\\.\\b\\..\\c" + } + }, + { + "comment": "UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.", + "href": "a:/", + "new_value": "\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé", + "expected": { + "href": "a:/%00%01%1F%20!%22%23$%&'()*+,-./09:;%3C=%3E%3F@AZ[\\]^_%60az%7B|%7D~%7F%C2%80%C2%81%C3%89%C3%A9", + "pathname": "/%00%01%1F%20!%22%23$%&'()*+,-./09:;%3C=%3E%3F@AZ[\\]^_%60az%7B|%7D~%7F%C2%80%C2%81%C3%89%C3%A9" + } + }, + { + "comment": "Bytes already percent-encoded are left as-is, except %2E.", + "href": "http://example.net", + "new_value": "%2e%2E%c3%89té", + "expected": { + "href": "http://example.net/..%c3%89t%C3%A9", + "pathname": "/..%c3%89t%C3%A9" + } + } + ], + "search": [ + { + "href": "https://example.net#nav", + "new_value": "lang=fr", + "expected": { + "href": "https://example.net/?lang=fr#nav", + "search": "?lang=fr" + } + }, + { + "href": "https://example.net?lang=en-US#nav", + "new_value": "lang=fr", + "expected": { + "href": "https://example.net/?lang=fr#nav", + "search": "?lang=fr" + } + }, + { + "href": "https://example.net?lang=en-US#nav", + "new_value": "?lang=fr", + "expected": { + "href": "https://example.net/?lang=fr#nav", + "search": "?lang=fr" + } + }, + { + "href": "https://example.net?lang=en-US#nav", + "new_value": "??lang=fr", + "expected": { + "href": "https://example.net/??lang=fr#nav", + "search": "??lang=fr" + } + }, + { + "href": "https://example.net?lang=en-US#nav", + "new_value": "?", + "expected": { + "href": "https://example.net/?#nav", + "search": "" + } + }, + { + "href": "https://example.net?lang=en-US#nav", + "new_value": "", + "expected": { + "href": "https://example.net/#nav", + "search": "" + } + }, + { + "href": "https://example.net?lang=en-US", + "new_value": "", + "expected": { + "href": "https://example.net/", + "search": "" + } + }, + { + "href": "https://example.net", + "new_value": "", + "expected": { + "href": "https://example.net/", + "search": "" + } + }, + { + "comment": "UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.", + "href": "a:/", + "new_value": "\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé", + "expected": { + "href": "a:/?%00%01%1F%20!%22%23$%&'()*+,-./09:;%3C=%3E?@AZ[\\]^_`az{|}~%7F%C2%80%C2%81%C3%89%C3%A9", + "search": "?%00%01%1F%20!%22%23$%&'()*+,-./09:;%3C=%3E?@AZ[\\]^_`az{|}~%7F%C2%80%C2%81%C3%89%C3%A9" + } + }, + { + "comment": "Bytes already percent-encoded are left as-is", + "href": "http://example.net", + "new_value": "%c3%89té", + "expected": { + "href": "http://example.net/?%c3%89t%C3%A9", + "search": "?%c3%89t%C3%A9" + } + } + ], + "hash": [ + { + "href": "https://example.net", + "new_value": "main", + "expected": { + "href": "https://example.net/#main", + "hash": "#main" + } + }, + { + "href": "https://example.net#nav", + "new_value": "main", + "expected": { + "href": "https://example.net/#main", + "hash": "#main" + } + }, + { + "href": "https://example.net?lang=en-US", + "new_value": "##nav", + "expected": { + "href": "https://example.net/?lang=en-US##nav", + "hash": "##nav" + } + }, + { + "href": "https://example.net?lang=en-US#nav", + "new_value": "#main", + "expected": { + "href": "https://example.net/?lang=en-US#main", + "hash": "#main" + } + }, + { + "href": "https://example.net?lang=en-US#nav", + "new_value": "#", + "expected": { + "href": "https://example.net/?lang=en-US#", + "hash": "" + } + }, + { + "href": "https://example.net?lang=en-US#nav", + "new_value": "", + "expected": { + "href": "https://example.net/?lang=en-US", + "hash": "" + } + }, + { + "comment": "No percent-encoding at all (!); nuls, tabs, and newlines are removed", + "href": "a:/", + "new_value": "\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé", + "expected": { + "href": "a:/#\u0001\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé", + "hash": "#\u0001\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé" + } + }, + { + "comment": "Bytes already percent-encoded are left as-is", + "href": "http://example.net", + "new_value": "%c3%89té", + "expected": { + "href": "http://example.net/#%c3%89té", + "hash": "#%c3%89té" + } + } + ] +} diff --git a/tests/wpt/web-platform-tests/url/url-constructor.html b/tests/wpt/web-platform-tests/url/url-constructor.html index f47fa358a06..8eacce6542f 100644 --- a/tests/wpt/web-platform-tests/url/url-constructor.html +++ b/tests/wpt/web-platform-tests/url/url-constructor.html @@ -2,7 +2,6 @@ -

+ +
+ diff --git a/tests/wpt/web-platform-tests/url/urltestdata.json b/tests/wpt/web-platform-tests/url/urltestdata.json index ee5416ecf23..ef917241b8a 100644 --- a/tests/wpt/web-platform-tests/url/urltestdata.json +++ b/tests/wpt/web-platform-tests/url/urltestdata.json @@ -4273,5 +4273,43 @@ "search": "??a=b&c=d", "searchParams": "%3Fa=b&c=d", "hash": "" + }, + "# Scheme only", + { + "input": "http:", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "", + "searchParams": "", + "hash": "" + }, + { + "input": "http:", + "base": "https://example.org/foo/bar", + "failure": true + }, + { + "input": "sc:", + "base": "https://example.org/foo/bar", + "href": "sc:", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "", + "search": "", + "searchParams": "", + "hash": "" } ] diff --git a/tests/wpt/web-platform-tests/web-animations/README.md b/tests/wpt/web-platform-tests/web-animations/README.md index 7afc875a1ff..ca01178a982 100644 --- a/tests/wpt/web-platform-tests/web-animations/README.md +++ b/tests/wpt/web-platform-tests/web-animations/README.md @@ -1,4 +1,107 @@ -Web Animations Tests -==================== +Web Animations Test Suite +========================= -Specification: http://w3c.github.io/web-animations/ +Specification: https://w3c.github.io/web-animations/ + + +Guidelines for writing tests +---------------------------- + +* Try to follow the spec outline where possible. + + For example, if you want to test setting the start time, you might be + tempted to put all the tests in: + + > `/web-animations/Animation/startTime.html` + + However, in the spec most of the logic is in the “Set the animation + start time“ procedure in the “Timing model” section. + + Instead, try something like: + + > * `/web-animations/timing-model/animation/set-the-animation-start-time.html`
+ > Tests all the branches and inputs to the procedure as defined in the + > spec (using the `Animation.startTime` API). + > * `/web-animations/Animation/startTime.html`
+ > Tests API-layer specific issues like mapping unresolved values to + > null, etc. + + On that note, two levels of subdirectories is enough even if the spec has + deeper nesting. + + Note that most of the existing tests in the suite _don't_ do this well yet. + That's the direction we're heading, however. + +* Test the spec. + + * If the spec defines a timing calculation that is directly + reflected in the iteration progress + (i.e. `anim.effect.getComputedTiming().progress`), test that instead + of calling `getComputedStyle(elem).marginLeft`. + + * Likewise, don't add needless tests for `anim.playbackState`. + The playback state is a calculated value based on other values. + It's rarely necessary to test directly unless you need, for example, + to check that a pending task is scheduled (which isn't observable + elsewhere other than waiting for the corresponding promise to + complete). + +* Try to keep tests as simple and focused as possible. + + e.g. + + ```javascript + test(function(t) { + var anim = createDiv(t).animate(null); + assert_class_string(anim, 'Animation', 'Returned object is an Animation'); + }, 'Element.animate() creates an Animation object'); + ``` + + ```javascript + test(function(t) { + assert_throws({ name: 'TypeError' }, function() { + createDiv(t).animate(null, -1); + }); + }, 'Setting a negative duration throws a TypeError'); + ``` + + ```javascript + promise_test(function(t) { + var animation = createDiv(t).animate(null, 100 * MS_PER_SEC); + return animation.ready.then(function() { + assert_greater_than(animation.startTime, 0, 'startTime when running'); + }); + }, 'startTime is resolved when running'); + ``` + + If you're generating complex test loops and factoring out utility functions + that affect the logic of the test (other than, say, simple assertion utility + functions), you're probably doing it wrong. + + It should be possible to understand exactly what the test is doing at a + glance without having to scroll up and down the test file and refer to + other files. + + See Justin Searls' presentation, [“How to stop hating your + tests”](http://blog.testdouble.com/posts/2015-11-16-how-to-stop-hating-your-tests.html) + for some tips on making your tests simpler. + +* Assume tests will run on under-performing hardware where the time between + animation frames might run into 10s of seconds. + As a result, animations that are expected to still be running during + the test should be at least 100s in length. + +* Avoid using `GLOBAL_CONSTS` that make the test harder to read. + It's fine to repeat the the same parameter values like `100 * MS_PER_SEC` + over and over again since it makes it easy to read and debug a test in + isolation. + Remember, even if we do need to make all tests take, say 200s each, text + editors are very good at search and replace. + +* Use the `assert_times_equal` assertion for comparing calculated times. + It tests times are equal using the precision recommended in the spec whilst + allowing implementations to override the function to meet their own + precision requirements. + +* There are quite a few bad tests in the repository. We're learning as + we go. Don't just copy them blindly—please fix them! diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/not-animatable.html b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/not-animatable.html deleted file mode 100644 index 653c78036e4..00000000000 --- a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/not-animatable.html +++ /dev/null @@ -1,120 +0,0 @@ - - -Tests for not animatable properties - - - - - -
- diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/keyframes/effect-value-context.html b/tests/wpt/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context.html similarity index 100% rename from tests/wpt/web-platform-tests/web-animations/animation-model/keyframes/effect-value-context.html rename to tests/wpt/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context.html diff --git a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/keyframe-handling.html b/tests/wpt/web-platform-tests/web-animations/animation-model/keyframe-effects/the-effect-value-of-a-keyframe-effect.html similarity index 97% rename from tests/wpt/web-platform-tests/web-animations/keyframe-effect/keyframe-handling.html rename to tests/wpt/web-platform-tests/web-animations/animation-model/keyframe-effects/the-effect-value-of-a-keyframe-effect.html index de9b7c7ec21..eb67f669acd 100644 --- a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/keyframe-handling.html +++ b/tests/wpt/web-platform-tests/web-animations/animation-model/keyframe-effects/the-effect-value-of-a-keyframe-effect.html @@ -2,10 +2,9 @@ Keyframe handling tests - - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animatable/animate.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html similarity index 94% rename from tests/wpt/web-platform-tests/web-animations/animatable/animate.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html index 71aa6e16d2f..ced7d1a5b96 100644 --- a/tests/wpt/web-platform-tests/web-animations/animatable/animate.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html @@ -4,8 +4,8 @@ - - + +
- +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/constructor.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/constructor.html similarity index 98% rename from tests/wpt/web-platform-tests/web-animations/animation/constructor.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/constructor.html index 12f2a01fde2..10f99e96c7f 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/constructor.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/constructor.html @@ -5,7 +5,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/finish.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/finish.html similarity index 99% rename from tests/wpt/web-platform-tests/web-animations/animation/finish.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/finish.html index 811923c6798..7d3cacdbaca 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/finish.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/finish.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/finished.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/finished.html similarity index 99% rename from tests/wpt/web-platform-tests/web-animations/animation/finished.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/finished.html index 716fa9571b8..3817ea74f2b 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/finished.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/finished.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/id.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/id.html similarity index 94% rename from tests/wpt/web-platform-tests/web-animations/animation/id.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/id.html index 65e10922697..9f8737d7eb3 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/id.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/id.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/oncancel.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/oncancel.html similarity index 95% rename from tests/wpt/web-platform-tests/web-animations/animation/oncancel.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/oncancel.html index 43f327b76f0..41a437ebdc6 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/oncancel.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/oncancel.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/onfinish.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/onfinish.html similarity index 98% rename from tests/wpt/web-platform-tests/web-animations/animation/onfinish.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/onfinish.html index 459a54bc7ca..8e52a0e8606 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/onfinish.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/onfinish.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/pause.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html similarity index 98% rename from tests/wpt/web-platform-tests/web-animations/animation/pause.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html index 0b2c327786c..bc03c86920a 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/pause.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/play.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html similarity index 96% rename from tests/wpt/web-platform-tests/web-animations/animation/play.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html index 4fca2548cf8..58801469f63 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/play.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/playState.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/playState.html similarity index 97% rename from tests/wpt/web-platform-tests/web-animations/animation/playState.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/playState.html index 670452da9f1..403b3cece37 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/playState.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/playState.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/playbackRate.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html similarity index 98% rename from tests/wpt/web-platform-tests/web-animations/animation/playbackRate.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html index 2b6c9e1292e..d86c3fcbe73 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/playbackRate.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/ready.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/ready.html similarity index 98% rename from tests/wpt/web-platform-tests/web-animations/animation/ready.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/ready.html index cea946c1429..8623a24a02f 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/ready.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/ready.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/reverse.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/reverse.html similarity index 99% rename from tests/wpt/web-platform-tests/web-animations/animation/reverse.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/reverse.html index 3731cf51804..fd0926c2e35 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/reverse.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/reverse.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation/startTime.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/startTime.html similarity index 97% rename from tests/wpt/web-platform-tests/web-animations/animation/startTime.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Animation/startTime.html index 642f8e10508..be5011eb6e5 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation/startTime.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/startTime.html @@ -5,7 +5,7 @@ href="https://w3c.github.io/web-animations/#dom-animation-starttime"> - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/delay.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/delay.html similarity index 98% rename from tests/wpt/web-platform-tests/web-animations/animation-effect-timing/delay.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/delay.html index 82761cf85b6..eceac15af8c 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/delay.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/delay.html @@ -5,7 +5,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/direction.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/direction.html similarity index 95% rename from tests/wpt/web-platform-tests/web-animations/animation-effect-timing/direction.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/direction.html index 454f13604c9..7ce63ffcc07 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/direction.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/direction.html @@ -5,7 +5,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/duration.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html similarity index 99% rename from tests/wpt/web-platform-tests/web-animations/animation-effect-timing/duration.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html index 930cc9f74af..8e2a1a1b972 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/duration.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html @@ -5,7 +5,7 @@ - +
- - + +
- +
- +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/getAnimations.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getAnimations.html similarity index 98% rename from tests/wpt/web-platform-tests/web-animations/animation-effect-timing/getAnimations.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getAnimations.html index d4d9e32b5fa..d96192c9d01 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/getAnimations.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getAnimations.html @@ -5,7 +5,7 @@ - +
- +
- +
- +
diff --git a/tests/wpt/web-platform-tests/web-animations/animation-timeline/document-timeline.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html similarity index 100% rename from tests/wpt/web-platform-tests/web-animations/animation-timeline/document-timeline.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html diff --git a/tests/wpt/web-platform-tests/web-animations/animation-timeline/idlharness.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/idlharness.html similarity index 100% rename from tests/wpt/web-platform-tests/web-animations/animation-timeline/idlharness.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/idlharness.html diff --git a/tests/wpt/web-platform-tests/web-animations/document/getAnimations.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Document/getAnimations.html similarity index 97% rename from tests/wpt/web-platform-tests/web-animations/document/getAnimations.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/Document/getAnimations.html index a2a3352cbcd..e87751c04b2 100644 --- a/tests/wpt/web-platform-tests/web-animations/document/getAnimations.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Document/getAnimations.html @@ -4,7 +4,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/constructor.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html similarity index 86% rename from tests/wpt/web-platform-tests/web-animations/keyframe-effect/constructor.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html index 4acffcbf296..97c7613f847 100644 --- a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/constructor.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html @@ -4,8 +4,8 @@ - - + +
@@ -21,7 +21,8 @@ var target = document.getElementById("target"); test(function(t) { gEmptyKeyframeListTests.forEach(function(frames) { - assert_equals(new KeyframeEffectReadOnly(target, frames).getFrames().length, + assert_equals(new KeyframeEffectReadOnly(target, frames) + .getKeyframes().length, 0, "number of frames for " + JSON.stringify(frames)); }); }, "a KeyframeEffectReadOnly can be constructed with no frames"); @@ -34,7 +35,7 @@ test(function(t) { left: ["10px", "20px"], easing: easing }); - assert_equals(effect.getFrames()[0].easing, expected, + assert_equals(effect.getKeyframes()[0].easing, expected, "resulting easing for '" + easing + "'"); }); }, "easing values are parsed correctly when passed to the " + @@ -48,7 +49,7 @@ test(function(t) { { offset: 0, left: "10px", easing: easing }, { offset: 1, left: "20px" } ]); - assert_equals(effect.getFrames()[0].easing, expected, + assert_equals(effect.getKeyframes()[0].easing, expected, "resulting easing for '" + easing + "'"); }); }, "easing values are parsed correctly when passed to the " + @@ -68,37 +69,37 @@ test(function(t) { "KeyframeEffectReadOnly constructor in KeyframeTimingOptions"); test(function(t) { - var getFrame = function(composite) { + var getKeyframe = function(composite) { return { left: [ "10px", "20px" ], composite: composite }; }; gGoodKeyframeCompositeValueTests.forEach(function(composite) { - var effect = new KeyframeEffectReadOnly(target, getFrame(composite)); - assert_equals(effect.getFrames()[0].composite, composite, + var effect = new KeyframeEffectReadOnly(target, getKeyframe(composite)); + assert_equals(effect.getKeyframes()[0].composite, composite, "resulting composite for '" + composite + "'"); }); gBadCompositeValueTests.forEach(function(composite) { assert_throws(new TypeError, function() { - new KeyframeEffectReadOnly(target, getFrame(composite)); + new KeyframeEffectReadOnly(target, getKeyframe(composite)); }); }); }, "composite values are parsed correctly when passed to the " + "KeyframeEffectReadOnly constructor in property-indexed keyframes"); test(function(t) { - var getFrames = function(composite) { + var getKeyframes = function(composite) { return [ { offset: 0, left: "10px", composite: composite }, { offset: 1, left: "20px" } ]; }; gGoodKeyframeCompositeValueTests.forEach(function(composite) { - var effect = new KeyframeEffectReadOnly(target, getFrames(composite)); - assert_equals(effect.getFrames()[0].composite, composite, + var effect = new KeyframeEffectReadOnly(target, getKeyframes(composite)); + assert_equals(effect.getKeyframes()[0].composite, composite, "resulting composite for '" + composite + "'"); }); gBadCompositeValueTests.forEach(function(composite) { assert_throws(new TypeError, function() { - new KeyframeEffectReadOnly(target, getFrames(composite)); + new KeyframeEffectReadOnly(target, getKeyframes(composite)); }); }); }, "composite values are parsed correctly when passed to the " + @@ -109,7 +110,7 @@ test(function(t) { var effect = new KeyframeEffectReadOnly(target, { left: ["10px", "20px"] }, { composite: composite }); - assert_equals(effect.getFrames()[0].composite, composite, + assert_equals(effect.getKeyframes()[0].composite, composite, "resulting composite for '" + composite + "'"); }); gBadCompositeValueTests.forEach(function(composite) { @@ -125,13 +126,15 @@ test(function(t) { gPropertyIndexedKeyframesTests.forEach(function(subtest) { test(function(t) { var effect = new KeyframeEffectReadOnly(target, subtest.input); - assert_frame_lists_equal(effect.getFrames(), subtest.output); + assert_frame_lists_equal(effect.getKeyframes(), subtest.output); }, "a KeyframeEffectReadOnly can be constructed with " + subtest.desc); test(function(t) { var effect = new KeyframeEffectReadOnly(target, subtest.input); - var secondEffect = new KeyframeEffectReadOnly(target, effect.getFrames()); - assert_frame_lists_equal(secondEffect.getFrames(), effect.getFrames()); + var secondEffect = + new KeyframeEffectReadOnly(target, effect.getKeyframes()); + assert_frame_lists_equal(secondEffect.getKeyframes(), + effect.getKeyframes()); }, "a KeyframeEffectReadOnly constructed with " + subtest.desc + " roundtrips"); }); @@ -159,13 +162,15 @@ test(function(t) { gKeyframeSequenceTests.forEach(function(subtest) { test(function(t) { var effect = new KeyframeEffectReadOnly(target, subtest.input); - assert_frame_lists_equal(effect.getFrames(), subtest.output); + assert_frame_lists_equal(effect.getKeyframes(), subtest.output); }, "a KeyframeEffectReadOnly can be constructed with " + subtest.desc); test(function(t) { var effect = new KeyframeEffectReadOnly(target, subtest.input); - var secondEffect = new KeyframeEffectReadOnly(target, effect.getFrames()); - assert_frame_lists_equal(secondEffect.getFrames(), effect.getFrames()); + var secondEffect = + new KeyframeEffectReadOnly(target, effect.getKeyframes()); + assert_frame_lists_equal(secondEffect.getKeyframes(), + effect.getKeyframes()); }, "a KeyframeEffectReadOnly constructed with " + subtest.desc + " roundtrips"); }); diff --git a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/effect-easing.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing.html similarity index 99% rename from tests/wpt/web-platform-tests/web-animations/keyframe-effect/effect-easing.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing.html index 81e834e2e50..5526eed7e4c 100644 --- a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/effect-easing.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing.html @@ -5,8 +5,8 @@ - - + +
diff --git a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/getComputedTiming.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/getComputedTiming.html similarity index 97% rename from tests/wpt/web-platform-tests/web-animations/keyframe-effect/getComputedTiming.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/getComputedTiming.html index d1b59cfd91a..f3370aabd7c 100644 --- a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/getComputedTiming.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/getComputedTiming.html @@ -5,7 +5,7 @@ - +
@@ -141,9 +141,6 @@ var gActiveDurationTests = [ { desc: "an infinite duration and infinite iteration count", input: { duration: Infinity, iterations: Infinity }, expected: Infinity }, - { desc: "an infinite duration and zero iteration count", - input: { duration: Infinity, iterations: 0 }, - expected: 0 } ]; gActiveDurationTests.forEach(function(stest) { diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html new file mode 100644 index 00000000000..d0ee1bdeab2 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html @@ -0,0 +1,89 @@ + + +KeyframeEffectReadOnly constructor tests + + + + + +
+
+ diff --git a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/setFrames.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html similarity index 68% rename from tests/wpt/web-platform-tests/web-animations/keyframe-effect/setFrames.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html index 5564a9e47ca..c951411de4e 100644 --- a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/setFrames.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html @@ -1,11 +1,11 @@ -KeyframeEffect setFrames() tests - +KeyframeEffect setKeyframes() tests + - - + +
@@ -17,24 +17,24 @@ var target = document.getElementById('target'); test(function(t) { gEmptyKeyframeListTests.forEach(function(frame) { var effect = new KeyframeEffect(target, {}); - effect.setFrames(frame); - assert_frame_lists_equal(effect.getFrames(), []); + effect.setKeyframes(frame); + assert_frame_lists_equal(effect.getKeyframes(), []); }); }, 'Keyframes can be replaced with an empty keyframe'); gPropertyIndexedKeyframesTests.forEach(function(subtest) { test(function(t) { var effect = new KeyframeEffect(target, {}); - effect.setFrames(subtest.input); - assert_frame_lists_equal(effect.getFrames(), subtest.output); + effect.setKeyframes(subtest.input); + assert_frame_lists_equal(effect.getKeyframes(), subtest.output); }, 'Keyframes can be replaced with ' + subtest.desc); }); gKeyframeSequenceTests.forEach(function(subtest) { test(function(t) { var effect = new KeyframeEffect(target, {}); - effect.setFrames(subtest.input); - assert_frame_lists_equal(effect.getFrames(), subtest.output); + effect.setKeyframes(subtest.input); + assert_frame_lists_equal(effect.getKeyframes(), subtest.output); }, 'Keyframes can be replaced with ' + subtest.desc); }); @@ -42,7 +42,7 @@ gInvalidKeyframesTests.forEach(function(subtest) { test(function(t) { var effect = new KeyframeEffect(target, {}); assert_throws(subtest.expected, function() { - effect.setFrames(subtest.input); + effect.setKeyframes(subtest.input); }); }, 'KeyframeEffect constructor throws with ' + subtest.desc); }); diff --git a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/setTarget.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/setTarget.html similarity index 98% rename from tests/wpt/web-platform-tests/web-animations/keyframe-effect/setTarget.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/setTarget.html index e6be42e4f3f..49ef8402d90 100644 --- a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/setTarget.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/setTarget.html @@ -5,7 +5,7 @@ href="https://w3c.github.io/web-animations/#dom-keyframeeffect-target"> - +