<!doctype html>
<meta charset=utf-8>
<title>HTML IDL tests</title>
<meta name=timeout content=long>
<meta name="variant" content="?include=(Document|Window)">
<meta name="variant" content="?include=HTML.*">
<meta name="variant" content="?exclude=(Document|Window|HTML.*)">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/common/subset-tests-by-key.js></script>
<script src=/common/get-host-info.sub.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;
}
const waitForLoad = new Promise(resolve => { addEventListener('load', resolve); })
idl_test(
['html'],
['wai-aria', 'SVG', 'cssom', 'touch-events', 'uievents', 'dom', 'xhr', 'FileAPI', 'mediacapture-streams', 'performance-timeline', 'trusted-types'],
async idlArray => {
self.documentWithHandlers = new Document();
const handler = function(e) {};
for (const callback of idlArray.members['GlobalEventHandlers'].members) {
if (callback.idlType && callback.idlType.idlType === 'EventHandler') {
documentWithHandlers[callback.name] = handler;
}
}
idlArray.add_untested_idls('typedef Window WindowProxy;');
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()', 'documentWithHandlers'],
XMLDocument: ['document.implementation.createDocument(null, "", null)'],
HTMLElement: [
'document.createElement("noscript")',
'Object.assign(document.createElement("noscript"),{popover:"auto"})',
], // 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: [],
ToggleEvent: ['new ToggleEvent("beforetoggle")'],
TextMetrics: [],
ImageData: ['new ImageData(10, 10)'],
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'],
FormDataEvent: ['new FormDataEvent("formdata", { formData: new FormData() })'],
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: [],
WindowModal: [],
DOMParser: ['new DOMParser()'],
Navigator: ['window.navigator'],
External: ['window.external'],
DataTransfer: [],
DataTransferItemList: [],
DataTransferItem: [],
DragEvent: [],
NavigatorUserMediaError: [],
MediaStream: [],
MediaStreamTrack: [],
MediaStreamRecorder: [],
PeerConnection: [],
MediaStreamEvent: [],
ErrorEvent: [],
EventSource: ['new EventSource("http://invalid")'],
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")'],
DOMStringList: ['location.ancestorOrigins'],
Storage: [
'localStorage',
'sessionStorage',
],
StorageEvent: ['new StorageEvent("storage")']
});
idlArray.prevent_multiple_testing('HTMLElement');
await waitForLoad;
}
);
</script>