| <!doctype html> | |
| <meta charset=utf-8> | |
| <title>DOM IDL tests</title> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <script src=/resources/WebIDLParser.js></script> | |
| <script src=/resources/idlharness.js></script> | |
| <h1>DOM IDL tests</h1> | |
| <div id=log></div> | |
| <script type=text/plain> | |
| [Constructor(DOMString type, optional EventInit eventInitDict)/*, | |
| Exposed=(Window,Worker)*/] | |
| interface Event { | |
| readonly attribute DOMString type; | |
| readonly attribute EventTarget? target; | |
| readonly attribute EventTarget? currentTarget; | |
| const unsigned short NONE = 0; | |
| const unsigned short CAPTURING_PHASE = 1; | |
| const unsigned short AT_TARGET = 2; | |
| const unsigned short BUBBLING_PHASE = 3; | |
| readonly attribute unsigned short eventPhase; | |
| void stopPropagation(); | |
| void stopImmediatePropagation(); | |
| readonly attribute boolean bubbles; | |
| readonly attribute boolean cancelable; | |
| void preventDefault(); | |
| readonly attribute boolean defaultPrevented; | |
| [Unforgeable] readonly attribute boolean isTrusted; | |
| readonly attribute DOMTimeStamp timeStamp; | |
| void initEvent(DOMString type, boolean bubbles, boolean cancelable); | |
| }; | |
| dictionary EventInit { | |
| boolean bubbles = false; | |
| boolean cancelable = false; | |
| }; | |
| [Constructor(DOMString type, optional CustomEventInit eventInitDict)/*, | |
| Exposed=(Window,Worker)*/] | |
| interface CustomEvent : Event { | |
| readonly attribute any detail; | |
| void initCustomEvent(DOMString type, boolean bubbles, boolean cancelable, any detail); | |
| }; | |
| dictionary CustomEventInit : EventInit { | |
| any detail = null; | |
| }; | |
| //[Exposed=(Window,Worker)] | |
| interface EventTarget { | |
| void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false); | |
| void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false); | |
| boolean dispatchEvent(Event event); | |
| }; | |
| callback interface EventListener { | |
| void handleEvent(Event event); | |
| }; | |
| [NoInterfaceObject] | |
| interface NonElementParentNode { | |
| Element? getElementById(DOMString elementId); | |
| }; | |
| Document implements NonElementParentNode; | |
| DocumentFragment implements NonElementParentNode; | |
| [NoInterfaceObject] | |
| interface ParentNode { | |
| [SameObject] readonly attribute HTMLCollection children; | |
| readonly attribute Element? firstElementChild; | |
| readonly attribute Element? lastElementChild; | |
| readonly attribute unsigned long childElementCount; | |
| [Unscopeable] void prepend((Node or DOMString)... nodes); | |
| [Unscopeable] void append((Node or DOMString)... nodes); | |
| [Unscopeable] Element? query(DOMString relativeSelectors); | |
| [NewObject, Unscopeable] Elements queryAll(DOMString relativeSelectors); | |
| Element? querySelector(DOMString selectors); | |
| [NewObject] NodeList querySelectorAll(DOMString selectors); | |
| }; | |
| Document implements ParentNode; | |
| DocumentFragment implements ParentNode; | |
| Element implements ParentNode; | |
| [NoInterfaceObject] | |
| interface NonDocumentTypeChildNode { | |
| readonly attribute Element? previousElementSibling; | |
| readonly attribute Element? nextElementSibling; | |
| }; | |
| Element implements NonDocumentTypeChildNode; | |
| CharacterData implements NonDocumentTypeChildNode; | |
| [NoInterfaceObject] | |
| interface ChildNode { | |
| [Unscopeable] void before((Node or DOMString)... nodes); | |
| [Unscopeable] void after((Node or DOMString)... nodes); | |
| [Unscopeable] void replaceWith((Node or DOMString)... nodes); | |
| [Unscopeable] void remove(); | |
| }; | |
| DocumentType implements ChildNode; | |
| Element implements ChildNode; | |
| CharacterData implements ChildNode; | |
| // XXX unrecognized tokens "class", "extends" | |
| // https://www.w3.org/Bugs/Public/show_bug.cgi?id=20020 | |
| // https://www.w3.org/Bugs/Public/show_bug.cgi?id=23225 | |
| //class Elements extends Array { | |
| // Element? query(DOMString relativeSelectors); | |
| // Elements queryAll(DOMString relativeSelectors); | |
| //}; | |
| interface NodeList { | |
| getter Node? item(unsigned long index); | |
| readonly attribute unsigned long length; | |
| // iterable<Node>; | |
| }; | |
| interface HTMLCollection { | |
| readonly attribute unsigned long length; | |
| getter Element? item(unsigned long index); | |
| getter Element? namedItem(DOMString name); | |
| }; | |
| [Constructor(MutationCallback callback)] | |
| interface MutationObserver { | |
| void observe(Node target, MutationObserverInit options); | |
| void disconnect(); | |
| sequence<MutationRecord> takeRecords(); | |
| }; | |
| callback MutationCallback = void (sequence<MutationRecord> mutations, MutationObserver observer); | |
| dictionary MutationObserverInit { | |
| boolean childList = false; | |
| boolean attributes; | |
| boolean characterData; | |
| boolean subtree = false; | |
| boolean attributeOldValue; | |
| boolean characterDataOldValue; | |
| sequence<DOMString> attributeFilter; | |
| }; | |
| interface MutationRecord { | |
| readonly attribute DOMString type; | |
| readonly attribute Node target; | |
| [SameObject] readonly attribute NodeList addedNodes; | |
| [SameObject] readonly attribute NodeList removedNodes; | |
| readonly attribute Node? previousSibling; | |
| readonly attribute Node? nextSibling; | |
| readonly attribute DOMString? attributeName; | |
| readonly attribute DOMString? attributeNamespace; | |
| readonly attribute DOMString? oldValue; | |
| }; | |
| interface Node : EventTarget { | |
| const unsigned short ELEMENT_NODE = 1; | |
| const unsigned short ATTRIBUTE_NODE = 2; // historical | |
| const unsigned short TEXT_NODE = 3; | |
| const unsigned short CDATA_SECTION_NODE = 4; // historical | |
| const unsigned short ENTITY_REFERENCE_NODE = 5; // historical | |
| const unsigned short ENTITY_NODE = 6; // historical | |
| const unsigned short PROCESSING_INSTRUCTION_NODE = 7; | |
| const unsigned short COMMENT_NODE = 8; | |
| const unsigned short DOCUMENT_NODE = 9; | |
| const unsigned short DOCUMENT_TYPE_NODE = 10; | |
| const unsigned short DOCUMENT_FRAGMENT_NODE = 11; | |
| const unsigned short NOTATION_NODE = 12; // historical | |
| readonly attribute unsigned short nodeType; | |
| readonly attribute DOMString nodeName; | |
| readonly attribute DOMString? baseURI; | |
| readonly attribute Document? ownerDocument; | |
| readonly attribute Node? parentNode; | |
| readonly attribute Element? parentElement; | |
| boolean hasChildNodes(); | |
| [SameObject] readonly attribute NodeList childNodes; | |
| readonly attribute Node? firstChild; | |
| readonly attribute Node? lastChild; | |
| readonly attribute Node? previousSibling; | |
| readonly attribute Node? nextSibling; | |
| attribute DOMString? nodeValue; | |
| attribute DOMString? textContent; | |
| void normalize(); | |
| [NewObject] Node cloneNode(optional boolean deep = false); | |
| boolean isEqualNode(Node? node); | |
| const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01; | |
| const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02; | |
| const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04; | |
| const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08; | |
| const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10; | |
| const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20; | |
| unsigned short compareDocumentPosition(Node other); | |
| boolean contains(Node? other); | |
| DOMString? lookupPrefix(DOMString? namespace); | |
| DOMString? lookupNamespaceURI(DOMString? prefix); | |
| boolean isDefaultNamespace(DOMString? namespace); | |
| Node insertBefore(Node node, Node? child); | |
| Node appendChild(Node node); | |
| Node replaceChild(Node node, Node child); | |
| Node removeChild(Node child); | |
| }; | |
| [Constructor] | |
| interface Document : Node { | |
| [SameObject] readonly attribute DOMImplementation implementation; | |
| readonly attribute DOMString URL; | |
| readonly attribute DOMString documentURI; | |
| readonly attribute DOMString origin; | |
| readonly attribute DOMString compatMode; | |
| readonly attribute DOMString characterSet; | |
| readonly attribute DOMString charset; // legacy alias of .characterSet | |
| readonly attribute DOMString inputEncoding; // legacy alias of .characterSet | |
| readonly attribute DOMString contentType; | |
| readonly attribute DocumentType? doctype; | |
| readonly attribute Element? documentElement; | |
| HTMLCollection getElementsByTagName(DOMString localName); | |
| HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName); | |
| HTMLCollection getElementsByClassName(DOMString classNames); | |
| [NewObject] Element createElement(DOMString localName); | |
| [NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName); | |
| [NewObject] DocumentFragment createDocumentFragment(); | |
| [NewObject] Text createTextNode(DOMString data); | |
| [NewObject] Comment createComment(DOMString data); | |
| [NewObject] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data); | |
| [NewObject] Node importNode(Node node, optional boolean deep = false); | |
| Node adoptNode(Node node); | |
| [NewObject] Attr createAttribute(DOMString localName); | |
| [NewObject] Attr createAttributeNS(DOMString? namespace, DOMString name); | |
| [NewObject] Event createEvent(DOMString interface); | |
| [NewObject] Range createRange(); | |
| // NodeFilter.SHOW_ALL = 0xFFFFFFFF | |
| [NewObject] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null); | |
| [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null); | |
| }; | |
| interface XMLDocument : Document {}; | |
| interface DOMImplementation { | |
| [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId); | |
| [NewObject] XMLDocument createDocument(DOMString? namespace, [TreatNullAs=EmptyString] DOMString qualifiedName, optional DocumentType? doctype = null); | |
| [NewObject] Document createHTMLDocument(optional DOMString title); | |
| boolean hasFeature(); // useless; always returns true | |
| }; | |
| [Constructor] | |
| interface DocumentFragment : Node { | |
| }; | |
| interface DocumentType : Node { | |
| readonly attribute DOMString name; | |
| readonly attribute DOMString publicId; | |
| readonly attribute DOMString systemId; | |
| }; | |
| interface Element : Node { | |
| readonly attribute DOMString? namespaceURI; | |
| readonly attribute DOMString? prefix; | |
| readonly attribute DOMString localName; | |
| readonly attribute DOMString tagName; | |
| attribute DOMString id; | |
| attribute DOMString className; | |
| [SameObject] readonly attribute DOMTokenList classList; | |
| boolean hasAttributes(); | |
| [SameObject] readonly attribute NamedNodeMap attributes; | |
| DOMString? getAttribute(DOMString name); | |
| DOMString? getAttributeNS(DOMString? namespace, DOMString localName); | |
| void setAttribute(DOMString name, DOMString value); | |
| void setAttributeNS(DOMString? namespace, DOMString name, DOMString value); | |
| void removeAttribute(DOMString name); | |
| void removeAttributeNS(DOMString? namespace, DOMString localName); | |
| boolean hasAttribute(DOMString name); | |
| boolean hasAttributeNS(DOMString? namespace, DOMString localName); | |
| Attr? getAttributeNode(DOMString name); | |
| Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName); | |
| Attr? setAttributeNode(Attr attr); | |
| Attr? setAttributeNodeNS(Attr attr); | |
| Attr removeAttributeNode(Attr attr); | |
| Element? closest(DOMString selectors); | |
| boolean matches(DOMString selectors); | |
| HTMLCollection getElementsByTagName(DOMString localName); | |
| HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName); | |
| HTMLCollection getElementsByClassName(DOMString classNames); | |
| }; | |
| interface NamedNodeMap { | |
| readonly attribute unsigned long length; | |
| getter Attr? item(unsigned long index); | |
| getter Attr? getNamedItem(DOMString name); | |
| Attr? getNamedItemNS(DOMString? namespace, DOMString localName); | |
| Attr? setNamedItem(Attr attr); | |
| Attr? setNamedItemNS(Attr attr); | |
| Attr removeNamedItem(DOMString name); | |
| Attr removeNamedItemNS(DOMString? namespace, DOMString localName); | |
| }; | |
| interface Attr { | |
| readonly attribute DOMString? namespaceURI; | |
| readonly attribute DOMString? prefix; | |
| readonly attribute DOMString localName; | |
| readonly attribute DOMString name; | |
| attribute DOMString value; | |
| attribute DOMString nodeValue; // legacy alias of .value | |
| attribute DOMString textContent; // legacy alias of .value | |
| readonly attribute Element? ownerElement; | |
| readonly attribute boolean specified; // useless; always returns true | |
| }; | |
| interface CharacterData : Node { | |
| [TreatNullAs=EmptyString] attribute DOMString data; | |
| readonly attribute unsigned long length; | |
| DOMString substringData(unsigned long offset, unsigned long count); | |
| void appendData(DOMString data); | |
| void insertData(unsigned long offset, DOMString data); | |
| void deleteData(unsigned long offset, unsigned long count); | |
| void replaceData(unsigned long offset, unsigned long count, DOMString data); | |
| }; | |
| [Constructor(optional DOMString data = "")] | |
| interface Text : CharacterData { | |
| [NewObject] Text splitText(unsigned long offset); | |
| readonly attribute DOMString wholeText; | |
| }; | |
| interface ProcessingInstruction : CharacterData { | |
| readonly attribute DOMString target; | |
| }; | |
| [Constructor(optional DOMString data = "")] | |
| interface Comment : CharacterData { | |
| }; | |
| [Constructor] | |
| interface Range { | |
| readonly attribute Node startContainer; | |
| readonly attribute unsigned long startOffset; | |
| readonly attribute Node endContainer; | |
| readonly attribute unsigned long endOffset; | |
| readonly attribute boolean collapsed; | |
| readonly attribute Node commonAncestorContainer; | |
| void setStart(Node node, unsigned long offset); | |
| void setEnd(Node node, unsigned long offset); | |
| void setStartBefore(Node node); | |
| void setStartAfter(Node node); | |
| void setEndBefore(Node node); | |
| void setEndAfter(Node node); | |
| void collapse(optional boolean toStart = false); | |
| void selectNode(Node node); | |
| void selectNodeContents(Node node); | |
| const unsigned short START_TO_START = 0; | |
| const unsigned short START_TO_END = 1; | |
| const unsigned short END_TO_END = 2; | |
| const unsigned short END_TO_START = 3; | |
| short compareBoundaryPoints(unsigned short how, Range sourceRange); | |
| void deleteContents(); | |
| [NewObject] DocumentFragment extractContents(); | |
| [NewObject] DocumentFragment cloneContents(); | |
| void insertNode(Node node); | |
| void surroundContents(Node newParent); | |
| [NewObject] Range cloneRange(); | |
| void detach(); | |
| boolean isPointInRange(Node node, unsigned long offset); | |
| short comparePoint(Node node, unsigned long offset); | |
| boolean intersectsNode(Node node); | |
| stringifier; | |
| }; | |
| interface NodeIterator { | |
| [SameObject] readonly attribute Node root; | |
| readonly attribute Node referenceNode; | |
| readonly attribute boolean pointerBeforeReferenceNode; | |
| readonly attribute unsigned long whatToShow; | |
| readonly attribute NodeFilter? filter; | |
| Node? nextNode(); | |
| Node? previousNode(); | |
| void detach(); | |
| }; | |
| interface TreeWalker { | |
| [SameObject] readonly attribute Node root; | |
| readonly attribute unsigned long whatToShow; | |
| readonly attribute NodeFilter? filter; | |
| attribute Node currentNode; | |
| Node? parentNode(); | |
| Node? firstChild(); | |
| Node? lastChild(); | |
| Node? previousSibling(); | |
| Node? nextSibling(); | |
| Node? previousNode(); | |
| Node? nextNode(); | |
| }; | |
| callback interface NodeFilter { | |
| // Constants for acceptNode() | |
| const unsigned short FILTER_ACCEPT = 1; | |
| const unsigned short FILTER_REJECT = 2; | |
| const unsigned short FILTER_SKIP = 3; | |
| // Constants for whatToShow | |
| const unsigned long SHOW_ALL = 0xFFFFFFFF; | |
| const unsigned long SHOW_ELEMENT = 0x1; | |
| const unsigned long SHOW_ATTRIBUTE = 0x2; // historical | |
| const unsigned long SHOW_TEXT = 0x4; | |
| const unsigned long SHOW_CDATA_SECTION = 0x8; // historical | |
| const unsigned long SHOW_ENTITY_REFERENCE = 0x10; // historical | |
| const unsigned long SHOW_ENTITY = 0x20; // historical | |
| const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40; | |
| const unsigned long SHOW_COMMENT = 0x80; | |
| const unsigned long SHOW_DOCUMENT = 0x100; | |
| const unsigned long SHOW_DOCUMENT_TYPE = 0x200; | |
| const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400; | |
| const unsigned long SHOW_NOTATION = 0x800; // historical | |
| unsigned short acceptNode(Node node); | |
| }; | |
| interface DOMTokenList { | |
| readonly attribute unsigned long length; | |
| getter DOMString? item(unsigned long index); | |
| boolean contains(DOMString token); | |
| void add(DOMString... tokens); | |
| void remove(DOMString... tokens); | |
| boolean toggle(DOMString token, optional boolean force); | |
| stringifier; | |
| // iterable<DOMString>; | |
| }; | |
| interface DOMSettableTokenList : DOMTokenList { | |
| attribute DOMString value; | |
| }; | |
| </script> | |
| <script> | |
| "use strict"; | |
| var xmlDoc, detachedRange, element; | |
| var idlArray; | |
| setup(function() { | |
| xmlDoc = document.implementation.createDocument(null, "", null); | |
| detachedRange = document.createRange(); | |
| detachedRange.detach(); | |
| element = xmlDoc.createElementNS(null, "test"); | |
| element.setAttribute("bar", "baz"); | |
| idlArray = new IdlArray(); | |
| idlArray.add_idls(document.querySelector("script[type=text\\/plain]").textContent); | |
| idlArray.add_objects({ | |
| Event: ['document.createEvent("Event")', 'new Event("foo")'], | |
| CustomEvent: ['new CustomEvent("foo")'], | |
| 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(); | |
| </script> |