mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
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:
commit
2a8cd0f006
120 changed files with 3588 additions and 1362 deletions
|
@ -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
|
@ -1,2 +0,0 @@
|
|||
[matchMedia-display-none-iframe.html]
|
||||
expected: ERROR
|
131
tests/wpt/metadata/dom/idlharness.any.js.ini
Normal file
131
tests/wpt/metadata/dom/idlharness.any.js.ini
Normal 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
|
||||
|
543
tests/wpt/metadata/dom/idlharness.window.js.ini
Normal file
543
tests/wpt/metadata/dom/idlharness.window.js.ini
Normal 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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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]
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
expected: TIMEOUT
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[base_target_does_not_affect_iframe_src_navigation.html]
|
||||
[base_target_does_not_affect_iframe_src_navigation]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[base_target_does_not_affect_location_assignment.html]
|
||||
[base_target_does_not_affect_location_assignment]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[DOMContentLoaded-defer.html]
|
||||
[The end: DOMContentLoaded and defer scripts]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
[iframe.py]
|
||||
[test_source_origin[cross_origin\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_source_origin[same_origin\]]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[iframe.py]
|
||||
[test_source_origin[cross_origin\]]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -1,2 +0,0 @@
|
|||
[transition_calc_implicit.html]
|
||||
expected: TIMEOUT
|
|
@ -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
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
);
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
);
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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%");
|
|
@ -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");
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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");
|
|
@ -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>
|
|
@ -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");
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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.
|
|
@ -144,6 +144,7 @@ Additional browser-specific documentation:
|
|||
|
||||
chrome
|
||||
chrome_android
|
||||
android_webview
|
||||
safari
|
||||
```
|
||||
|
||||
|
|
25
tests/wpt/web-platform-tests/dom/idlharness.any.js
Normal file
25
tests/wpt/web-platform-tests/dom/idlharness.any.js
Normal 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();
|
47
tests/wpt/web-platform-tests/dom/idlharness.window.js
Normal file
47
tests/wpt/web-platform-tests/dom/idlharness.window.js
Normal 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'],
|
||||
});
|
||||
}
|
||||
);
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
64
tests/wpt/web-platform-tests/event-timing/click-timing.html
Normal file
64
tests/wpt/web-platform-tests/event-timing/click-timing.html
Normal 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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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');
|
||||
}
|
||||
);
|
||||
|
|
|
@ -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")'],
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'],
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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.');
|
||||
}
|
||||
);
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
);
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
);
|
||||
|
|
|
@ -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');
|
||||
);
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
);
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue