Auto merge of #24078 - servo-wpt-sync:wpt_update_28-08-2019, r=servo-wpt-sync

Sync WPT with upstream (28-08-2019)

Automated downstream sync of changes from upstream as of 28-08-2019.
[no-wpt-sync]

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/24078)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2019-08-28 12:38:43 -04:00 committed by GitHub
commit 2a8cd0f006
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
120 changed files with 3588 additions and 1362 deletions

View file

@ -34,6 +34,3 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
[Revoke blob URL after calling fetch, fetch should succeed]
expected: FAIL

File diff suppressed because it is too large Load diff

View file

@ -1,2 +0,0 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

@ -0,0 +1,131 @@
[idlharness.any.worker.html]
[AbortController interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[Event interface: new CustomEvent("foo") must inherit property "srcElement" with the proper type]
expected: FAIL
[Event interface: new Event("foo") must inherit property "composed" with the proper type]
expected: FAIL
[EventTarget interface: new AbortController().signal must inherit property "addEventListener(DOMString, EventListener, [object Object\],[object Object\])" with the proper type]
expected: FAIL
[Event interface: operation composedPath()]
expected: FAIL
[AbortSignal must be primary interface of new AbortController().signal]
expected: FAIL
[AbortController interface object name]
expected: FAIL
[Event interface: new Event("foo") must inherit property "srcElement" with the proper type]
expected: FAIL
[Event interface: attribute composed]
expected: FAIL
[AbortSignal interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[AbortController interface: existence and properties of interface prototype object]
expected: FAIL
[Stringification of new AbortController().signal]
expected: FAIL
[AbortSignal interface: existence and properties of interface object]
expected: FAIL
[CustomEvent interface: operation initCustomEvent(DOMString, boolean, boolean, any)]
expected: FAIL
[EventTarget interface: new AbortController().signal must inherit property "removeEventListener(DOMString, EventListener, [object Object\],[object Object\])" with the proper type]
expected: FAIL
[EventTarget interface: new AbortController().signal must inherit property "dispatchEvent(Event)" with the proper type]
expected: FAIL
[Event interface: attribute srcElement]
expected: FAIL
[EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object\],[object Object\]) on new AbortController().signal with too few arguments must throw TypeError]
expected: FAIL
[AbortSignal interface: new AbortController().signal must inherit property "aborted" with the proper type]
expected: FAIL
[AbortSignal interface object name]
expected: FAIL
[AbortSignal interface: existence and properties of interface prototype object]
expected: FAIL
[Event interface: new CustomEvent("foo") must inherit property "composed" with the proper type]
expected: FAIL
[Stringification of new AbortController()]
expected: FAIL
[AbortController interface: new AbortController() must inherit property "signal" with the proper type]
expected: FAIL
[AbortController interface: operation abort()]
expected: FAIL
[AbortController interface: existence and properties of interface object]
expected: FAIL
[AbortSignal interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[AbortController interface: new AbortController() must inherit property "abort()" with the proper type]
expected: FAIL
[AbortSignal interface: attribute aborted]
expected: FAIL
[AbortController interface: attribute signal]
expected: FAIL
[AbortSignal interface: new AbortController().signal must inherit property "onabort" with the proper type]
expected: FAIL
[Event interface: new CustomEvent("foo") must inherit property "composedPath()" with the proper type]
expected: FAIL
[AbortController interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object\],[object Object\]) on new AbortController().signal with too few arguments must throw TypeError]
expected: FAIL
[AbortSignal interface: attribute onabort]
expected: FAIL
[AbortController interface object length]
expected: FAIL
[AbortSignal interface object length]
expected: FAIL
[EventTarget interface: calling dispatchEvent(Event) on new AbortController().signal with too few arguments must throw TypeError]
expected: FAIL
[Event interface: new Event("foo") must inherit property "composedPath()" with the proper type]
expected: FAIL
[AbortController must be primary interface of new AbortController()]
expected: FAIL
[idlharness.any.sharedworker.html]
[idlharness]
expected: FAIL
[idlharness.any.serviceworker.html]
[idlharness]
expected: FAIL

View file

@ -0,0 +1,543 @@
[idlharness.window.html?include=Node]
[Node interface: calling isSameNode(Node) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "TEXT_NODE" with the proper type]
expected: FAIL
[Node interface: calling removeChild(Node) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: calling isEqualNode(Node) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "lookupPrefix(DOMString)" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "nextSibling" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "isSameNode(Node)" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "nodeType" with the proper type]
expected: FAIL
[Node interface: calling replaceChild(Node, Node) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type]
expected: FAIL
[Node interface: calling getRootNode(GetRootNodeOptions) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "cloneNode(boolean)" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "ENTITY_NODE" with the proper type]
expected: FAIL
[Node interface: calling contains(Node) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "CDATA_SECTION_NODE" with the proper type]
expected: FAIL
[Node interface: calling cloneNode(boolean) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "appendChild(Node)" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "parentNode" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "removeChild(Node)" with the proper type]
expected: FAIL
[Node interface: element must inherit property "isConnected" with the proper type]
expected: FAIL
[Node interface: document.createComment("abc") must inherit property "isConnected" with the proper type]
expected: FAIL
[Node interface: calling lookupPrefix(DOMString) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type]
expected: FAIL
[Node interface: new Document() must inherit property "isConnected" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "baseURI" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "compareDocumentPosition(Node)" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "replaceChild(Node, Node)" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "isEqualNode(Node)" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "COMMENT_NODE" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "ATTRIBUTE_NODE" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_NODE" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "childNodes" with the proper type]
expected: FAIL
[Node interface: document.createTextNode("abc") must inherit property "isConnected" with the proper type]
expected: FAIL
[Node interface: document.doctype must inherit property "isConnected" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "parentElement" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "isDefaultNamespace(DOMString)" with the proper type]
expected: FAIL
[Node interface: calling isDefaultNamespace(DOMString) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "ownerDocument" with the proper type]
expected: FAIL
[Node interface: calling appendChild(Node) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: calling insertBefore(Node, Node) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "ELEMENT_NODE" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "lookupNamespaceURI(DOMString)" with the proper type]
expected: FAIL
[Node interface: document.createDocumentFragment() must inherit property "isConnected" with the proper type]
expected: FAIL
[Node interface: calling lookupNamespaceURI(DOMString) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isConnected" with the proper type]
expected: FAIL
[Node interface: xmlDoc must inherit property "isConnected" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "firstChild" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "normalize()" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "contains(Node)" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "getRootNode(GetRootNodeOptions)" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "DOCUMENT_TYPE_NODE" with the proper type]
expected: FAIL
[Node interface: attribute isConnected]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "hasChildNodes()" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "isConnected" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "lastChild" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "previousSibling" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "insertBefore(Node, Node)" with the proper type]
expected: FAIL
[Node interface: calling compareDocumentPosition(Node) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "ENTITY_REFERENCE_NODE" with the proper type]
expected: FAIL
[Node interface: document.querySelector("[id\]").attributes[0\] must inherit property "NOTATION_NODE" with the proper type]
expected: FAIL
[idlharness.window.html?exclude=Node]
[Event interface: new CustomEvent("foo") must inherit property "srcElement" with the proper type]
expected: FAIL
[EventTarget interface: new AbortController().signal must inherit property "addEventListener(DOMString, EventListener, [object Object\],[object Object\])" with the proper type]
expected: FAIL
[Text interface: document.createTextNode("abc") must inherit property "assignedSlot" with the proper type]
expected: FAIL
[AbortSignal must be primary interface of new AbortController().signal]
expected: FAIL
[Element interface: element must inherit property "assignedSlot" with the proper type]
expected: FAIL
[StaticRange interface: existence and properties of interface prototype object]
expected: FAIL
[AbortController interface object name]
expected: FAIL
[Event interface: attribute composed]
expected: FAIL
[Element interface: operation after([object Object\],[object Object\])]
expected: FAIL
[Text interface: attribute assignedSlot]
expected: FAIL
[AbortSignal interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[DOMTokenList interface: iterable<DOMString>]
expected: FAIL
[Document interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[AbortSignal interface: existence and properties of interface object]
expected: FAIL
[Element interface: attribute shadowRoot]
expected: FAIL
[Element interface: operation append([object Object\],[object Object\])]
expected: FAIL
[StaticRange interface object name]
expected: FAIL
[Document interface: attribute origin]
expected: FAIL
[Document interface: operation append([object Object\],[object Object\])]
expected: FAIL
[EventTarget interface: new AbortController().signal must inherit property "removeEventListener(DOMString, EventListener, [object Object\],[object Object\])" with the proper type]
expected: FAIL
[EventTarget interface: new AbortController().signal must inherit property "dispatchEvent(Event)" with the proper type]
expected: FAIL
[EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object\],[object Object\]) on new AbortController().signal with too few arguments must throw TypeError]
expected: FAIL
[AbstractRange interface: attribute startContainer]
expected: FAIL
[AbortSignal interface object name]
expected: FAIL
[Event interface: new CustomEvent("foo") must inherit property "composed" with the proper type]
expected: FAIL
[DOMTokenList interface: document.body.classList must inherit property "supports(DOMString)" with the proper type]
expected: FAIL
[StaticRange interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[Element interface: operation attachShadow(ShadowRootInit)]
expected: FAIL
[Event interface: new CustomEvent("foo") must inherit property "composedPath()" with the proper type]
expected: FAIL
[AbortController interface: operation abort()]
expected: FAIL
[AbortController interface: existence and properties of interface object]
expected: FAIL
[CharacterData interface: operation replaceWith([object Object\],[object Object\])]
expected: FAIL
[AbortController interface: attribute signal]
expected: FAIL
[EventTarget interface: document.querySelector("[id\]").attributes[0\] must inherit property "dispatchEvent(Event)" with the proper type]
expected: FAIL
[Element interface: calling attachShadow(ShadowRootInit) on element with too few arguments must throw TypeError]
expected: FAIL
[EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object\],[object Object\]) on new AbortController().signal with too few arguments must throw TypeError]
expected: FAIL
[DocumentType interface: operation replaceWith([object Object\],[object Object\])]
expected: FAIL
[StaticRange interface: existence and properties of interface object]
expected: FAIL
[Event interface: new Event("foo") must inherit property "composedPath()" with the proper type]
expected: FAIL
[AbortSignal interface: attribute aborted]
expected: FAIL
[AbstractRange interface: existence and properties of interface prototype object]
expected: FAIL
[Event interface: operation composedPath()]
expected: FAIL
[EventTarget interface: calling dispatchEvent(Event) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[AbstractRange interface: attribute endContainer]
expected: FAIL
[Event interface: new Event("foo") must inherit property "srcElement" with the proper type]
expected: FAIL
[AbortController must be primary interface of new AbortController()]
expected: FAIL
[AbortController interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[EventTarget interface: document.querySelector("[id\]").attributes[0\] must inherit property "removeEventListener(DOMString, EventListener, [object Object\],[object Object\])" with the proper type]
expected: FAIL
[CharacterData interface: operation remove()]
expected: FAIL
[Event interface: attribute srcElement]
expected: FAIL
[Range interface: existence and properties of interface object]
expected: FAIL
[CharacterData interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[Element interface: element must inherit property "attachShadow(ShadowRootInit)" with the proper type]
expected: FAIL
[Element interface: element must inherit property "slot" with the proper type]
expected: FAIL
[AbstractRange interface object length]
expected: FAIL
[AbortController interface: new AbortController() must inherit property "signal" with the proper type]
expected: FAIL
[DocumentType interface: operation before([object Object\],[object Object\])]
expected: FAIL
[AbortSignal interface object length]
expected: FAIL
[Window interface: attribute event]
expected: FAIL
[AbortController interface: new AbortController() must inherit property "abort()" with the proper type]
expected: FAIL
[AbstractRange interface: attribute collapsed]
expected: FAIL
[AbstractRange interface: attribute startOffset]
expected: FAIL
[Document interface: operation prepend([object Object\],[object Object\])]
expected: FAIL
[DocumentType interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[AbortController interface object length]
expected: FAIL
[Range interface: existence and properties of interface prototype object]
expected: FAIL
[Element interface: operation before([object Object\],[object Object\])]
expected: FAIL
[AbstractRange interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[DOMTokenList interface: operation supports(DOMString)]
expected: FAIL
[EventTarget interface: calling dispatchEvent(Event) on new AbortController().signal with too few arguments must throw TypeError]
expected: FAIL
[AbstractRange interface: existence and properties of interface object]
expected: FAIL
[AbortController interface: existence and properties of interface prototype object]
expected: FAIL
[CustomEvent interface: operation initCustomEvent(DOMString, boolean, boolean, any)]
expected: FAIL
[Element interface: attribute slot]
expected: FAIL
[AbstractRange interface object name]
expected: FAIL
[DocumentFragment interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[AbortSignal interface: new AbortController().signal must inherit property "aborted" with the proper type]
expected: FAIL
[Element interface: operation prepend([object Object\],[object Object\])]
expected: FAIL
[Event interface: document.createEvent("Event") must inherit property "composedPath()" with the proper type]
expected: FAIL
[DOMTokenList interface: calling supports(DOMString) on document.body.classList with too few arguments must throw TypeError]
expected: FAIL
[StaticRange interface object length]
expected: FAIL
[DocumentType interface: operation after([object Object\],[object Object\])]
expected: FAIL
[AbortSignal interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object\],[object Object\]) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[Document interface: xmlDoc must inherit property "origin" with the proper type]
expected: FAIL
[AbortSignal interface: new AbortController().signal must inherit property "onabort" with the proper type]
expected: FAIL
[AbortController interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[AbortSignal interface: attribute onabort]
expected: FAIL
[EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object\],[object Object\]) on document.querySelector("[id\]").attributes[0\] with too few arguments must throw TypeError]
expected: FAIL
[AbortSignal interface: existence and properties of interface prototype object]
expected: FAIL
[Event interface: new Event("foo") must inherit property "composed" with the proper type]
expected: FAIL
[NodeFilter interface: existence and properties of interface object]
expected: FAIL
[Element interface: attribute assignedSlot]
expected: FAIL
[Element interface: operation remove()]
expected: FAIL
[AbstractRange interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[Stringification of new AbortController().signal]
expected: FAIL
[DocumentFragment interface: operation prepend([object Object\],[object Object\])]
expected: FAIL
[DocumentFragment interface: operation append([object Object\],[object Object\])]
expected: FAIL
[AbstractRange interface: attribute endOffset]
expected: FAIL
[NodeList interface: iterable<Node>]
expected: FAIL
[CharacterData interface: operation before([object Object\],[object Object\])]
expected: FAIL
[EventTarget interface: document.querySelector("[id\]").attributes[0\] must inherit property "addEventListener(DOMString, EventListener, [object Object\],[object Object\])" with the proper type]
expected: FAIL
[Stringification of new AbortController()]
expected: FAIL
[CharacterData interface: operation after([object Object\],[object Object\])]
expected: FAIL
[StaticRange interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[Event interface: document.createEvent("Event") must inherit property "composed" with the proper type]
expected: FAIL
[Attr interface: existence and properties of interface object]
expected: FAIL
[DocumentType interface: operation remove()]
expected: FAIL
[Document interface: new Document() must inherit property "origin" with the proper type]
expected: FAIL
[Element interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[Attr interface: existence and properties of interface prototype object]
expected: FAIL
[Event interface: document.createEvent("Event") must inherit property "srcElement" with the proper type]
expected: FAIL
[Element interface: operation replaceWith([object Object\],[object Object\])]
expected: FAIL
[Element interface: element must inherit property "shadowRoot" with the proper type]
expected: FAIL

View file

@ -0,0 +1,28 @@
[aria-element-reflection.tentative.html]
[aria-activedescendant element reflection]
expected: FAIL
[Deleting a reflected element should return null for the IDL attribute and cause the content attribute to become stale.]
expected: FAIL
[If the content attribute is set directly, the IDL attribute getter always returns the first element whose ID matches the content attribute.]
expected: FAIL
[Changing the ID of an element causes the content attribute to become out of sync.]
expected: FAIL
[aria-errormessage]
expected: FAIL
[Setting an element reference that crosses into a shadow tree is disallowed, but setting one that is in a shadow inclusive ancestor is allowed.]
expected: FAIL
[Setting the IDL attribute to an element which is not the first element in DOM order with its ID causes the content attribute to be an empty string]
expected: FAIL
[aria-details]
expected: FAIL
[Reparenting an element into a descendant shadow scope nullifies the element reference.]
expected: FAIL

View file

@ -315,18 +315,12 @@
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL

View file

@ -56,9 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript]
expected: FAIL
[separate text/javascript;charset=windows-1252 text/javascript]
expected: FAIL

View file

@ -11,9 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL
[X-Content-Type-Options%3A%20'NosniFF']
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +1,5 @@
[creating_browsing_context_test_01.html]
expected: TIMEOUT
[first argument: absolute url]
expected: FAIL
expected: TIMEOUT

View file

@ -1,5 +1,24 @@
[open-features-negative-innerwidth-innerheight.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
expected: FAIL
[features "innerheight=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404.5" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerheight=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404e1" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,5 +1,24 @@
[open-features-negative-screenx-screeny.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
expected: FAIL
[features "screenx=-204" should NOT set "left=204"]
expected: TIMEOUT
[features "screeny=-204" should NOT set "top=204"]
expected: TIMEOUT
[features "screeny=-204.5" should NOT set "top=204"]
expected: TIMEOUT
[features "screeny=-0" should NOT set "top=204"]
expected: TIMEOUT
[features "screenx=-0" should NOT set "left=204"]
expected: TIMEOUT
[features "screenx=-204.5" should NOT set "left=204"]
expected: TIMEOUT

View file

@ -1,5 +1,24 @@
[open-features-negative-top-left.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for `top`, `left`]
expected: FAIL
[features "top=-204" should NOT set "top=204"]
expected: TIMEOUT
[features "top=-204.5" should NOT set "top=204"]
expected: TIMEOUT
[features "left=-204" should NOT set "left=204"]
expected: TIMEOUT
[features "top=-0" should NOT set "top=204"]
expected: TIMEOUT
[features "left=-204.5" should NOT set "left=204"]
expected: TIMEOUT
[features "left=-0" should NOT set "left=204"]
expected: TIMEOUT

View file

@ -1,5 +1,24 @@
[open-features-negative-width-height.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for `width`, `height`]
expected: FAIL
[features "height=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "height=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "height=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "width=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "width=-404e1" should NOT set "width=404"]
expected: TIMEOUT
[features "width=-404.5" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,32 +1,48 @@
[open-features-non-integer-height.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `height`]
expected: FAIL
[features "height=405*3" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "height=405.32" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "height=405e1" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "height=405/5" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "height=405^4" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "height=405.5" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "height=405e-1" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "height=405 " should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "height=405LLl" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "height=/404" should NOT set "height=404"]
expected: TIMEOUT
[top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
expected: TIMEOUT
[top=0,left=0: absence of feature "height" should be treated same as "height=0"]
expected: TIMEOUT
[features "height=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "height=L404" should NOT set "height=404"]
expected: TIMEOUT

View file

@ -1,32 +1,42 @@
[open-features-non-integer-innerheight.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
expected: FAIL
[features "innerheight=405e-1" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "innerheight=405LLl" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "innerheight=405^4" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "innerheight=405e1" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "innerheight=405 " should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "innerheight=405/5" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "innerheight=405.32" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "innerheight=405.5" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "innerheight=405*3" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "innerheight=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=L404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=/404" should NOT set "height=404"]
expected: TIMEOUT

View file

@ -1,32 +1,42 @@
[open-features-non-integer-innerwidth.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
expected: FAIL
[features "innerwidth=405e-1" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "innerwidth=405*3" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "innerwidth=405.5" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "innerwidth=405e1" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "innerwidth=405.32" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "innerwidth=405 " should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "innerwidth=405LLl" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "innerwidth=405/5" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "innerwidth=405^4" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "innerwidth=/404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=_404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=L404" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,32 +1,42 @@
[open-features-non-integer-left.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `left`]
expected: FAIL
[features "left=105e1" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "left=105 " should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "left=105/5" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "left=105e-1" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "left=105^4" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "left=105LLl" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "left=105.32" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "left=105*3" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "left=105.5" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "left=L104" should NOT set "left=104"]
expected: TIMEOUT
[features "left=/104" should NOT set "left=104"]
expected: TIMEOUT
[features "left=_104" should NOT set "left=104"]
expected: TIMEOUT

View file

@ -1,32 +1,42 @@
[open-features-non-integer-screenx.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
expected: FAIL
[features "screenx=105.5" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "screenx=105e1" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "screenx=105 " should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "screenx=105*3" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "screenx=105e-1" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "screenx=105^4" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "screenx=105LLl" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "screenx=105/5" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "screenx=105.32" should set "left=105"]
expected: FAIL
expected: TIMEOUT
[features "screenx=_104" should NOT set "left=104"]
expected: TIMEOUT
[features "screenx=L104" should NOT set "left=104"]
expected: TIMEOUT
[features "screenx=/104" should NOT set "left=104"]
expected: TIMEOUT

View file

@ -1,32 +1,42 @@
[open-features-non-integer-screeny.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
expected: FAIL
[features "screeny=405^4" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "screeny=405e-1" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "screeny=405LLl" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "screeny=405e1" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "screeny=405 " should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "screeny=405/5" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "screeny=405*3" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "screeny=405.32" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "screeny=405.5" should set "height=405"]
expected: FAIL
expected: TIMEOUT
[features "screeny=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "screeny=L404" should NOT set "height=404"]
expected: TIMEOUT
[features "screeny=/404" should NOT set "height=404"]
expected: TIMEOUT

View file

@ -1,32 +1,48 @@
[open-features-non-integer-width.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `width`]
expected: FAIL
[features "width=405^4" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "width=405.5" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "width=405e1" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "width=405 " should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "width=405.32" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "width=405LLl" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "width=405*3" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "width=405e-1" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[features "width=405/5" should set "width=405"]
expected: FAIL
expected: TIMEOUT
[top=0,left=0: absence of feature "width" should be treated same as "width=0"]
expected: TIMEOUT
[features "width=_404" should NOT set "width=404"]
expected: TIMEOUT
[top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
expected: TIMEOUT
[features "width=/404" should NOT set "width=404"]
expected: TIMEOUT
[features "width=L404" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[base_target_does_not_affect_iframe_src_navigation.html]
[base_target_does_not_affect_iframe_src_navigation]
expected: FAIL

View file

@ -0,0 +1,4 @@
[base_target_does_not_affect_location_assignment.html]
[base_target_does_not_affect_location_assignment]
expected: FAIL

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-3.html]
type: testharness
expected: TIMEOUT
expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT

View file

@ -1,4 +0,0 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

@ -11,3 +11,6 @@
[The iframe should have one resource timing entry.]
expected: FAIL
[responseEnd should not be 0 in timing-allow cross-origin request.]
expected: FAIL

View file

@ -20,3 +20,6 @@
[domainLookupStart should be 0 in cross-origin request.]
expected: FAIL
[responseEnd should be greater than 0 in cross-origin request.]
expected: FAIL

View file

@ -1,4 +1,5 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -29,3 +29,9 @@
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t1.9724091887474060e-1\t9.5236867666244507e-1\t7.5512775778770447e-1\t7.9289436569253091e-1\t3.8985999999999999e-3\n\t[60\]\t-2.2450675070285797e-1\t-5.8084785938262939e-1\t3.5634110867977142e-1\t6.1348441407448528e-1\t3.8985999999999999e-3\n\t[90\]\t-3.7808802723884583e-1\t-5.9811043739318848e-1\t2.2002241015434265e-1\t3.6786251568070089e-1\t3.8985999999999999e-3\n\t[120\]\t7.6881676912307739e-1\t9.4563448429107666e-1\t1.7681771516799927e-1\t1.8698315057805445e-1\t3.8985999999999999e-3\n\t[151\]\t5.4644601186737418e-4\t-4.1306272149085999e-2\t4.1852718160953373e-2\t1.0132291292202573e+0\t3.8985999999999999e-3\n\t...and 1419 more errors.\n\tMax AbsError of 2.0054797224906599e+28 at index of 20238.\n\t[20238\]\t-2.0054797224906599e+28\t-4.7574958205223083e-1\t2.0054797224906599e+28\t4.2154103716490195e+28\t3.8985999999999999e-3\n\tMax RelError of 4.2154103716490195e+28 at index of 20238.\n\t[20238\]\t-2.0054797224906599e+28\t-4.7574958205223083e-1\t2.0054797224906599e+28\t4.2154103716490195e+28\t3.8985999999999999e-3\n]
expected: FAIL
[X SNR (-315.6690644748059 dB) is not greater than or equal to 65.737. Got -315.6690644748059.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t1.9724091887474060e-1\t9.5236867666244507e-1\t7.5512775778770447e-1\t7.9289436569253091e-1\t3.8985999999999999e-3\n\t[60\]\t-2.2450675070285797e-1\t-5.8084785938262939e-1\t3.5634110867977142e-1\t6.1348441407448528e-1\t3.8985999999999999e-3\n\t[90\]\t-3.7808802723884583e-1\t-5.9811043739318848e-1\t2.2002241015434265e-1\t3.6786251568070089e-1\t3.8985999999999999e-3\n\t[120\]\t7.6881676912307739e-1\t9.4563448429107666e-1\t1.7681771516799927e-1\t1.8698315057805445e-1\t3.8985999999999999e-3\n\t[151\]\t5.4644601186737418e-4\t-4.1306272149085999e-2\t4.1852718160953373e-2\t1.0132291292202573e+0\t3.8985999999999999e-3\n\t...and 1419 more errors.\n\tMax AbsError of 9.0185146037803418e+17 at index of 20238.\n\t[20238\]\t-9.0185146037803418e+17\t-4.7574958205223083e-1\t9.0185146037803418e+17\t1.8956432005420513e+18\t3.8985999999999999e-3\n\tMax RelError of 1.8956432005420513e+18 at index of 20238.\n\t[20238\]\t-9.0185146037803418e+17\t-4.7574958205223083e-1\t9.0185146037803418e+17\t1.8956432005420513e+18\t3.8985999999999999e-3\n]
expected: FAIL

View file

@ -0,0 +1,7 @@
[iframe.py]
[test_source_origin[cross_origin\]]
expected: FAIL
[test_source_origin[same_origin\]]
expected: FAIL

View file

@ -0,0 +1,4 @@
[iframe.py]
[test_source_origin[cross_origin\]]
expected: FAIL

View file

@ -0,0 +1,2 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -1,2 +0,0 @@
[transition_calc_implicit.html]
expected: TIMEOUT

View file

@ -305,7 +305,7 @@ jobs:
- job: results_safari
displayName: 'all tests: Safari'
condition: |
or(eq(variables['Build.SourceBranch'], 'refs/heads/epochs/six_hourly'),
or(eq(variables['Build.SourceBranch'], 'refs/heads/epochs/daily'),
and(eq(variables['Build.Reason'], 'Manual'), variables['run_all_safari']))
strategy:
parallel: 5 # chosen to make runtime ~2h

View file

@ -5,20 +5,15 @@
'use strict';
promise_test(async () => {
const srcs = ['audio-output', 'dom', 'html'];
const [idl, dom, html] = await Promise.all(
srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
const idl_array = new IdlArray();
idl_array.add_idls(idl);
idl_array.add_dependency_idls(html);
idl_array.add_dependency_idls(dom);
idl_test(
['audio-output'],
['html', 'dom'],
idl_array => {
self.audio = document.createElement('audio');
self.video = document.createElement('video');
idl_array.add_objects({
HTMLAudioElement: ['audio'],
HTMLVideoElement: ['video']
});
idl_array.test();
}, 'Test IDL implementation of audio-output API');
}
);

View file

@ -3,15 +3,12 @@
// https://w3c.github.io/beacon/
promise_test(async () => {
const idl = await fetch('/interfaces/beacon.idl').then(r => r.text());
const html = await fetch('/interfaces/html.idl').then(r => r.text());
const idl_array = new IdlArray();
idl_array.add_idls(idl);
idl_array.add_dependency_idls(html);
idl_test(
['beacon'],
['html'],
idl_array => {
idl_array.add_objects({
Navigator: ['navigator'],
});
idl_array.test();
}, 'beacon interfaces');
}
);

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel="author" title="Dominik Röttsches" href="drott@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-font-loading/#font-face-load">
<meta name="assert" content="Ensure that a UA triggered font load (through the use in the test div) leads to rejecting
the promise." />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
promise_test(function(t) {
var testFontFace = new FontFace('TestFontFace', 'local("nonexistentfont-9a1a9f78-c8d4-11e9-af16-448a5b2c326f")');
document.fonts.add(testFontFace);
return promise_rejects(t, 'NetworkError', testFontFace.loaded);
})
</script>
<body>
<div style="font-family: TestFontFace;">a</div>
</html>

View file

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Inline Layout: getComputedStyle().verticalAlign</title>
<link rel="help" href="https://www.w3.org/TR/CSS2/visudet.html#propdef-vertical-align">
<link rel="help" href="https://drafts.csswg.org/css-inline/#propdef-vertical-align">
<meta name="assert" content="vertical-align computed value is as specified, with lengths made absolute.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<style>
#target {
font-size: 40px;
}
</style>
</head>
<body>
<div id="target"></div>
<script>
test_computed_value("vertical-align", "baseline");
test_computed_value("vertical-align", "sub");
test_computed_value("vertical-align", "super");
test_computed_value("vertical-align", "top");
test_computed_value("vertical-align", "text-top");
test_computed_value("vertical-align", "middle");
test_computed_value("vertical-align", "bottom");
test_computed_value("vertical-align", "text-bottom");
test_computed_value("vertical-align", "-10px");
test_computed_value("vertical-align", "20%");
test_computed_value("vertical-align", "calc(20% + 10px)");
test_computed_value("vertical-align", "calc(10px - 0.5em)", "-10px");
// TODO: Test against the CSS Inline Layout grammar when browsers support it.
</script>
</body>
</html>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Inline Layout: parsing vertical-align with valid values</title>
<link rel="help" href="https://www.w3.org/TR/CSS2/visudet.html#propdef-vertical-align">
<link rel="help" href="https://drafts.csswg.org/css-inline/#propdef-vertical-align">
<meta name="assert" content="vertical-align only supports the spec grammar.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("vertical-align", "none");
// Two baseline-source values
test_invalid_value("vertical-align", "first last");
test_invalid_value("vertical-align", "first, last");
// Two baseline-shift values
test_invalid_value("vertical-align", "sub super");
test_invalid_value("vertical-align", "super 10px");
test_invalid_value("vertical-align", "20% sub");
// Two alignment-baseline values
test_invalid_value("vertical-align", "baseline middle");
test_invalid_value("vertical-align", "text-top, bottom");
</script>
</body>
</html>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Inline Layout: parsing vertical-align with valid values</title>
<link rel="help" href="https://www.w3.org/TR/CSS2/visudet.html#propdef-vertical-align">
<link rel="help" href="https://drafts.csswg.org/css-inline/#propdef-vertical-align">
<meta name="assert" content="vertical-align supports the CSS 2 grammar 'baseline | sub | super | top | text-top | middle | bottom | text-bottom | <percentage> | <length>'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value("vertical-align", "baseline");
test_valid_value("vertical-align", "sub");
test_valid_value("vertical-align", "super");
test_valid_value("vertical-align", "top");
test_valid_value("vertical-align", "text-top");
test_valid_value("vertical-align", "middle");
test_valid_value("vertical-align", "bottom");
test_valid_value("vertical-align", "text-bottom");
test_valid_value("vertical-align", "-10px");
test_valid_value("vertical-align", "20%");
test_valid_value("vertical-align", "0", "0px");
test_valid_value("vertical-align", "calc(20% - 10px)");
// TODO: Test against the CSS Inline Layout grammar when browsers support it.
</script>
</body>
</html>

View file

@ -0,0 +1,68 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>column-count interpolation</title>
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#cc">
<meta name="assert" content="column-count supports animation by computed value">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
<style>
.parent {
column-count: 30;
}
.target {
column-count: 10;
}
</style>
<body></body>
<script>
test_interpolation({
property: 'column-count',
from: neutralKeyframe,
to: '20',
}, [
{at: -0.5, expect: '5'},
{at: 0, expect: '10'},
{at: 0.3, expect: '13'},
{at: 0.7, expect: '17'},
{at: 1, expect: '20'},
{at: 1.5, expect: '25'},
]);
test_no_interpolation({
property: 'column-count',
from: 'auto',
to: '20',
});
test_interpolation({
property: 'column-count',
from: 'inherit',
to: '20',
}, [
{at: -0.5, expect: '35'},
{at: 0, expect: '30'},
{at: 0.3, expect: '27'},
{at: 0.7, expect: '23'},
{at: 1, expect: '20'},
{at: 1.5, expect: '15'},
]);
test_interpolation({
property: 'column-count',
from: '10',
to: '1'
}, [
{at: -0.5, expect: '15'},
{at: 0, expect: '10'},
{at: 0.3, expect: '7'},
{at: 0.7, expect: '4'},
// Only positive integers are valid
{at: 1, expect: '1'},
{at: 1.5, expect: '1'}
]);
</script>

View file

@ -0,0 +1,77 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>column-rule-color interpolation</title>
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#crc">
<meta name="assert" content="column-rule-color supports animation by computed value type">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
<style>
.parent {
column-count: 2;
column-rule-color: rgb(70, 70, 170);
}
.target {
column-count: 2;
color: rgb(70, 170, 70);
column-rule-color: rgb(170, 70, 70);
}
</style>
<body></body>
<script>
test_interpolation({
property: 'column-rule-color',
from: neutralKeyframe,
to: 'rgb(70, 170, 70)',
}, [
{at: -0.5, expect: 'rgb(220, 20, 70)'},
{at: 0, expect: 'rgb(170, 70, 70)'},
{at: 0.3, expect: 'rgb(140, 100, 70)'},
{at: 0.6, expect: 'rgb(110, 130, 70)'},
{at: 1, expect: 'rgb(70, 170, 70)'},
{at: 1.5, expect: 'rgb(20, 220, 70)'},
]);
test_interpolation({
property: 'column-rule-color',
from: 'initial',
to: 'rgb(70, 70, 170)',
}, [
{at: -0.5, expect: 'rgb(70, 220, 20)'},
{at: 0, expect: 'rgb(70, 170, 70)'},
{at: 0.3, expect: 'rgb(70, 140, 100)'},
{at: 0.6, expect: 'rgb(70, 110, 130)'},
{at: 1, expect: 'rgb(70, 70, 170)'},
{at: 1.5, expect: 'rgb(70, 20, 220)'},
]);
test_interpolation({
property: 'column-rule-color',
from: 'inherit',
to: 'rgb(70, 170, 70)',
}, [
{at: -0.5, expect: 'rgb(70, 20, 220)'},
{at: 0, expect: 'rgb(70, 70, 170)'},
{at: 0.3, expect: 'rgb(70, 100, 140)'},
{at: 0.6, expect: 'rgb(70, 130, 110)'},
{at: 1, expect: 'rgb(70, 170, 70)'},
{at: 1.5, expect: 'rgb(70, 220, 20)'},
]);
test_interpolation({
property: 'column-rule-color',
from: 'currentcolor',
to: 'rgb(170, 70, 70)',
}, [
{at: -0.5, expect: 'rgb(20, 220, 70)'},
{at: 0, expect: 'rgb(70, 170, 70)'},
{at: 0.3, expect: 'rgb(100, 140, 70)'},
{at: 0.6, expect: 'rgb(130, 110, 70)'},
{at: 1, expect: 'rgb(170, 70, 70)'},
{at: 1.5, expect: 'rgb(220, 20, 70)'},
]);
</script>

View file

@ -0,0 +1,101 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>column-rule-width interpolation</title>
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#crw">
<meta name="assert" content="column-rule-width supports animation by computed value type">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
<style>
.parent {
column-rule-width: 30px;
}
.target {
column-rule-width: 10px;
}
</style>
<body></body>
<script>
test_interpolation({
property: 'column-rule-width',
from: neutralKeyframe,
to: '20px',
}, [
{at: -0.3, expect: '7px'},
{at: 0, expect: '10px'},
{at: 0.3, expect: '13px'},
{at: 0.6, expect: '16px'},
{at: 1, expect: '20px'},
{at: 1.5, expect: '25px'},
]);
test_interpolation({
property: 'column-rule-width',
from: 'initial',
to: '20px',
}, [
{at: -0.3, expect: '0px'},
{at: 0, expect: '3px'},
{at: 0.3, expect: '8.1px'},
{at: 0.6, expect: '13.2px'},
{at: 1, expect: '20px'},
{at: 1.5, expect: '28.5px'},
]);
test_interpolation({
property: 'column-rule-width',
from: 'inherit',
to: '20px',
}, [
{at: -0.3, expect: '0px'},
{at: 0, expect: '0px'},
{at: 0.3, expect: '6px'},
{at: 0.6, expect: '12px'},
{at: 1, expect: '20px'},
{at: 1.5, expect: '30px'},
]);
test_interpolation({
property: 'column-rule-width',
from: 'unset',
to: '20px',
}, [
{at: -0.3, expect: '0px'},
{at: 0, expect: '3px'},
{at: 0.3, expect: '8.1px'},
{at: 0.6, expect: '13.2px'},
{at: 1, expect: '20px'},
{at: 1.5, expect: '28.5px'},
]);
test_interpolation({
property: 'column-rule-width',
from: '0px',
to: '10px'
}, [
{at: -0.3, expect: '0px'}, // CSS column-rule-width can't be negative.
{at: 0, expect: '0px'},
{at: 0.3, expect: '3px'},
{at: 0.6, expect: '6px'},
{at: 1, expect: '10px'},
{at: 1.5, expect: '15px'}
]);
test_interpolation({
property: 'column-rule-width',
from: '15px',
to: 'thick'
}, [
{at: -2, expect: '35px'},
{at: -0.3, expect: '18px'},
{at: 0, expect: '15px'},
{at: 0.3, expect: '12px'},
{at: 0.6, expect: '9px'},
{at: 1, expect: '5px'},
{at: 1.5, expect: '0px'}
]);
</script>

View file

@ -0,0 +1,91 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>column-width interpolation</title>
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#cw">
<meta name="assert" content="column-width supports animation by computed value type">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
<style>
.parent {
column-width: 30px;
}
.target {
font-size: 0px; /* column-width "specified values must be greater than 0", so use font-size to achieve 0px computed value. */
display: inline-block;
column-width: 10px;
}
</style>
<body>
<template id="target-template">
<div><div class="transformed"></div></div>
</template>
</body>
<script>
test_interpolation({
property: 'column-width',
from: neutralKeyframe,
to: '20px',
}, [
{at: -20, expect: '1em'}, // column-width does not accept negative values
{at: -1, expect: '1em'}, // column-width does not accept negative values
{at: -0.3, expect: '7px'},
{at: 0, expect: '10px'},
{at: 0.3, expect: '13px'},
{at: 0.6, expect: '16px'},
{at: 1, expect: '20px'},
{at: 1.5, expect: '25px'},
]);
test_no_interpolation({
property: 'column-width',
from: 'initial',
to: '20px',
});
test_interpolation({
property: 'column-width',
from: 'inherit',
to: '20px',
}, [
{at: -20, expect: '230px'},
{at: -1, expect: '40px'},
{at: -0.3, expect: '33px'},
{at: 0, expect: '30px'},
{at: 0.3, expect: '27px'},
{at: 0.6, expect: '24px'},
{at: 1, expect: '20px'},
{at: 1.5, expect: '15px'},
]);
test_no_interpolation({
property: 'column-width',
from: 'unset',
to: '20px',
});
test_interpolation({
property: 'column-width',
from: '50px',
to: '100px',
}, [
{at: -20, expect: '1em'}, // column-width does not accept negative values
{at: -1, expect: '1em'}, // column-width does not accept negative values
{at: -0.3, expect: '35px'},
{at: 0, expect: '50px'},
{at: 0.3, expect: '65px'},
{at: 0.6, expect: '80px'},
{at: 1, expect: '100px'},
{at: 1.5, expect: '125px'},
]);
test_no_interpolation({
property: 'column-width',
from: '50px',
to: 'auto',
});
</script>

View file

@ -0,0 +1,100 @@
<!DOCTYPE HTML>
<title>CSS Test Reference: breaking of a multicolumn</title>
<meta charset="utf-8">
<link rel="author" title="L. David Baron" href="https://dbaron.org/">
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://mozilla.org/">
<style>
.outer {
height: 200px;
width: 800px;
background: rgba(0, 0, 255, 0.3);
position: relative;
}
.blueborders {
position: absolute;
top: 0;
left: 262px; /* 256px first column + (16px gap - 4px rule) / 2 */
width: 268px; /* 256px second column + (16px gap - 4px rule) */
height: 200px;
border-right: blue solid 4px;
border-left: blue solid 4px;
}
.innerbg {
height: 100px;
width: 256px;
background: rgba(255, 0, 255, 0.3);
position: absolute;
top: 0;
}
.inner {
height: 100px;
width: 120px;
font: 16px/1.25 sans-serif;
position: absolute;
top: 0;
}
.lefthalf {
border-right: 2px solid fuchsia;
padding-right: 7px;
}
.righthalf {
padding-left: 7px;
}
</style>
<div class="outer">
<div class="blueborders"></div>
<div class="innerbg" style="left: 0"></div>
<div class="inner lefthalf" style="left: 0">
AAAAA<br>
BBBBB<br>
CCCCC<br>
DDDDD<br>
EEEEE
</div>
<div class="inner righthalf" style="left: 129px">
FFFFF<br>
GGGGG<br>
HHHHH<br>
IIIII<br>
JJJJJ
</div>
<div class="innerbg" style="left: 272px"></div>
<div class="inner lefthalf" style="left: 272px">
KKKKK<br>
LLLLL<br>
MMMMM<br>
NNNNN<br>
OOOOO
</div>
<div class="inner righthalf" style="left: 401px">
PPPPP<br>
QQQQQ<br>
RRRRR<br>
SSSSS<br>
TTTTT
</div>
<div class="innerbg" style="left: 544px"></div>
<div class="inner lefthalf" style="left: 544px">
UUUUU<br>
VVVVV<br>
WWWWW<br>
XXXXX<br>
YYYYY
</div>
<div class="inner righthalf" style="left: 673px">
ZZZZZ<br>
aaaaa<br>
bbbbb<br>
ccccc<br>
ddddd
</div>
</div>

View file

@ -0,0 +1,70 @@
<!DOCTYPE HTML>
<title>CSS Test: breaking of a multicolumn</title>
<meta charset="utf-8">
<link rel="author" title="L. David Baron" href="https://dbaron.org/">
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://mozilla.org/">
<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules">
<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/2309">
<link rel="match" href="multicol-breaking-005-ref.html">
<style>
.outer {
height: 200px;
width: 800px;
column-fill: balance;
column-count: 3;
column-rule: 4px solid blue;
column-gap: 16px;
background: rgba(0, 0, 255, 0.3);
}
.inner {
column-count: 2;
column-fill: balance;
column-rule: 2px solid fuchsia;
column-gap: 16px;
background: rgba(255, 0, 255, 0.3);
font: 16px/1.25 sans-serif;
}
</style>
<!-- This test is similar to multicol-breaking-002.html,
but both outer and inner columns are balancing. The outer multi-column is
made explicitly taller than the inner columns' optimal balance height. -->
<div class="outer">
<div class="inner" style="height: 300px">
AAAAA<br>
BBBBB<br>
CCCCC<br>
DDDDD<br>
EEEEE<br>
FFFFF<br>
GGGGG<br>
HHHHH<br>
IIIII<br>
JJJJJ<br>
KKKKK<br>
LLLLL<br>
MMMMM<br>
NNNNN<br>
OOOOO<br>
PPPPP<br>
QQQQQ<br>
RRRRR<br>
SSSSS<br>
TTTTT<br>
UUUUU<br>
VVVVV<br>
WWWWW<br>
XXXXX<br>
YYYYY<br>
ZZZZZ<br>
aaaaa<br>
bbbbb<br>
ccccc<br>
ddddd
</div>
</div>

View file

@ -0,0 +1,86 @@
<!DOCTYPE HTML>
<title>CSS Test Reference: breaking of a multicolumn</title>
<meta charset="utf-8">
<link rel="author" title="L. David Baron" href="https://dbaron.org/">
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://mozilla.org/">
<style>
.outer {
height: 200px;
width: 800px;
background: rgba(0, 0, 255, 0.3);
position: relative;
}
.innerbg {
height: 100px;
width: 256px;
background: rgba(255, 0, 255, 0.3);
position: absolute;
top: 0;
}
.inner {
height: 100px;
width: 120px;
font: 16px/1.25 sans-serif;
position: absolute;
top: 0;
}
.lefthalf {
border-right: 2px solid fuchsia;
padding-right: 7px;
}
.righthalf {
padding-left: 7px;
}
</style>
<div class="outer">
<div class="inner lefthalf" style="left: 0">
AAAAA<br>
BBBBB<br>
CCCCC<br>
DDDDD<br>
EEEEE
</div>
<div class="inner righthalf" style="left: 129px">
FFFFF<br>
GGGGG<br>
HHHHH<br>
IIIII<br>
JJJJJ
</div>
<div class="inner lefthalf" style="left: 272px">
KKKKK<br>
LLLLL<br>
MMMMM<br>
NNNNN<br>
OOOOO
</div>
<div class="inner righthalf" style="left: 401px">
PPPPP<br>
QQQQQ<br>
RRRRR<br>
SSSSS<br>
TTTTT
</div>
<div class="inner lefthalf" style="left: 544px">
UUUUU<br>
VVVVV<br>
WWWWW<br>
XXXXX<br>
YYYYY
</div>
<div class="inner righthalf" style="left: 673px">
ZZZZZ<br>
aaaaa<br>
bbbbb<br>
ccccc<br>
ddddd
</div>
</div>

View file

@ -0,0 +1,68 @@
<!DOCTYPE HTML>
<title>CSS Test: breaking of a multicolumn</title>
<meta charset="utf-8">
<link rel="author" title="L. David Baron" href="https://dbaron.org/">
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://mozilla.org/">
<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules">
<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/2309">
<link rel="match" href="multicol-breaking-nobackground-005-ref.html">
<style>
.outer {
height: 200px;
width: 800px;
column-fill: balance;
column-count: 3;
column-gap: 16px;
background: rgba(0, 0, 255, 0.3);
}
.inner {
column-count: 2;
column-fill: balance;
column-rule: 2px solid fuchsia;
column-gap: 16px;
font: 16px/1.25 sans-serif;
}
</style>
<!-- This test is similar to multicol-breaking-nobackground-002.html,
but both outer and inner columns are balancing. The outer multi-column is
made explicitly taller than the inner columns' optimal balance height. -->
<div class="outer">
<div class="inner" style="height: 300px">
AAAAA<br>
BBBBB<br>
CCCCC<br>
DDDDD<br>
EEEEE<br>
FFFFF<br>
GGGGG<br>
HHHHH<br>
IIIII<br>
JJJJJ<br>
KKKKK<br>
LLLLL<br>
MMMMM<br>
NNNNN<br>
OOOOO<br>
PPPPP<br>
QQQQQ<br>
RRRRR<br>
SSSSS<br>
TTTTT<br>
UUUUU<br>
VVVVV<br>
WWWWW<br>
XXXXX<br>
YYYYY<br>
ZZZZZ<br>
aaaaa<br>
bbbbb<br>
ccccc<br>
ddddd
</div>
</div>

View file

@ -1,34 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap: getComputedStyle().scrollMarginBlock</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-margin-block">
<meta name="assert" content="scroll-margin-block computed value is absolute length.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
</head>
<body>
<div id="target"></div>
<style>
#target {
font-size: 40px;
}
</style>
<script>
test_computed_value("scroll-margin-block-start", "10px");
test_computed_value("scroll-margin-block-start", "calc(10px - 0.5em)", "-10px");
test_computed_value("scroll-margin-block-end", "10px");
test_computed_value("scroll-margin-block-end", "calc(10px - 0.5em)", "-10px");
test_computed_value("scroll-margin-block", "10px");
test_computed_value("scroll-margin-block", "calc(10px - 0.5em)", "-10px");
test_computed_value("scroll-margin-block", "1px 2px");
</script>
</body>
</html>

View file

@ -2,9 +2,9 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap: getComputedStyle().scrollMarginInline</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-margin-inline">
<meta name="assert" content="scroll-margin-inline computed value is absolute length.">
<title>CSS Scroll Snap: getComputedStyle().scrollMarginBlock / scrollMarginInline</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#margin-longhands-logical">
<meta name="assert" content="scroll-margin-block, scroll-margin-inline computed value is absolute length.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
@ -17,17 +17,25 @@
}
</style>
<script>
test_computed_value("scroll-margin-block-start", "10px");
test_computed_value("scroll-margin-block-start", "calc(10px - 0.5em)", "-10px");
test_computed_value("scroll-margin-block-end", "10px");
test_computed_value("scroll-margin-block-end", "calc(10px - 0.5em)", "-10px");
test_computed_value("scroll-margin-inline-start", "10px");
test_computed_value("scroll-margin-inline-start", "calc(10px - 0.5em)", "-10px");
test_computed_value("scroll-margin-inline-end", "10px");
test_computed_value("scroll-margin-inline-end", "calc(10px - 0.5em)", "-10px");
test_computed_value("scroll-margin-block", "10px");
test_computed_value("scroll-margin-block", "calc(10px - 0.5em)", "-10px");
test_computed_value("scroll-margin-block", "1px 2px");
test_computed_value("scroll-margin-inline", "10px");
test_computed_value("scroll-margin-inline", "calc(10px - 0.5em)", "-10px");
test_computed_value("scroll-margin-inline", "1px 2px");
</script>
</body>

View file

@ -2,27 +2,41 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-margin-inline with invalid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-margin-inline">
<meta name="assert" content="scroll-margin-inline supports only the grammar '<length>{1,2}'.">
<title>CSS Scroll Snap Test: scroll-margin-block, scroll-margin-inline with invalid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#margin-longhands-logical">
<meta name="assert" content="scroll-margin-block, scroll-margin-inline support only the grammar '<length>{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("scroll-margin-block-start", "auto");
test_invalid_value("scroll-margin-block-start", "20%");
test_invalid_value("scroll-margin-block-start", "-30%");
test_invalid_value("scroll-margin-block-start", "1px 2px");
test_invalid_value("scroll-margin-block-end", "auto");
test_invalid_value("scroll-margin-block-end", "20%");
test_invalid_value("scroll-margin-block-end", "-30%");
test_invalid_value("scroll-margin-block-end", "1px 2px");
test_invalid_value("scroll-margin-inline-start", "auto");
test_invalid_value("scroll-margin-inline-start", "20%");
test_invalid_value("scroll-margin-inline-start", "-30%");
test_invalid_value("scroll-margin-inline-start", "1px 2px");
test_invalid_value("scroll-margin-inline-end", "auto");
test_invalid_value("scroll-margin-inline-end", "20%");
test_invalid_value("scroll-margin-inline-end", "-30%");
test_invalid_value("scroll-margin-inline-end", "1px 2px");
test_invalid_value("scroll-margin-block", "auto");
test_invalid_value("scroll-margin-block", "20%");
test_invalid_value("scroll-margin-block", "-30%");
test_invalid_value("scroll-margin-block", "1px 2px 3px");
test_invalid_value("scroll-margin-inline", "auto");
test_invalid_value("scroll-margin-inline", "20%");
test_invalid_value("scroll-margin-inline", "-30%");

View file

@ -2,23 +2,32 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-margin-inline with valid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-margin-inline">
<meta name="assert" content="scroll-margin-inline supports the full grammar '<length>{1,2}'.">
<title>CSS Scroll Snap Test: scroll-margin-block, scroll-margin-inline with valid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#margin-longhands-logical">
<meta name="assert" content="scroll-margin-block, scroll-margin-inline support the full grammar '<length>{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value("scroll-margin-block-start", "-10px");
test_valid_value("scroll-margin-block-start", "calc(2em + 3ex)");
test_valid_value("scroll-margin-block-end", "-10px");
test_valid_value("scroll-margin-block-end", "calc(2em + 3ex)");
test_valid_value("scroll-margin-inline-start", "-10px");
test_valid_value("scroll-margin-inline-start", "calc(2em + 3ex)");
test_valid_value("scroll-margin-inline-end", "-10px");
test_valid_value("scroll-margin-inline-end", "calc(2em + 3ex)");
test_valid_value("scroll-margin-block", "-10px");
test_valid_value("scroll-margin-block", "calc(2em + 3ex)");
test_valid_value("scroll-margin-block", "1px 2px");
test_valid_value("scroll-margin-inline", "-10px");
test_valid_value("scroll-margin-inline", "calc(2em + 3ex)");
test_valid_value("scroll-margin-inline", "1px 2px");

View file

@ -1,32 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-margin-block with invalid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-margin-block">
<meta name="assert" content="scroll-margin-block supports only the grammar '<length>{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("scroll-margin-block-start", "auto");
test_invalid_value("scroll-margin-block-start", "20%");
test_invalid_value("scroll-margin-block-start", "-30%");
test_invalid_value("scroll-margin-block-start", "1px 2px");
test_invalid_value("scroll-margin-block-end", "auto");
test_invalid_value("scroll-margin-block-end", "20%");
test_invalid_value("scroll-margin-block-end", "-30%");
test_invalid_value("scroll-margin-block-end", "1px 2px");
test_invalid_value("scroll-margin-block", "auto");
test_invalid_value("scroll-margin-block", "20%");
test_invalid_value("scroll-margin-block", "-30%");
test_invalid_value("scroll-margin-block", "1px 2px 3px");
</script>
</body>
</html>

View file

@ -1,28 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-margin-block with valid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-margin-block">
<meta name="assert" content="scroll-margin-block supports the full grammar '<length>{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value("scroll-margin-block-start", "-10px");
test_valid_value("scroll-margin-block-start", "calc(2em + 3ex)");
test_valid_value("scroll-margin-block-end", "-10px");
test_valid_value("scroll-margin-block-end", "calc(2em + 3ex)");
test_valid_value("scroll-margin-block", "-10px");
test_valid_value("scroll-margin-block", "calc(2em + 3ex)");
test_valid_value("scroll-margin-block", "1px 2px");
</script>
</body>
</html>

View file

@ -1,48 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap: getComputedStyle().scrollPaddingBlock</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-padding-block">
<meta name="assert" content="scroll-padding-block computed value is per side, either the keyword auto or a computed <length-percentage> value.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
</head>
<body>
<div id="target"></div>
<style>
#target {
font-size: 40px;
}
</style>
<script>
test_computed_value("scroll-padding-block-start", "auto");
test_computed_value("scroll-padding-block-start", "10px");
test_computed_value("scroll-padding-block-start", "20%");
test_computed_value("scroll-padding-block-start", "calc(10px + 0.5em)", "30px");
test_computed_value("scroll-padding-block-start", "calc(10px - 0.5em)", "0px");
test_computed_value("scroll-padding-block-start", "calc(50% + 60px)");
test_computed_value("scroll-padding-block-end", "auto");
test_computed_value("scroll-padding-block-end", "10px");
test_computed_value("scroll-padding-block-end", "20%");
test_computed_value("scroll-padding-block-end", "calc(10px + 0.5em)", "30px");
test_computed_value("scroll-padding-block-end", "calc(10px - 0.5em)", "0px");
test_computed_value("scroll-padding-block-end", "calc(50% + 60px)");
test_computed_value("scroll-padding-block", "auto");
test_computed_value("scroll-padding-block", "10px");
test_computed_value("scroll-padding-block", "20%");
test_computed_value("scroll-padding-block", "calc(10px + 0.5em)", "30px");
test_computed_value("scroll-padding-block", "calc(10px - 0.5em)", "0px");
test_computed_value("scroll-padding-block", "calc(50% + 60px)");
test_computed_value("scroll-padding-block", "1px 2px");
test_computed_value("scroll-padding-block", "1px auto");
test_computed_value("scroll-padding-block", "auto auto", "auto");
</script>
</body>
</html>

View file

@ -2,9 +2,9 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap: getComputedStyle().scrollPaddingInline</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-padding-inline">
<meta name="assert" content="scroll-padding-inline computed value is per side, either the keyword auto or a computed <length-percentage> value.">
<title>CSS Scroll Snap: getComputedStyle().scrollPaddingBlock / scrollPaddingInline</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#padding-longhands-logical">
<meta name="assert" content="scroll-padding-block, scroll-padding-inline computed value is per side, either the keyword auto or a computed <length-percentage> value.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
@ -17,6 +17,20 @@
}
</style>
<script>
test_computed_value("scroll-padding-block-start", "auto");
test_computed_value("scroll-padding-block-start", "10px");
test_computed_value("scroll-padding-block-start", "20%");
test_computed_value("scroll-padding-block-start", "calc(10px + 0.5em)", "30px");
test_computed_value("scroll-padding-block-start", "calc(10px - 0.5em)", "0px");
test_computed_value("scroll-padding-block-start", "calc(50% + 60px)");
test_computed_value("scroll-padding-block-end", "auto");
test_computed_value("scroll-padding-block-end", "10px");
test_computed_value("scroll-padding-block-end", "20%");
test_computed_value("scroll-padding-block-end", "calc(10px + 0.5em)", "30px");
test_computed_value("scroll-padding-block-end", "calc(10px - 0.5em)", "0px");
test_computed_value("scroll-padding-block-end", "calc(50% + 60px)");
test_computed_value("scroll-padding-inline-start", "auto");
test_computed_value("scroll-padding-inline-start", "10px");
test_computed_value("scroll-padding-inline-start", "20%");
@ -24,7 +38,6 @@ test_computed_value("scroll-padding-inline-start", "calc(10px + 0.5em)", "30px")
test_computed_value("scroll-padding-inline-start", "calc(10px - 0.5em)", "0px");
test_computed_value("scroll-padding-inline-start", "calc(50% + 60px)");
test_computed_value("scroll-padding-inline-end", "auto");
test_computed_value("scroll-padding-inline-end", "10px");
test_computed_value("scroll-padding-inline-end", "20%");
@ -33,13 +46,22 @@ test_computed_value("scroll-padding-inline-end", "calc(10px - 0.5em)", "0px");
test_computed_value("scroll-padding-inline-end", "calc(50% + 60px)");
test_computed_value("scroll-padding-block", "auto");
test_computed_value("scroll-padding-block", "10px");
test_computed_value("scroll-padding-block", "20%");
test_computed_value("scroll-padding-block", "calc(10px + 0.5em)", "30px");
test_computed_value("scroll-padding-block", "calc(10px - 0.5em)", "0px");
test_computed_value("scroll-padding-block", "calc(50% + 60px)");
test_computed_value("scroll-padding-block", "1px 2px");
test_computed_value("scroll-padding-block", "1px auto");
test_computed_value("scroll-padding-block", "auto auto", "auto");
test_computed_value("scroll-padding-inline", "auto");
test_computed_value("scroll-padding-inline", "10px");
test_computed_value("scroll-padding-inline", "20%");
test_computed_value("scroll-padding-inline", "calc(10px + 0.5em)", "30px");
test_computed_value("scroll-padding-inline", "calc(10px - 0.5em)", "0px");
test_computed_value("scroll-padding-inline", "calc(50% + 60px)");
test_computed_value("scroll-padding-inline", "1px 2px");
test_computed_value("scroll-padding-inline", "1px auto");
test_computed_value("scroll-padding-inline", "auto auto", "auto");

View file

@ -0,0 +1,54 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-padding-block, scroll-padding-inline with invalid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#padding-longhands-logical">
<meta name="assert" content="scroll-padding-block, scroll-padding-inline supports only the grammar '[ auto | <length-percentage> ]{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("scroll-padding-block-start", "none");
test_invalid_value("scroll-padding-block-start", "-10px");
test_invalid_value("scroll-padding-block-start", "10px 20%");
test_invalid_value("scroll-padding-block-start", "fit-content");
test_invalid_value("scroll-padding-block-end", "none");
test_invalid_value("scroll-padding-block-end", "-10px");
test_invalid_value("scroll-padding-block-end", "10px 20%");
test_invalid_value("scroll-padding-block-end", "max-content");
test_invalid_value("scroll-padding-inline-start", "none");
test_invalid_value("scroll-padding-inline-start", "-10px");
test_invalid_value("scroll-padding-inline-start", "10px 20%");
test_invalid_value("scroll-padding-inline-start", "min-content");
test_invalid_value("scroll-padding-inline-end", "none");
test_invalid_value("scroll-padding-inline-end", "-10px");
test_invalid_value("scroll-padding-inline-end", "10px 20%");
test_invalid_value("scroll-padding-inline-end", "max-content");
test_invalid_value("scroll-padding-block", "none");
test_invalid_value("scroll-padding-block", "-10px");
test_invalid_value("scroll-padding-block", "-20%");
test_invalid_value("scroll-padding-block", "calc(auto)");
test_invalid_value("scroll-padding-block", "10px 20px 30px 40px 50px");
test_invalid_value("scroll-padding-block", "fit-content");
test_invalid_value("scroll-padding-block", "max-content");
test_invalid_value("scroll-padding-block", "min-content");
test_invalid_value("scroll-padding-inline", "none");
test_invalid_value("scroll-padding-inline", "-10px");
test_invalid_value("scroll-padding-inline", "-20%");
test_invalid_value("scroll-padding-inline", "calc(auto)");
test_invalid_value("scroll-padding-inline", "10px 20px 30px 40px 50px");
test_invalid_value("scroll-padding-inline", "fit-content");
test_invalid_value("scroll-padding-inline", "max-content");
test_invalid_value("scroll-padding-inline", "min-content");
</script>
</body>
</html>

View file

@ -2,22 +2,33 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-padding-inline with valid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-padding-inline">
<meta name="assert" content="scroll-padding-inline supports the full grammar '[ auto | <length-percentage> ]{1,2}'.">
<title>CSS Scroll Snap Test: scroll-padding-block, scroll-padding-inline with valid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#padding-longhands-logical">
<meta name="assert" content="scroll-padding-block, scroll-padding-inline supports the full grammar '[ auto | <length-percentage> ]{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value("scroll-padding-block-start", "auto");
test_valid_value("scroll-padding-block-start", "10px");
test_valid_value("scroll-padding-block-start", "20%");
test_valid_value("scroll-padding-block-start", "calc(2em + 3ex)");
test_valid_value("scroll-padding-block-start", "calc(50% + 60px)");
test_valid_value("scroll-padding-block-end", "auto");
test_valid_value("scroll-padding-block-end", "10px");
test_valid_value("scroll-padding-block-end", "20%");
test_valid_value("scroll-padding-block-end", "calc(2em + 3ex)");
test_valid_value("scroll-padding-block-end", "calc(50% + 60px)");
test_valid_value("scroll-padding-inline-start", "auto");
test_valid_value("scroll-padding-inline-start", "10px");
test_valid_value("scroll-padding-inline-start", "20%");
test_valid_value("scroll-padding-inline-start", "calc(2em + 3ex)");
test_valid_value("scroll-padding-inline-start", "calc(50% + 60px)");
test_valid_value("scroll-padding-inline-end", "auto");
test_valid_value("scroll-padding-inline-end", "10px");
test_valid_value("scroll-padding-inline-end", "20%");
@ -25,12 +36,20 @@ test_valid_value("scroll-padding-inline-end", "calc(2em + 3ex)");
test_valid_value("scroll-padding-inline-end", "calc(50% + 60px)");
test_valid_value("scroll-padding-block", "auto");
test_valid_value("scroll-padding-block", "10px");
test_valid_value("scroll-padding-block", "20%");
test_valid_value("scroll-padding-block", "calc(2em + 3ex)");
test_valid_value("scroll-padding-block", "calc(50% + 60px)");
test_valid_value("scroll-padding-block", "1px 2px");
test_valid_value("scroll-padding-block", "1px auto");
test_valid_value("scroll-padding-block", "auto auto", "auto");
test_valid_value("scroll-padding-inline", "auto");
test_valid_value("scroll-padding-inline", "10px");
test_valid_value("scroll-padding-inline", "20%");
test_valid_value("scroll-padding-inline", "calc(2em + 3ex)");
test_valid_value("scroll-padding-inline", "calc(50% + 60px)");
test_valid_value("scroll-padding-inline", "1px 2px");
test_valid_value("scroll-padding-inline", "1px auto");
test_valid_value("scroll-padding-inline", "auto auto", "auto");

View file

@ -1,29 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-padding-block with invalid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-padding-block">
<meta name="assert" content="scroll-padding-block supports only the grammar '[ auto | <length-percentage> ]{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("scroll-padding-block-start", "none");
test_invalid_value("scroll-padding-block-start", "-10px");
test_invalid_value("scroll-padding-block-start", "10px 20%");
test_invalid_value("scroll-padding-block-end", "none");
test_invalid_value("scroll-padding-block-end", "-10px");
test_invalid_value("scroll-padding-block-end", "10px 20%");
test_invalid_value("scroll-padding-block", "none");
test_invalid_value("scroll-padding-block", "-10px");
test_invalid_value("scroll-padding-block", "10px 20px 30px 40px 50px");
</script>
</body>
</html>

View file

@ -1,39 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-padding-block with valid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-padding-block">
<meta name="assert" content="scroll-padding-block supports the full grammar '[ auto | <length-percentage> ]{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value("scroll-padding-block-start", "auto");
test_valid_value("scroll-padding-block-start", "10px");
test_valid_value("scroll-padding-block-start", "20%");
test_valid_value("scroll-padding-block-start", "calc(2em + 3ex)");
test_valid_value("scroll-padding-block-start", "calc(50% + 60px)");
test_valid_value("scroll-padding-block-end", "auto");
test_valid_value("scroll-padding-block-end", "10px");
test_valid_value("scroll-padding-block-end", "20%");
test_valid_value("scroll-padding-block-end", "calc(2em + 3ex)");
test_valid_value("scroll-padding-block-end", "calc(50% + 60px)");
test_valid_value("scroll-padding-block", "auto");
test_valid_value("scroll-padding-block", "10px");
test_valid_value("scroll-padding-block", "20%");
test_valid_value("scroll-padding-block", "calc(2em + 3ex)");
test_valid_value("scroll-padding-block", "calc(50% + 60px)");
test_valid_value("scroll-padding-block", "1px 2px");
test_valid_value("scroll-padding-block", "1px auto");
test_valid_value("scroll-padding-block", "auto auto", "auto");
</script>
</body>
</html>

View file

@ -1,29 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-padding-inline with invalid values</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-padding-inline">
<meta name="assert" content="scroll-padding-inline supports only the grammar '[ auto | <length-percentage> ]{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("scroll-padding-inline-start", "none");
test_invalid_value("scroll-padding-inline-start", "-10px");
test_invalid_value("scroll-padding-inline-start", "10px 20%");
test_invalid_value("scroll-padding-inline-end", "none");
test_invalid_value("scroll-padding-inline-end", "-10px");
test_invalid_value("scroll-padding-inline-end", "10px 20%");
test_invalid_value("scroll-padding-inline", "none");
test_invalid_value("scroll-padding-inline", "-10px");
test_invalid_value("scroll-padding-inline", "10px 20px 30px 40px 50px");
</script>
</body>
</html>

View file

@ -15,30 +15,38 @@ test_invalid_value("scroll-padding-top", "20");
test_invalid_value("scroll-padding-top", "-20px");
test_invalid_value("scroll-padding-top", "none");
test_invalid_value("scroll-padding-top", "10px 20%");
test_invalid_value("scroll-padding-top", "fit-content");
test_invalid_value("scroll-padding-right", "20");
test_invalid_value("scroll-padding-right", "-20px");
test_invalid_value("scroll-padding-right", "none");
test_invalid_value("scroll-padding-right", "10px 20%");
test_invalid_value("scroll-padding-right", "max-content");
test_invalid_value("scroll-padding-bottom", "20");
test_invalid_value("scroll-padding-bottom", "-20px");
test_invalid_value("scroll-padding-bottom", "none");
test_invalid_value("scroll-padding-bottom", "10px 20%");
test_invalid_value("scroll-padding-bottom", "min-content");
test_invalid_value("scroll-padding-left", "20");
test_invalid_value("scroll-padding-left", "-20px");
test_invalid_value("scroll-padding-left", "none");
test_invalid_value("scroll-padding-left", "10px 20%");
test_invalid_value("scroll-padding-left", "fit-content");
test_invalid_value("scroll-padding", "20");
test_invalid_value("scroll-padding", "-20px");
test_invalid_value("scroll-padding", "none");
test_invalid_value("scroll-padding", "calc(auto)");
test_invalid_value("scroll-padding", "10px 20px 30px 40px 50px");
test_invalid_value("scroll-padding", "fit-content");
test_invalid_value("scroll-padding", "max-content");
test_invalid_value("scroll-padding", "min-content");
</script>
</body>
</html>

View file

@ -0,0 +1,87 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>shape-image-threshold interpolation</title>
<link rel="help" href="https://drafts.csswg.org/css-shapes/#shape-image-threshold-property">
<meta name="assert" content="shape-image-threshold supports animation by computed value">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
<style>
.parent {
shape-image-threshold: 0.4;
}
.target {
shape-image-threshold: 0.6;
}
</style>
<body></body>
<script>
test_interpolation({
property: 'shape-image-threshold',
from: neutralKeyframe,
to: '0.8',
}, [
{at: -1.5, expect: '0.3'},
{at: -0.5, expect: '0.5'},
{at: 0, expect: '0.6'},
{at: 0.5, expect: '0.7'},
{at: 1, expect: '0.8'},
{at: 1.5, expect: '0.9'},
]);
test_interpolation({
property: 'shape-image-threshold',
from: 'initial',
to: '0.8',
}, [
{at: -1.5, expect: '0'},
{at: -0.5, expect: '0'},
{at: 0, expect: '0'},
{at: 0.5, expect: '0.4'},
{at: 1, expect: '0.8'},
{at: 1.5, expect: '1'},
]);
test_interpolation({
property: 'shape-image-threshold',
from: 'inherit',
to: '0.8',
}, [
{at: -1.5, expect: '0'},
{at: -0.5, expect: '0.2'},
{at: 0, expect: '0.4'},
{at: 0.5, expect: '0.6'},
{at: 1, expect: '0.8'},
{at: 1.5, expect: '1'},
]);
test_interpolation({
property: 'shape-image-threshold',
from: 'unset',
to: '0.8',
}, [
{at: -1.5, expect: '0'},
{at: -0.5, expect: '0'},
{at: 0, expect: '0'},
{at: 0.5, expect: '0.4'},
{at: 1, expect: '0.8'},
{at: 1.5, expect: '1'},
]);
test_interpolation({
property: 'shape-image-threshold',
from: '0.5',
to: '1'
}, [
{at: -1.5, expect: '0'},
{at: -0.5, expect: '0.25'},
{at: 0, expect: '0.5'},
{at: 0.5, expect: '0.75'},
{at: 1, expect: '1'},
{at: 1.5, expect: '1'}
]);
</script>

View file

@ -0,0 +1,87 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>shape-margin interpolation</title>
<link rel="help" href="https://drafts.csswg.org/css-shapes/#shape-margin-property">
<meta name="assert" content="shape-margin supports animation by computed value">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
<style>
.parent {
shape-margin: 30px;
}
.target {
shape-margin: 10px;
}
</style>
<body></body>
<script>
test_interpolation({
property: 'shape-margin',
from: neutralKeyframe,
to: '20px',
}, [
{at: -0.3, expect: '7px'},
{at: 0, expect: '10px'},
{at: 0.3, expect: '13px'},
{at: 0.6, expect: '16px'},
{at: 1, expect: '20px'},
{at: 1.5, expect: '25px'},
]);
test_interpolation({
property: 'shape-margin',
from: 'initial',
to: '20px',
}, [
{at: -0.3, expect: '0px'},
{at: 0, expect: '0px'},
{at: 0.3, expect: '6px'},
{at: 0.6, expect: '12px'},
{at: 1, expect: '20px'},
{at: 1.5, expect: '30px'},
]);
test_interpolation({
property: 'shape-margin',
from: 'inherit',
to: '20px',
}, [
{at: -0.3, expect: '33px'},
{at: 0, expect: '30px'},
{at: 0.3, expect: '27px'},
{at: 0.6, expect: '24px'},
{at: 1, expect: '20px'},
{at: 1.5, expect: '15px'},
]);
test_interpolation({
property: 'shape-margin',
from: 'unset',
to: '20px',
}, [
{at: -0.3, expect: '0px'},
{at: 0, expect: '0px'},
{at: 0.3, expect: '6px'},
{at: 0.6, expect: '12px'},
{at: 1, expect: '20px'},
{at: 1.5, expect: '30px'},
]);
test_interpolation({
property: 'shape-margin',
from: '0px',
to: '100px'
}, [
{at: -0.3, expect: '0px'}, // CSS shape-margin can't be negative.
{at: 0, expect: '0px'},
{at: 0.3, expect: '30px'},
{at: 0.6, expect: '60px'},
{at: 1, expect: '100px'},
{at: 1.5, expect: '150px'},
]);
</script>

View file

@ -0,0 +1,137 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>shape-outside interpolation</title>
<link rel="help" href="https://drafts.csswg.org/css-shapes/#shape-outside-property">
<meta name="assert" content="shape-outside supports animation as <basic-shape> or discrete">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/interpolation-testcommon.js"></script>
<style>
.parent {
shape-outside: circle(80% at 30% 10%);
}
.target {
shape-outside: circle(60% at 10% 30%);
}
</style>
<body></body>
<script>
/* TODO: add inset test once blend() works for it */
test_interpolation({
property: 'shape-outside',
from: neutralKeyframe,
to: 'circle(40% at 20% 20%)',
}, [
{at: -0.3, expect: 'circle(66% at 7% 33%)'},
{at: 0, expect: 'circle(60% at 10% 30%)'},
{at: 0.3, expect: 'circle(54% at 13% 27%)'},
{at: 0.6, expect: 'circle(48% at 16% 24%)'},
{at: 1, expect: 'circle(40% at 20% 20%)'},
{at: 1.5, expect: 'circle(30% at 25% 15%)'},
]);
test_no_interpolation({
property: 'shape-outside',
from: 'initial',
to: 'circle(40% at 20% 20%)',
});
test_interpolation({
property: 'shape-outside',
from: 'inherit',
to: 'circle(40% at 20% 20%)',
}, [
{at: -0.3, expect: 'circle(92% at 33% 7%)'},
{at: 0, expect: 'circle(80% at 30% 10%)'},
{at: 0.3, expect: 'circle(68% at 27% 13%)'},
{at: 0.6, expect: 'circle(56% at 24% 16%)'},
{at: 1, expect: 'circle(40% at 20% 20%)'},
{at: 1.5, expect: 'circle(20% at 15% 25%)'},
]);
test_no_interpolation({
property: 'shape-outside',
from: 'unset',
to: 'circle(40% at 20% 20%)',
});
test_interpolation({
property: 'shape-outside',
from: 'circle(100% at 0% 0%)',
to: 'circle(50% at 25% 25%)',
}, [
{at: -0.3, expect: 'circle(115% at -7.5% -7.5%)'},
{at: 0, expect: 'circle(100% at 0% 0%)'},
{at: 0.3, expect: 'circle(85% at 7.5% 7.5%)'},
{at: 0.6, expect: 'circle(70% at 15% 15%)'},
{at: 1, expect: 'circle(50% at 25% 25%)'},
{at: 1.5, expect: 'circle(25% at 37.5% 37.5%)'}
]);
test_interpolation({
property: 'shape-outside',
from: 'ellipse(100% 100% at 0% 0%)',
to: 'ellipse(50% 50% at 25% 25%)',
}, [
{at: -0.3, expect: 'ellipse(115% 115% at -7.5% -7.5%)'},
{at: 0, expect: 'ellipse(100% 100% at 0% 0%)'},
{at: 0.3, expect: 'ellipse(85% 85% at 7.5% 7.5%)'},
{at: 0.6, expect: 'ellipse(70% 70% at 15% 15%)'},
{at: 1, expect: 'ellipse(50% 50% at 25% 25%)'},
{at: 1.5, expect: 'ellipse(25% 25% at 37.5% 37.5%)'}
]);
test_interpolation({
property: 'shape-outside',
from: 'polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)',
to: 'polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)',
}, [
{at: -0.3, expect: 'polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)'},
{at: 0, expect: 'polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)'},
{at: 0.3, expect: 'polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)'},
{at: 0.6, expect: 'polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)'},
{at: 1, expect: 'polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)'},
{at: 1.5, expect: 'polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)'}
]);
test_no_interpolation({
property: 'shape-outside',
from: 'polygon(evenodd, 0px 0px, 25px 25px, 50px 50px)',
to: 'polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)',
});
test_interpolation({
property: 'shape-outside',
from: 'inset(100%)',
to: 'inset(120%)',
}, [
{at: -0.3, expect: 'inset(94%)'},
{at: 0, expect: 'inset(100%)'},
{at: 0.3, expect: 'inset(106%)'},
{at: 0.6, expect: 'inset(112%)'},
{at: 1, expect: 'inset(120%)'},
{at: 1.5, expect: 'inset(130%)'},
]);
test_no_interpolation({
property: 'shape-outside',
from: 'none',
to: 'ellipse(100% 100% at 0% 0%)',
});
// TODO: add intermediate keyframe tests when CSS shapes position computed values are cleaned up
test_interpolation({
property: 'shape-outside',
from: 'circle(25% at right 5% bottom 15px)',
to: 'circle(45% at right 25% bottom 35px)',
}, [
{at: 0.25, expect: 'circle(30% at 90% calc(-20px + 100%))'},
{at: 0.5, expect: 'circle(35% at 85% calc(-25px + 100%))'},
{at: 0.75, expect: 'circle(40% at 80% calc(-30px + 100%))'},
]);
</script>

View file

@ -0,0 +1,36 @@
# Android WebView
To run WPT on WebView on an Android device, some additional set-up is required.
Currently, Android WebView support is experimental.
* Please check [Chrome for Android](chrome_android) for the common
instructions for Android support first.
* Install an up-to-date version of system webview shell:
* Go to
[chromium-browser-snapshots](https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Android/)
* Find the subdirectory with the highest number and click it.
* Download `chrome-android.zip` file and unzip it.
* Install `SystemWebViewShell.apk`.
* On emulator, system webview shell may already be installed by default. Then
you may need to remove the existing apk:
* Choose a userdebug build.
* Run an emulator with
[writable system partition from command line](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_emulator.md/)
* If you have an issue with ChromeDriver version, try removing
`_venv/bin/chromedriver` such that wpt runner can install a matching version
automatically. Failing that, please check your environment path and make
sure that no other ChromeDriver is used.
Example command line:
```bash
./wpt run --test-type=testharness android_webview <TESTS>
```
* Note that there is no support for channel or automatic installation. The test
will be run against the current WebView version installed on the device.
* Reftests are not supported at the moment.

View file

@ -144,6 +144,7 @@ Additional browser-specific documentation:
chrome
chrome_android
android_webview
safari
```

View file

@ -0,0 +1,25 @@
// META: global=!window,worker
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: timeout=long
// Note: This test doesn't cover the Window context, see idlharness.window.js
// for that coverage and why it can't be merged into this test.
'use strict';
idl_test(
['dom'],
['html'],
idl_array => {
idl_array.add_objects({
EventTarget: ['new EventTarget()'],
Event: ['new Event("foo")'],
CustomEvent: ['new CustomEvent("foo")'],
AbortController: ['new AbortController()'],
AbortSignal: ['new AbortController().signal'],
});
}
);
done();

View file

@ -0,0 +1,47 @@
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: script=/common/subset-tests-by-key.js
// META: variant=?include=Node
// META: variant=?exclude=Node
// META: timeout=long
// Note: This isn't merged into idlharness.any.js because of the use of variants,
// i.e., include=Node wouldn't make sense for workers.
'use strict';
idl_test(
['dom'],
['html'],
idl_array => {
self.xmlDoc = document.implementation.createDocument(null, '', null);
self.detachedRange = document.createRange();
detachedRange.detach();
self.element = xmlDoc.createElementNS(null, 'test');
element.setAttribute('bar', 'baz');
idl_array.add_objects({
EventTarget: ['new EventTarget()'],
Event: ['document.createEvent("Event")', 'new Event("foo")'],
CustomEvent: ['new CustomEvent("foo")'],
AbortController: ['new AbortController()'],
AbortSignal: ['new AbortController().signal'],
Document: ['new Document()'],
XMLDocument: ['xmlDoc'],
DOMImplementation: ['document.implementation'],
DocumentFragment: ['document.createDocumentFragment()'],
DocumentType: ['document.doctype'],
Element: ['element'],
Attr: ['document.querySelector("[id]").attributes[0]'],
Text: ['document.createTextNode("abc")'],
ProcessingInstruction: ['xmlDoc.createProcessingInstruction("abc", "def")'],
Comment: ['document.createComment("abc")'],
Range: ['document.createRange()', 'detachedRange'],
NodeIterator: ['document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)'],
TreeWalker: ['document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)'],
NodeList: ['document.querySelectorAll("script")'],
HTMLCollection: ['document.body.children'],
DOMTokenList: ['document.body.classList'],
});
}
);

View file

@ -1,63 +0,0 @@
<!doctype html>
<meta charset=utf-8>
<title>DOM IDL tests</title>
<meta name="timeout" content="long">
<meta name="variant" content="?include=Node">
<meta name="variant" content="?exclude=Node">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/common/subset-tests-by-key.js></script>
<script src=/resources/WebIDLParser.js></script>
<script src=/resources/idlharness.js></script>
<h1>DOM IDL tests</h1>
<div id=log></div>
<script>
"use strict";
var xmlDoc = document.implementation.createDocument(null, "", null);
var detachedRange = document.createRange();
detachedRange.detach();
var element = xmlDoc.createElementNS(null, "test");
element.setAttribute("bar", "baz");
var idlArray = new IdlArray();
function doTest([html, dom]) {
idlArray.add_idls(dom);
idlArray.add_dependency_idls(html);
idlArray.add_objects({
EventTarget: ['new EventTarget()'],
Event: ['document.createEvent("Event")', 'new Event("foo")'],
CustomEvent: ['new CustomEvent("foo")'],
AbortController: ['new AbortController()'],
AbortSignal: ['new AbortController().signal'],
Document: ['new Document()'],
XMLDocument: ['xmlDoc'],
DOMImplementation: ['document.implementation'],
DocumentFragment: ['document.createDocumentFragment()'],
DocumentType: ['document.doctype'],
Element: ['element'],
Attr: ['document.querySelector("[id]").attributes[0]'],
Text: ['document.createTextNode("abc")'],
ProcessingInstruction: ['xmlDoc.createProcessingInstruction("abc", "def")'],
Comment: ['document.createComment("abc")'],
Range: ['document.createRange()', 'detachedRange'],
NodeIterator: ['document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)'],
TreeWalker: ['document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)'],
NodeList: ['document.querySelectorAll("script")'],
HTMLCollection: ['document.body.children'],
DOMTokenList: ['document.body.classList'],
});
idlArray.test();
}
function fetchText(url) {
return fetch(url).then((response) => response.text());
}
promise_test(function() {
return Promise.all(['/interfaces/html.idl',
'/interfaces/dom.idl'].map(fetchText))
.then(doTest);
}, "Test driver");
</script>

View file

@ -0,0 +1,266 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Element Reflection for aria-activedescendant and aria-errormessage</title>
<link rel=help href="https://whatpr.org/html/3917/common-dom-interfaces.html#reflecting-content-attributes-in-idl-attributes:element">
<link rel="author" title="Meredith Lane" href="meredithl@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<div id="activedescendant" aria-activedescendant="x"></div>
<div id="parent-listbox" role="listbox" aria-activedescendant="i1">
<div role="option" id="i1">Item 1</div>
<div role="option" id="i2">Item 2</div>
</div>
<script>
test(function(t) {
const ancestor = document.getElementById("parent-listbox");
assert_equals(activedescendant.ariaActiveDescendantElement, null,
"invalid ID for relationship returns null");
const descendant1 = document.getElementById("i1");
const descendant2 = document.getElementById("i2");
// Element reference should be set if the content attribute was included.
assert_equals(ancestor.getAttribute("aria-activedescendant"), "i1", "check content attribute after parsing.");
assert_equals(ancestor.ariaActiveDescendantElement, i1, "check idl attribute after parsing.");
// If we set the content attribute, the element reference should reflect this.
ancestor.setAttribute("aria-activedescendant", "i2");
assert_equals(ancestor.ariaActiveDescendantElement, descendant2, "setting the content attribute updates the element reference.");
// Setting the element reference should be reflected in the content attribute.
ancestor.ariaActiveDescendantElement = descendant1;
assert_equals(ancestor.ariaActiveDescendantElement, descendant1, "getter should return the right element reference.");
assert_equals(ancestor.getAttribute("aria-activedescendant"), "i1", "content attribute should reflect the element reference.");
// Both content and IDL attribute should be nullable.
ancestor.ariaActiveDescendantElement = null;
assert_equals(ancestor.ariaActiveDescendantElement, null);
assert_false(ancestor.hasAttribute("aria-activedescendant"));
assert_equals(ancestor.getAttribute("aria-activedescendant"), null, "nullifying the idl attribute removes the content attribute.");
// Setting content attribute to non-existent or non compatible element should nullify the IDL attribute.
// Reset the element to an existant one.
ancestor.setAttribute("aria-activedescendant", "i1");
assert_equals(ancestor.ariaActiveDescendantElement, i1, "reset attribute.");
ancestor.setAttribute("aria-activedescendant", "non-existent-element");
assert_equals(ancestor.getAttribute("aria-activedescendant"), "non-existent-element");
assert_equals(ancestor.ariaActiveDescendantElement, null,"non-DOM content attribute should null the element reference");
}, "aria-activedescendant element reflection");
</script>
<div id="parent-listbox-2" role="listbox" aria-activedescendant="option1">
<div role="option" id="option1">Item 1</div>
<div role="option" id="option2">Item 2</div>
</div>
<script>
test(function(t) {
const ancestor = document.getElementById("parent-listbox-2");
const option1 = document.getElementById("option1");
const option2 = document.getElementById("option2");
assert_equals(ancestor.ariaActiveDescendantElement, option1);
option1.removeAttribute("id");
option2.setAttribute("id", "option1");
const option2Duplicate = document.getElementById("option1");
assert_equals(option2, option2Duplicate);
assert_equals(ancestor.ariaActiveDescendantElement, option2);
}, "If the content attribute is set directly, the IDL attribute getter always returns the first element whose ID matches the content attribute.");
</script>
<div id="blank-id-parent" role="listbox">
<div role="option" id="multiple-id"></div>
<div role="option" id="multiple-id"></div>
</div>
<script>
test(function(t) {
const ancestor = document.getElementById("blank-id-parent");
// Get second child of parent. This violates the setting of a reflected element
// as it will not be the first child of the parent with that ID, which should
// result in an empty string for the content attribute.
ancestor.ariaActiveDescendantElement = ancestor.children[1];
assert_true(ancestor.hasAttribute("aria-activedescendant"));
assert_equals(ancestor.getAttribute("aria-activedescendant"), "");
assert_equals(ancestor.ariaActiveDescendantElement, ancestor.children[1]);
}, "Setting the IDL attribute to an element which is not the first element in DOM order with its ID causes the content attribute to be an empty string");
</script>
<div id="outer-container">
<p id="light-paragraph">Hello world!</p>
<span class="shadow-host">
</span>
</div>
<script>
test(function(t) {
const shadowElement = document.querySelector(".shadow-host");
const shadow = shadowElement.attachShadow({mode: "open"});
const link = document.createElement("a");
shadow.appendChild(link);
const lightPara = document.getElementById("light-paragraph");
assert_equals(lightPara.ariaActiveDescendantElement, null);
// The given element crosses a shadow dom boundary, so it cannot be
// set as an element reference.
lightPara.ariaActiveDescendantElement = link;
assert_equals(lightPara.ariaActiveDescendantElement, null);
// The given element crosses a shadow dom boundary (upwards), so
// can be used as an element reference, but the content attribute
// should reflect the empty string.
link.ariaActiveDescendantElement = lightPara;
assert_equals(link.ariaActiveDescendantElement, lightPara);
assert_equals(link.getAttribute("aria-activedescendant"), "");
}, "Setting an element reference that crosses into a shadow tree is disallowed, but setting one that is in a shadow inclusive ancestor is allowed.");
</script>
<input id="startTime" ></input>
<span id="errorMessage">Invalid Time</span>
<script>
test(function(t) {
const inputElement = document.getElementById("startTime");
const errorMessage = document.getElementById("errorMessage");
inputElement.ariaErrorMessageElement = errorMessage;
assert_equals(inputElement.getAttribute("aria-errormessage"), "errorMessage");
inputElement.ariaErrorMessageElement = null;
assert_equals(inputElement.ariaErrorMessageElement, null, "blah");
assert_false(inputElement.hasAttribute("aria-errormessage"));
inputElement.setAttribute("aria-errormessage", "errorMessage");
assert_equals(inputElement.ariaErrorMessageElement, errorMessage);
}, "aria-errormessage");
</script>
<label>
Password:
<input id="password-field" type="password" aria-details="pw">
</label>
<ul>
<li id="list-item-1">First description.</li>
<li id="list-item-2">Second description.</li>
</ul>
<script>
test(function(t) {
const inputElement = document.getElementById("password-field");
const ul1 = document.getElementById("list-item-1");
const ul2 = document.getElementById("list-item-2");
assert_equals(inputElement.ariaDetailsElement, null);
inputElement.ariaDetailsElement = ul1;
assert_equals(inputElement.getAttribute("aria-details"), "list-item-1");
inputElement.ariaDetailsElement = ul2;
assert_equals(inputElement.getAttribute("aria-details"), "list-item-2");
}, "aria-details");
</script>
<div id="old-parent" role="listbox" aria-activedescendant="content-attr-element">
<div role="option" id="content-attr-element">Item 1</div>
<div role="option" id="idl-attr-element">Item 2</div>
</div>
<script>
test(function(t) {
const deletionParent = document.getElementById("old-parent");
const descendant1 = document.getElementById("content-attr-element");
const descendant2 = document.getElementById("idl-attr-element");
// Deleting an element set via the content attribute.
assert_equals(deletionParent.getAttribute("aria-activedescendant"), "content-attr-element");
assert_equals(deletionParent.ariaActiveDescendantElement, descendant1);
deletionParent.removeChild(descendant1);
assert_equals(deletionParent.getAttribute("aria-activedescendant"), "content-attr-element");
assert_equals(deletionParent.ariaActiveDescendantElement, null);
// Deleting an element set via the IDL attribute.
deletionParent.ariaActiveDescendantElement = descendant2;
assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idl-attr-element");
deletionParent.removeChild(descendant2);
assert_equals(deletionParent.ariaActiveDescendantElement, null);
// The content attribute will still reflect the id.
assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idl-attr-element");
}, "Deleting a reflected element should return null for the IDL attribute and cause the content attribute to become stale.");
</script>
<div id="parent" role="listbox" aria-activedescendant="original">
<div role="option" id="original">Item 1</div>
<div role="option" id="element-with-persistant-id">Item 2</div>
</div>
<script>
test(function(t) {
const parentNode = document.getElementById("parent");
const changingIdElement = document.getElementById("original");
const persistantIDElement = document.getElementById("element-with-persistant-id");
assert_equals(parentNode.ariaActiveDescendantElement, changingIdElement);
// Modify the id attribute.
changingIdElement.setAttribute("id", "new-id");
// The content attribute still reflects the old id, and we expect the
// Element reference to be null as there is no DOM node with id "original"
assert_equals(parentNode.getAttribute("aria-activedescendant"), "original");
assert_equals(parentNode.ariaActiveDescendantElement, null, "Element set via content attribute with a changed id will return null on getting");
parentNode.ariaActiveDescendantElement = changingIdElement;
assert_equals(parentNode.getAttribute("aria-activedescendant"), "new-id");
// The explicitly set element takes precendance over the content attribute.
// This means that we still return the same element reference, but the
// content attribute reflects the old id.
changingIdElement.setAttribute("id", "newer-id");
assert_equals(parentNode.ariaActiveDescendantElement, changingIdElement, "explicitly set element is still present even after the id has been changed");
assert_equals(parentNode.getAttribute("aria-activedescendant"), "new-id", "content attribute reflects the id that was present upon explicitly setting the element reference.");
}, "Changing the ID of an element causes the content attribute to become out of sync.");
</script>
<div id="light-parent" role="listbox">
<div role="option" id="light-element">Hello world!</div>
</div>
<div id="shadowHost"></div>
<script>
test(function(t) {
const shadowElement = document.getElementById("shadowHost");
const shadowHost = shadowElement.attachShadow({mode: "open"});
const lightParent = document.getElementById("light-parent");
const optionElement = document.getElementById("light-element");
lightParent.ariaActiveDescendantElement = optionElement;
assert_equals(lightParent.ariaActiveDescendantElement, optionElement);
// Move the referenced element into shadow DOM.
shadowHost.appendChild(optionElement);
assert_equals(lightParent.ariaActiveDescendantElement, null);
assert_equals(lightParent.getAttribute("aria-activedescendant"), "light-element");
// Move the referenced element back into light DOM.
lightParent.appendChild(optionElement);
assert_equals(lightParent.ariaActiveDescendantElement, optionElement);
}, "Reparenting an element into a descendant shadow scope nullifies the element reference.");
</script>
</html>

View file

@ -22,16 +22,15 @@
<script>
'use strict';
promise_test(async () => {
const idls = await fetch('/interfaces/encrypted-media.idl').then(r => r.text());
const html = await fetch('/interfaces/html.idl').then(r => r.text());
const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
var idl_array = new IdlArray();
idl_array.add_idls(idls);
idl_array.add_dependency_idls(html);
idl_array.add_dependency_idls(dom);
idl_array.test();
}, 'Test encrypted-media IDL');
idl_test(
['encrypted-media'],
['html', 'dom'],
idl_array => {
idl_array.add_objects({
Navigator: ['navigator'],
});
}
);
</script>
</body>
</html>

View file

@ -1,99 +0,0 @@
<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: buffer long-latency events before onload</title>
<meta name="timeout" content="long">
<button id='button' onmousedown='clickDelay()'>Generate a 'click' event</button>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=resources/event-timing-test-utils.js></script>
<img src=resources/slow-image.py>
<script>
let clickTimeMin;
let processingStartMin;
let onloadStart;
let firstClickStart = 0;
let firstClickEnd = 0;
function clickDelay() {
const onclickStart = performance.now();
if (firstClickStart === 0)
firstClickStart = onclickStart;
while(performance.now() < onclickStart + 60) {}
if (firstClickEnd === 0)
firstClickEnd = performance.now();
}
function validateEntries(entries) {
const entriesBeforeOnload = entries.filter(
e => e.startTime < onloadStart);
assert_equals(entriesBeforeOnload.length, 1,
"Long latency events before onload should be buffered.");
const entry = entriesBeforeOnload[0];
verifyClickEvent(entry, true);
assert_greater_than_equal(entry.startTime, clickTimeMin,
"The entry's start time should be later than clickTimeMin.");
assert_greater_than_equal(entry.processingStart, processingStartMin,
"The entry should be processed later than processingStartMin.");
assert_less_than_equal(entry.processingStart, firstClickStart,
"The processingStart must be before firstClickStart.")
assert_greater_than_equal(entry.processingEnd, firstClickEnd,
"The processingEnd must be after firstClickEnd.");
const entriesAfterOnload = entries.filter(
e => e.startTime >= onloadStart);
assert_equals(entriesAfterOnload.length, 1,
"Events after onload should still be buffered.");
}
/* Timeline:
Begin Busy Loop
Click 1 arrives
End Busy Loop
(Dispatch and Process Click 1 - buffered)
Onload Event Fires
Begin Busy Loop
Click 2 arrives
End Busy Loop
(Dispatch and Process Click 2 - not buffered)
*/
async_test(function(t) {
if (!window.PerformanceEventTiming)
assert_unreached("PerformanceEventTiming is not supported");
clickTimeMin = performance.now();
clickAndBlockMain('button');
// Event handlers will be dispatched asynchronously, so this will be called
// before processing begins.
processingStartMin = performance.now();
const bufferedEntries = [];
on_event(window, 'load', e => {
onloadStart = performance.now();
// Register the observer after the page has been loaded
const observer = new PerformanceObserver(function (entryList, observer) {
entryList.getEntries().forEach(function(entry) {
assert_equals(entry.entryType, "event");
if (entry.name === 'mousedown') {
bufferedEntries.push(entry);
}
if (bufferedEntries.length == 2) {
validateEntries(bufferedEntries)
observer.disconnect();
t.done();
}
});
})
observer.observe({
type: "event",
buffered: true
});
clickAndBlockMain('button');
});
}, "Event Timing: click, onload.");
</script>
</html>

View file

@ -0,0 +1,64 @@
<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: compare timing of two long clicks
</title>
<button id='button'>Generate a 'click' event</button>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=resources/event-timing-test-utils.js></script>
<script>
/* Timeline:
Observer starts
Long click 1
Long click 2
Once two clicks have been received by observer, compare the timestamps.
*/
let timeBeforeFirstClick;
let timeAfterFirstClick;
let timeAfterSecondClick;
let observedEntries = [];
async_test(function(t) {
if (!window.PerformanceEventTiming)
assert_unreached("PerformanceEventTiming is not supported");
new PerformanceObserver(t.step_func(entryList => {
observedEntries = observedEntries.concat(entryList.getEntries().filter(
entry => entry.name === 'mousedown'));
if (observedEntries.length < 2)
return;
assert_not_equals(timeBeforeFirstClick, undefined);
assert_not_equals(timeAfterFirstClick, undefined);
assert_not_equals(timeAfterSecondClick, undefined);
// First click.
verifyClickEvent(observedEntries[0]);
assert_between_exclusive(observedEntries[0].processingStart,
timeBeforeFirstClick,
timeAfterFirstClick,
"First click's processingStart");
assert_greater_than(timeAfterFirstClick, observedEntries[0].startTime,
"timeAfterFirstClick should be later than first click's start time.");
// Second click.
verifyClickEvent(observedEntries[1]);
assert_between_exclusive(observedEntries[1].processingStart,
timeAfterFirstClick,
timeAfterSecondClick,
"Second click's processingStart");
assert_greater_than(timeAfterSecondClick, observedEntries[1].startTime,
"timeAfterSecondClick should be later than second click's start time.");
t.done();
})).observe({type: 'event'});
timeBeforeFirstClick = performance.now();
clickAndBlockMain('button').then( () => {
timeAfterFirstClick = performance.now();
clickAndBlockMain('button').then(() => {
timeAfterSecondClick = performance.now();
})
});
}, "Event Timing: compare click timings.");
</script>
</html>

View file

@ -1,97 +0,0 @@
<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: Performance observers can observe long-latency events
</title>
<meta name="timeout" content="long">
<button id='button'>Generate a 'click' event</button>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=resources/event-timing-test-utils.js></script>
<img src=resources/slow-image.py>
<script>
let timeBeforeFirstClick;
let timeAfterFirstClick;
let timeAfterSecondClick;
let onloadStart;
let observedEntries = [];
function verifyObserverEntries(observedEntries) {
const entriesAfterFirstClick = observedEntries.filter(
e => e.startTime > timeAfterFirstClick);
assert_equals(entriesAfterFirstClick.length, 1,
'There should be one event after timeAfterFirstClick.');
const entry1 = entriesAfterFirstClick[0];
verifyClickEvent(entry1);
assert_greater_than(entry1.processingStart, timeAfterFirstClick,
"entry1's processing start should be after timeAfterFirstClick");
assert_less_than(entry1.processingStart, timeAfterSecondClick,
"entry1's processing start should be before timeAfterSecondClick.");
assert_greater_than(entry1.startTime, onloadStart,
"entry1's start time should be later than onloadStart.");
const entriesBeforeFirstClick =
observedEntries.filter(e => e.startTime < timeAfterFirstClick);
assert_equals(entriesBeforeFirstClick.length, 1,
'There should be one event before timeAfterFirstClick.'
);
const entry2 = entriesBeforeFirstClick[0];
verifyClickEvent(entry2);
assert_greater_than(entry2.processingStart, timeBeforeFirstClick,
"entry2's processing start should be after timeBeforeFirstClick");
assert_less_than(entry2.processingStart, timeAfterFirstClick,
"entry2's processing start should be berfore timeAfterFirstClick.");
assert_greater_than(timeAfterFirstClick, entry2.startTime,
"timeAfterFirstClick should be later than entry2's start time.");
// This should happen before onLoad
assert_greater_than(onloadStart, entry2.startTime,
"Onload should be later than entry's start time.");
}
/* Timeline:
Observer starts
Begin Busy Loop
Click 1 arrives
End Busy Loop
(Dispatch and Process Click 1 (buffered, observed))
Onload Event Fires
Begin Busy Loop
Click 2 arrives
End Busy Loop
(Dispatch and Process Click 2 (buffered, observed))
observer callback start
*/
async_test(function(t) {
if (!window.PerformanceEventTiming)
assert_unreached("PerformanceEventTiming is not supported");
const observerPromise = new Promise((resolve, reject) => {
new PerformanceObserver(function(entryList) {
observedEntries = observedEntries.concat(entryList.getEntries().filter(
entry => entry.name === 'mousedown'));
if (observedEntries.length < 2) return;
resolve(observedEntries);
}).observe({ type: 'event' , buffered: true});
});
timeBeforeFirstClick = performance.now();
clickAndBlockMain('button').then( () => {
timeAfterFirstClick = performance.now();
});
on_event(window, 'load', function(e) {
onloadStart = performance.now();
// After onload start and before registering observer.
const bufferPromise = clickAndBlockMain('button').then(wait);
Promise.all([observerPromise, bufferPromise]).then((results) => {
timeAfterSecondClick = performance.now();
t.step(verifyObserverEntries.bind(null, results[0]));
t.done();
});
});
}, "Event Timing: click, observer, onload, click.");
</script>
</html>

View file

@ -1,66 +0,0 @@
<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: buffer long-latency events before onload</title>
<meta name="timeout" content="long">
<button id='button'>Generate a 'click' event</button>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=resources/event-timing-test-utils.js></script>
<script>
/* Timeline:
Onload
PerformanceObserver is registered
Click 1
Click 2
PerformanceObserver should observe only one first-input entry.
(Dispatch and Process Click 2 - not buffered)
*/
async_test(function(t) {
if (!window.PerformanceEventTiming)
assert_unreached("PerformanceEventTiming is not supported");
let numFirstInputObserved = 0;
let numEventsObserved = 0;
let observedEventEntries = [];
const event_observer_promise = new Promise((resolve, reject) => {
new PerformanceObserver(function(entryList) {
observedEventEntries = entryList.getEntries().filter(
entry => entry.name === 'mousedown');
numEventsObserved += observedEventEntries.length;
if (numEventsObserved >= 2) {
// There should be 2 event entries.
assert_equals(numEventsObserved, 2,
"There should be 2 observed event entries.");
resolve();
}
}).observe({ type: 'event' , buffered: true});
});
const first_input_observer_promise = new Promise((resolve, reject) => {
new PerformanceObserver(function(entryList) {
assert_equals(entryList.getEntries().length, 1);
resolve();
}).observe({ type: 'first-input' , buffered: true});
});
on_event(window, 'load', function(e) {
const click_promise = clickAndBlockMain('button').then(() => {
clickAndBlockMain('button');
});
Promise.all(
[event_observer_promise, first_input_observer_promise, click_promise]
).then(() => {
t.done();
});
});
},
"Event Timing: check first-input after onload, observer, click, click."
);
</script>
</html>

View file

@ -1,80 +0,0 @@
<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: long-latency events after onload and before observer
registration are lost
</title>
<meta name="timeout" content="long">
<button id='button'>Generate a 'click' event</button>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=resources/event-timing-test-utils.js></script>
<script>
let callbackTime;
let observerStart;
let processingStartMin;
function verifyObserverEntries(observedEntries) {
// Verify observer entries. Should not include first click since we didn't
// buffered to true.
assert_equals(observedEntries.length, 1, "Long latency task after observer start should be observed.");
const entry = observedEntries[0];
verifyClickEvent(entry);
assert_greater_than(entry.processingStart, processingStartMin,
"The entry's processing start should be later than processingStartMin.");
assert_greater_than(callbackTime, entry.processingStart,
"The callback time should be later than the entry's processing start.");
assert_greater_than(entry.startTime, observerStart,
"The entry's start time should be later than observer start.");
assert_greater_than(callbackTime, entry.startTime,
"The callback time should be later than entry's start time.");
}
function startObserver(t) {
new PerformanceObserver(t.step_func_done((entryList, obs) => {
callbackTime = performance.now();
const observedEntries = entryList.getEntries().filter(
entry => entry.name === 'mousedown');
verifyObserverEntries(observedEntries);
})).observe({ type: 'event'});
observerStart = performance.now();
}
/* Timeline:
Onload Event fires
Begin Busy Loop
Click 1 arrives
End Busy Loop
(Dispatch and Process Click 1 (not buffered, not observed))
Observer start
Begin Busy Loop
Click 2 arrives
End Busy Loop
(Dispatch and Process Click 2 (not buffered, observed))
*/
async_test(function(t) {
if (!window.PerformanceEventTiming)
assert_unreached("PerformanceEventTiming is not supported");
// Use a dummy observer to know when the first click has been dispatched.
const observerPromise = new Promise((resolve, reject) => {
new PerformanceObserver((entryList, observer) => {
resolve();
observer.disconnect();
}).observe({ entryTypes: ['event'] });
});
on_event(window, 'load', () => {
const clickPromise = clickAndBlockMain('button');
Promise.all([observerPromise, clickPromise]).then(() => {
startObserver(t);
clickAndBlockMain('button');
processingStartMin = performance.now();
});
});
},"Event Timing: onload, click, observer, click.");
</script>
</html>

View file

@ -3,16 +3,15 @@
// https://www.w3.org/TR/geolocation-API/
promise_test(async () => {
const idl = await fetch('/interfaces/geolocation-API.idl').then(r => r.text());
const html = await fetch('/interfaces/html.idl').then(r => r.text());
const idl_array = new IdlArray();
idl_array.add_idls(idl);
idl_array.add_dependency_idls(html);
idl_test(
['geolocation-API'],
['html'],
idl_array => {
self.audio = document.createElement('audio');
self.video = document.createElement('video');
idl_array.add_objects({
Navigator: ["navigator"],
Geolocation: ["navigator.geolocation"]
Navigator: ['navigator'],
Geolocation: ['navigator.geolocation'],
});
idl_array.test();
}, 'geolocation-API interfaces');
}
);

View file

@ -8,6 +8,7 @@ idl_test(
["dom", "cssom", "touch-events", "uievents"],
idlArray => {
idlArray.add_objects({
WorkerLocation: ['self.location'],
WorkerNavigator: ['self.navigator'],
WebSocket: ['new WebSocket("ws://foo")'],
CloseEvent: ['new CloseEvent("close")'],

View file

@ -0,0 +1,10 @@
<base id="base" target="_blank">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<iframe id="i" src="about:blank"></iframe>
<script>
async_test(function(t) {
window.onmessage = () => t.done();
i.src = "data:text/html,This should navigate the iframe<script>top.postMessage('done', '*');</sc" + "ript>";
});
</script>

View file

@ -0,0 +1,10 @@
<base id="base" target="_blank">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<iframe id="i" src="about:blank"></iframe>
<script>
async_test(function(t) {
window.onmessage = () => t.done();
i.contentWindow.location = "data:text/html,This should navigate the iframe<script>top.postMessage('done', '*');</sc" + "ript>";
});
</script>

View file

@ -158,7 +158,7 @@ function expectEventsOn(events, element) {
}
element.addEventListener(event, f, { capture: true, once: true });
setTimeout(() => {
step_timeout(() => {
element.removeEventListener(event, f, { capture: true });
reject("did not get " + event + " on " + element.id);
}, 1000);
@ -181,7 +181,7 @@ function unexpectEventsOn(events, element) {
}
element.addEventListener(event, f, { capture: true, once: true });
setTimeout(() => {
step_timeout(() => {
element.removeEventListener(event, f, { capture: true });
resolve();
}, 1000);

View file

@ -159,7 +159,7 @@ function expectEventsOn(events, element) {
}
element.addEventListener(event, f, { capture: true, once: true });
setTimeout(() => {
step_timeout(() => {
element.removeEventListener(event, f, { capture: true });
reject("did not get " + event + " on " + element.id);
}, 1000);
@ -182,7 +182,7 @@ function unexpectEventsOn(events, element) {
}
element.addEventListener(event, f, { capture: true, once: true });
setTimeout(() => {
step_timeout(() => {
element.removeEventListener(event, f, { capture: true });
resolve();
}, 1000);

View file

@ -29,7 +29,7 @@ interface IDBOpenDBRequest : IDBRequest {
};
[Exposed=(Window,Worker),
Constructor(DOMString type, optional IDBVersionChangeEventInit eventInitDict)]
Constructor(DOMString type, optional IDBVersionChangeEventInit eventInitDict = {})]
interface IDBVersionChangeEvent : Event {
readonly attribute unsigned long long oldVersion;
readonly attribute unsigned long long? newVersion;
@ -70,8 +70,9 @@ interface IDBDatabase : EventTarget {
optional IDBTransactionMode mode = "readonly");
void close();
[NewObject] IDBObjectStore createObjectStore(DOMString name,
optional IDBObjectStoreParameters options);
[NewObject] IDBObjectStore createObjectStore(
DOMString name,
optional IDBObjectStoreParameters options = {});
void deleteObjectStore(DOMString name);
// Event handlers:
@ -115,7 +116,7 @@ interface IDBObjectStore {
[NewObject] IDBIndex createIndex(DOMString name,
(DOMString or sequence<DOMString>) keyPath,
optional IDBIndexParameters options);
optional IDBIndexParameters options = {});
void deleteIndex(DOMString name);
};

View file

@ -1,133 +0,0 @@
// -----------------------------------------------------------------------------
// DOM
// -----------------------------------------------------------------------------
[Constructor(), Exposed=(Window,Worker)]
interface EventTarget {
void addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options);
void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options);
boolean dispatchEvent(Event event);
};
callback interface EventListener {
void handleEvent(Event event);
};
dictionary EventListenerOptions {
boolean capture = false;
};
dictionary AddEventListenerOptions : EventListenerOptions {
boolean passive = false;
boolean once = false;
};
// -----------------------------------------------------------------------------
// HTML
// -----------------------------------------------------------------------------
[TreatNonCallableAsNull]
callback EventHandlerNonNull = any (Event event);
typedef EventHandlerNonNull? EventHandler;
[TreatNonCallableAsNull]
callback OnErrorEventHandlerNonNull = any ((Event or DOMString) event, optional DOMString source, optional unsigned long lineno, optional unsigned long column, optional any error);
typedef OnErrorEventHandlerNonNull? OnErrorEventHandler;
[Exposed=Worker]
interface WorkerGlobalScope : EventTarget {
readonly attribute WorkerGlobalScope self;
readonly attribute WorkerLocation location;
readonly attribute WorkerNavigator navigator;
void importScripts(USVString... urls);
attribute OnErrorEventHandler onerror;
attribute EventHandler onlanguagechange;
attribute EventHandler onoffline;
attribute EventHandler ononline;
attribute EventHandler onrejectionhandled;
attribute EventHandler onunhandledrejection;
};
[Global=(Worker,DedicatedWorker),Exposed=DedicatedWorker]
interface DedicatedWorkerGlobalScope : WorkerGlobalScope {
[Replaceable] readonly attribute DOMString name;
void postMessage(any message, optional sequence<object> transfer = []);
void close();
attribute EventHandler onmessage;
attribute EventHandler onmessageerror;
};
typedef (DOMString or Function) TimerHandler;
[Exposed=(Window,Worker)]
interface mixin WindowOrWorkerGlobalScope {
[Replaceable] readonly attribute USVString origin;
// base64 utility methods
DOMString btoa(DOMString data);
DOMString atob(DOMString data);
// timers
long setTimeout(TimerHandler handler, optional long timeout = 0, any... arguments);
void clearTimeout(optional long handle = 0);
long setInterval(TimerHandler handler, optional long timeout = 0, any... arguments);
void clearInterval(optional long handle = 0);
// ImageBitmap
Promise<ImageBitmap> createImageBitmap(ImageBitmapSource image, optional ImageBitmapOptions options);
Promise<ImageBitmap> createImageBitmap(ImageBitmapSource image, long sx, long sy, long sw, long sh, optional ImageBitmapOptions options);
};
WorkerGlobalScope includes WindowOrWorkerGlobalScope;
[Exposed=Worker]
interface WorkerNavigator {};
WorkerNavigator includes NavigatorID;
WorkerNavigator includes NavigatorLanguage;
WorkerNavigator includes NavigatorOnLine;
WorkerNavigator includes NavigatorConcurrentHardware;
[Exposed=(Window,Worker)]
interface mixin NavigatorID {
readonly attribute DOMString appCodeName; // constant "Mozilla"
readonly attribute DOMString appName; // constant "Netscape"
readonly attribute DOMString appVersion;
readonly attribute DOMString platform;
readonly attribute DOMString product; // constant "Gecko"
[Exposed=Window] readonly attribute DOMString productSub;
readonly attribute DOMString userAgent;
[Exposed=Window] readonly attribute DOMString vendor;
[Exposed=Window] readonly attribute DOMString vendorSub; // constant ""
// also has additional members in a partial interface
};
[Exposed=(Window,Worker)]
interface mixin NavigatorLanguage {
readonly attribute DOMString language;
readonly attribute FrozenArray<DOMString> languages;
};
[Exposed=(Window,Worker)]
interface mixin NavigatorOnLine {
readonly attribute boolean onLine;
};
[Exposed=(Window,Worker)]
interface mixin NavigatorConcurrentHardware {
readonly attribute unsigned long long hardwareConcurrency;
};
[Exposed=Worker]
interface WorkerLocation {
stringifier readonly attribute USVString href;
readonly attribute USVString origin;
readonly attribute USVString protocol;
readonly attribute USVString host;
readonly attribute USVString hostname;
readonly attribute USVString port;
readonly attribute USVString pathname;
readonly attribute USVString search;
readonly attribute USVString hash;
};

View file

@ -1,7 +1,7 @@
// GENERATED CONTENT - DO NOT EDIT
// Content was automatically extracted by Reffy into reffy-reports
// (https://github.com/tidoust/reffy-reports)
// Source: Input Events Level 1 (https://cdn.staticaly.com/gh/w3c/input-events/v1/index.html)
// Source: Input Events Level 2 (https://w3c.github.io/input-events/)
partial interface InputEvent {
readonly attribute DataTransfer? dataTransfer;

View file

@ -4,7 +4,7 @@
// Source: Cooperative Scheduling of Background Tasks (https://w3c.github.io/requestidlecallback/)
partial interface Window {
unsigned long requestIdleCallback(IdleRequestCallback callback, optional IdleRequestOptions options);
unsigned long requestIdleCallback(IdleRequestCallback callback, optional IdleRequestOptions options = {});
void cancelIdleCallback(unsigned long handle);
};

View file

@ -820,9 +820,6 @@ WEB-PLATFORM.TEST:signed-exchange/resources/*.sxg
WEB-PLATFORM.TEST:signed-exchange/appcache/resources/*.sxg
WEB-PLATFORM.TEST:signed-exchange/resources/generate-test-sxgs.sh
SET TIMEOUT: inert/inert-retargeting.tentative.html
SET TIMEOUT: inert/inert-retargeting-iframe.tentative.html
# https://github.com/web-platform-tests/wpt/issues/16455
MISSING DEPENDENCY: idle-detection/interceptor.https.html
MISSING DEPENDENCY: sms/sms_provider.js

View file

@ -1,5 +1,6 @@
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: timeout=long
// https://w3c.github.io/media-source/
@ -9,8 +10,6 @@ idl_test(
['media-source'],
['dom', 'html', 'url'],
async idl_array => {
self.audio = document.createElement('audio');
self.video = document.createElement('video');
idl_array.add_objects({
MediaSource: ['mediaSource'],
SourceBuffer: ['sourceBuffer'],

View file

@ -4,7 +4,7 @@
<head>
<meta charset=utf-8>
<title>Media Capture Depth Stream Extensions IDL test</title>
<link rel="help" href="See https://w3c.github.io/mediacapture-depth/">
<link rel="help" href="https://w3c.github.io/mediacapture-depth/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
@ -15,15 +15,13 @@
<script>
'use strict';
promise_test(async () => {
const idl = await fetch('/interfaces/mediacapture-depth.idl').then(r => r.text());
const main = await fetch('/interfaces/mediacapture-streams.idl').then(r => r.text());
var idl_array = new IdlArray();
idl_array.add_idls(idl);
idl_array.add_dependency_idls(main);
idl_array.test();
}, 'mediacapture-depth interfaces');
idl_test(
['mediacapture-depth'],
['mediacapture-streams'],
idl_array => {
// No objects, spec defines dictionaries only.
}
);
</script>
<div id="log"></div>
</body>

View file

@ -5,31 +5,24 @@
// https://w3c.github.io/mediacapture-main/
promise_test(async () => {
const srcs = ['mediacapture-streams','dom','html'];
const [idl, dom, html] = await Promise.all(
srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
const idl_array = new IdlArray();
idl_array.add_idls(idl);
idl_array.add_dependency_idls(html);
idl_array.add_dependency_idls(dom);
const devices = [];
// Errors will be surfaced in idlharness.js's test_object below.
idl_test(
['mediacapture-streams'],
['dom', 'html'],
async idl_array => {
const inputDevices = [];
const outputDevices = [];
try {
const list = await navigator.mediaDevices.enumerateDevices();
for (const item of list) {
switch (item.kind) {
case 'audioinput':
case 'videoinput':
case 'audiooutput':
self[item.kind] = item;
devices.push(item.kind);
default:
assert_unreached(
'media.kind should be one of "audioinput", "videoinput", or "audiooutput".');
for (const device of list) {
if (device.kind in self) {
continue;
}
assert_in_array(device.kind, ['audioinput', 'videoinput', 'audiooutput']);
self[device.kind] = device;
if (device.kind.endsWith('input')) {
inputDevices.push(device.kind);
} else {
outputDevices.push(device.kind);
}
}
} catch (e) {}
@ -40,15 +33,16 @@ promise_test(async () => {
self.trackEvent = new MediaStreamTrackEvent("type", {
track: track,
});
} catch (e) { throw e}
} catch (e) {}
idl_array.add_objects({
InputDeviceInfo: devices,
InputDeviceInfo: inputDevices,
MediaStream: ['stream', 'new MediaStream()'],
Navigator: ['navigator'],
MediaDevices: ['navigator.mediaDevices'],
MediaDeviceInfo: outputDevices,
MediaStreamTrack: ['track'],
MediaStreamTrackEvent: ['trackEvent'],
});
idl_array.test();
}, 'mediacapture-streams interfaces.');
}
);

View file

@ -5,19 +5,14 @@
'use strict';
promise_test(async () => {
const idl = await fetch('/interfaces/orientation-event.idl').then(r => r.text());
const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
const html = await fetch('/interfaces/html.idl').then(r => r.text());
var idl_array = new IdlArray();
idl_array.add_idls(idl);
idl_array.add_dependency_idls(html);
idl_array.add_dependency_idls(dom);
idl_test(
['orientation-event'],
['html', 'dom'],
idl_array => {
idl_array.add_objects({
Window: ['window'],
DeviceOrientationEvent: ['new DeviceOrientationEvent("foo")'],
DeviceMotionEvent: ['new DeviceMotionEvent("foo")'],
});
idl_array.test();
}, 'orientation-event interfaces');
}
);

View file

@ -1,31 +1,17 @@
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
"use strict";
if (self.importScripts) {
importScripts("/resources/testharness.js");
importScripts("/resources/WebIDLParser.js", "/resources/idlharness.js");
}
// https://w3c.github.io/permissions/#idl-index
promise_test(async () => {
const idl = await fetch("/interfaces/permissions.idl").then(r => r.text());
const dom = await fetch("/interfaces/dom.idl").then(r => r.text());
const html = await fetch("/interfaces/html.idl").then(r => r.text());
const idl_array = new IdlArray();
idl_array.add_idls(idl);
idl_array.add_dependency_idls(dom);
idl_array.add_dependency_idls(html);
"use strict";
idl_test(
['permissions'],
['html', 'dom'],
async idl_array => {
try {
self.permissionStatus = await navigator.permissions.query({ name: "geolocation" });
self.permissionStatus = await navigator.permissions.query({ name: "background-fetch" });
} catch (e) {
// Will be surfaced in idlharness.js's test_object below.
}
} catch (e) {}
if (self.GLOBAL.isWorker()) {
idl_array.add_objects({ WorkerNavigator: ['navigator'] });
@ -37,5 +23,5 @@ promise_test(async () => {
Permissions: ['navigator.permissions'],
PermissionStatus: ['permissionStatus']
});
idl_array.test();
}, "Test IDL implementation of Permissions API");
}
);

View file

@ -1,30 +1,24 @@
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
async_test(function() {
const srcs = ['requestidlecallback', 'html', 'dom'];
Promise.all(srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())))
.then(([idl, html, dom]) => {
var idl_array = new IdlArray();
idl_array.add_idls(idl);
idl_array.add_dependency_idls(html);
idl_array.add_dependency_idls(dom);
idl_array.add_objects({Window: ['window']});
// https://w3c.github.io/requestidlecallback/
let deadline;
const execIDLTest = this.step_func_done(function() {
idl_array.add_objects({IdleDeadline: [deadline]});
idl_array.test();
'use strict';
idl_test(
['requestidlecallback'],
['html', 'dom'],
async idl_array => {
idl_array.add_objects({
IdleDeadline: ['deadline'],
Window: ['window'],
});
if (!window.requestIdleCallback) {
execIDLTest();
} else {
const callback = this.step_func(d => {
deadline = d;
execIDLTest();
await new Promise(resolve => {
requestIdleCallback(d => {
self.deadline = d;
resolve();
}, { timeout: 100 });
});
requestIdleCallback(callback, { timeout: 100 });
}
});
}, 'IdleDeadline object setup');
);

View file

@ -5,17 +5,12 @@
// https://w3c.github.io/server-timing/
promise_test(async () => {
const idl = await fetch('/interfaces/server-timing.idl').then(r => r.text());
const res = await fetch('/interfaces/resource-timing.idl').then(r => r.text());
const perf = await fetch('/interfaces/performance-timeline.idl').then(r => r.text());
const idl_array = new IdlArray();
idl_array.add_idls(idl);
idl_array.add_dependency_idls(res);
idl_array.add_dependency_idls(perf);
idl_test(
['server-timing'],
['resource-timing', 'performance-timeline'],
idl_array => {
idl_array.add_objects({
Performance: ['performance'],
});
idl_array.test();
}, 'Test server-timing IDL implementation');
}
);

View file

@ -7,7 +7,7 @@
'use strict';
// NOTE: affected when 'resources/interfaces-worker.sub.js' srcs change:
// const srcs = ['dom', 'html', 'service-workers', 'dedicated-workers'];
// const srcs = ['dom', 'html', 'service-workers'];
service_worker_test(
'resources/interfaces-worker.sub.js',
'Interfaces and attributes in ServiceWorkerGlobalScope');

View file

@ -5,8 +5,8 @@ importScripts('/resources/WebIDLParser.js');
importScripts('/resources/idlharness.js');
promise_test(async (t) => {
const srcs = ['dom', 'html', 'service-workers', 'dedicated-workers'];
const [dom, html, serviceWorkerIdl, dedicated] = await Promise.all(
const srcs = ['dom', 'html', 'service-workers'];
const [dom, html, serviceWorkerIdl] = await Promise.all(
srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
var idlArray = new IdlArray();
@ -24,7 +24,6 @@ promise_test(async (t) => {
'Cache',
'CacheStorage',
]});
idlArray.add_dependency_idls(dedicated);
idlArray.add_dependency_idls(dom);
idlArray.add_dependency_idls(html);
idlArray.add_objects({

Some files were not shown because too many files have changed in this diff Show more