| <!doctype html> |
| <meta charset=utf-8> |
| <!-- WARNING: These tests are preliminary and probably partly incorrect. --> |
| <title>HTML IDL tests</title> |
| <meta name=timeout content=long> |
| <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>HTML IDL tests</h1> |
| <div id=log></div> |
| |
| <script> |
| "use strict"; |
| var errorVideo; // used to get a MediaError object |
| var iframe; // used to get a Document object (can't use `document` because some test clears the page) |
| setup(function() { |
| errorVideo = document.createElement('video'); |
| errorVideo.src = 'data:,'; |
| errorVideo.preload = 'auto'; |
| iframe = document.createElement('iframe'); |
| iframe.hidden = true; |
| document.body.appendChild(iframe); |
| }); |
| |
| function createInput(type) { |
| var input = document.createElement('input'); |
| input.type = type; |
| return input; |
| } |
| |
| function doTest([html, dom, cssom, uievents, touchevents]) { |
| var idlArray = new IdlArray(); |
| var svg = "interface SVGElement : Element {};"; |
| idlArray.add_untested_idls(dom + svg + cssom + uievents + touchevents); |
| idlArray.add_idls(html); |
| |
| idlArray.add_objects({ |
| NodeList: ['document.getElementsByName("name")'], |
| HTMLAllCollection: ['document.all'], |
| HTMLFormControlsCollection: ['document.createElement("form").elements'], |
| RadioNodeList: [], |
| HTMLOptionsCollection: ['document.createElement("select").options'], |
| DOMStringMap: ['document.head.dataset'], |
| Transferable: [], |
| Document: ['iframe.contentDocument', 'new Document()'], |
| XMLDocument: ['document.implementation.createDocument(null, "", null)'], |
| HTMLElement: ['document.createElement("noscript")'], // more tests in html/semantics/interfaces.js |
| HTMLUnknownElement: ['document.createElement("bgsound")'], // more tests in html/semantics/interfaces.js |
| HTMLHtmlElement: ['document.createElement("html")'], |
| HTMLHeadElement: ['document.createElement("head")'], |
| HTMLTitleElement: ['document.createElement("title")'], |
| HTMLBaseElement: ['document.createElement("base")'], |
| HTMLLinkElement: ['document.createElement("link")'], |
| HTMLMetaElement: ['document.createElement("meta")'], |
| HTMLStyleElement: ['document.createElement("style")'], |
| HTMLScriptElement: ['document.createElement("script")'], |
| HTMLBodyElement: ['document.createElement("body")'], |
| HTMLHeadingElement: ['document.createElement("h1")'], |
| HTMLParagraphElement: ['document.createElement("p")'], |
| HTMLHRElement: ['document.createElement("hr")'], |
| HTMLPreElement: [ |
| 'document.createElement("pre")', |
| 'document.createElement("listing")', |
| 'document.createElement("xmp")', |
| ], |
| HTMLQuoteElement: [ |
| 'document.createElement("blockquote")', |
| 'document.createElement("q")', |
| ], |
| HTMLOlistElement: ['document.createElement("ol")'], |
| HTMLUlistElement: ['document.createElement("ul")'], |
| HTMLLIElement: ['document.createElement("li")'], |
| HTMLDlistElement: ['document.createElement("dl")'], |
| HTMLDivElement: ['document.createElement("div")'], |
| HTMLAnchorElement: ['document.createElement("a")'], |
| HTMLDataElement: ['document.createElement("data")'], |
| HTMLTimeElement: ['document.createElement("time")'], |
| HTMLSpanElement: ['document.createElement("span")'], |
| HTMLBRElement: ['document.createElement("br")'], |
| HTMLModElement: [ |
| 'document.createElement("ins")', |
| 'document.createElement("del")', |
| ], |
| HTMLPictureElement: ['document.createElement("picture")'], |
| HTMLImageElement: ['document.createElement("img")', 'new Image()'], |
| HTMLIframeElement: ['document.createElement("iframe")'], |
| HTMLEmbedElement: ['document.createElement("embed")'], |
| HTMLObjectElement: ['document.createElement("object")'], |
| HTMLParamElement: ['document.createElement("param")'], |
| HTMLVideoElement: ['document.createElement("video")'], |
| HTMLAudioElement: ['document.createElement("audio")', 'new Audio()'], |
| HTMLSourceElement: ['document.createElement("source")'], |
| HTMLTrackElement: ['document.createElement("track")'], |
| HTMLMediaElement: [], |
| MediaError: ['errorVideo.error'], |
| AudioTrackList: [], |
| AudioTrack: [], |
| VideoTrackList: [], |
| VideoTrack: [], |
| TextTrackList: ['document.createElement("video").textTracks'], |
| TextTrack: ['document.createElement("track").track'], |
| TextTrackCueList: ['document.createElement("video").addTextTrack("subtitles").cues'], |
| TextTrackCue: [], |
| DataCue: [], |
| TimeRanges: ['document.createElement("video").buffered'], |
| TrackEvent: ['new TrackEvent("addtrack", {track:document.createElement("track").track})'], |
| HTMLTemplateElement: ['document.createElement("template")'], |
| HTMLSlotElement: ['document.createElement("slot")'], |
| HTMLCanvasElement: ['document.createElement("canvas")'], |
| CanvasRenderingContext2D: ['document.createElement("canvas").getContext("2d")'], |
| CanvasGradient: [], |
| CanvasPattern: [], |
| TextMetrics: [], |
| ImageData: [], |
| HTMLMapElement: ['document.createElement("map")'], |
| HTMLAreaElement: ['document.createElement("area")'], |
| HTMLTableElement: ['document.createElement("table")'], |
| HTMLTableCaptionElement: ['document.createElement("caption")'], |
| HTMLTableColElement: [ |
| 'document.createElement("colgroup")', |
| 'document.createElement("col")', |
| ], |
| HTMLTableSectionElement: [ |
| 'document.createElement("tbody")', |
| 'document.createElement("thead")', |
| 'document.createElement("tfoot")', |
| ], |
| HTMLTableRowElement: ['document.createElement("tr")'], |
| HTMLTableCellElement: [ |
| 'document.createElement("td")', |
| 'document.createElement("th")', |
| ], |
| HTMLFormElement: ['document.createElement("form")'], |
| HTMLFieldsetElement: ['document.createElement("fieldset")'], |
| HTMLLegendElement: ['document.createElement("legend")'], |
| HTMLLabelElement: ['document.createElement("label")'], |
| HTMLInputElement: [ |
| 'document.createElement("input")', |
| 'createInput("text")', |
| 'createInput("hidden")', |
| 'createInput("search")', |
| 'createInput("tel")', |
| 'createInput("url")', |
| 'createInput("email")', |
| 'createInput("password")', |
| 'createInput("date")', |
| 'createInput("month")', |
| 'createInput("week")', |
| 'createInput("time")', |
| 'createInput("datetime-local")', |
| 'createInput("number")', |
| 'createInput("range")', |
| 'createInput("color")', |
| 'createInput("checkbox")', |
| 'createInput("radio")', |
| 'createInput("file")', |
| 'createInput("submit")', |
| 'createInput("image")', |
| 'createInput("reset")', |
| 'createInput("button")' |
| ], |
| HTMLButtonElement: ['document.createElement("button")'], |
| HTMLSelectElement: ['document.createElement("select")'], |
| HTMLDataListElement: ['document.createElement("datalist")'], |
| HTMLOptGroupElement: ['document.createElement("optgroup")'], |
| HTMLOptionElement: ['document.createElement("option")', 'new Option()'], |
| HTMLTextAreaElement: ['document.createElement("textarea")'], |
| HTMLOutputElement: ['document.createElement("output")'], |
| HTMLProgressElement: ['document.createElement("progress")'], |
| HTMLMeterElement: ['document.createElement("meter")'], |
| ValidityState: ['document.createElement("input").validity'], |
| HTMLDetailsElement: ['document.createElement("details")'], |
| HTMLMenuElement: ['document.createElement("menu")'], |
| Window: ['window'], |
| BarProp: [], |
| History: ['window.history'], |
| Location: ['window.location'], |
| PopStateEvent: ['new PopStateEvent("popstate", { data: {} })'], |
| HashChangeEvent: [], |
| PageTransitionEvent: [], |
| BeforeUnloadEvent: [], |
| ApplicationCache: ['window.applicationCache'], |
| WindowModal: [], |
| Navigator: ['window.navigator'], |
| External: ['window.external'], |
| DataTransfer: [], |
| DataTransferItemList: [], |
| DataTransferItem: [], |
| DragEvent: [], |
| NavigatorUserMediaError: [], |
| MediaStream: [], |
| LocalMediaStream: [], |
| MediaStreamTrack: [], |
| MediaStreamRecorder: [], |
| PeerConnection: [], |
| MediaStreamEvent: [], |
| ErrorEvent: [], |
| WebSocket: ['new WebSocket("ws://foo")'], |
| CloseEvent: ['new CloseEvent("close")'], |
| AbstractWorker: [], |
| Worker: [], |
| SharedWorker: [], |
| MessageEvent: ['new MessageEvent("message", { data: 5 })'], |
| MessageChannel: [], |
| MessagePort: [], |
| HTMLMarqueeElement: ['document.createElement("marquee")'], |
| HTMLFrameSetElement: ['document.createElement("frameset")'], |
| HTMLFrameElement: ['document.createElement("frame")'], |
| HTMLDirectoryElement: ['document.createElement("dir")'], |
| HTMLFontElement: ['document.createElement("font")'], |
| }); |
| idlArray.prevent_multiple_testing("HTMLElement"); |
| idlArray.test(); |
| }; |
| |
| function fetchData(url) { |
| return fetch(url).then((response) => response.text()); |
| } |
| |
| function waitForLoad() { |
| return new Promise(function(resolve) { |
| addEventListener("load", resolve); |
| }); |
| } |
| |
| promise_test(function() { |
| // Have to wait for onload |
| return Promise.all([fetchData("/interfaces/html.idl"), |
| fetchData("/interfaces/dom.idl"), |
| fetchData("/interfaces/cssom.idl"), |
| fetchData("/interfaces/touchevents.idl"), |
| fetchData("/interfaces/uievents.idl"), |
| waitForLoad()]) |
| .then(doTest); |
| }, "Test driver"); |
| |
| </script> |