123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- <!DOCTYPE HTML>
- <html>
- <!--
- https://bugzilla.mozilla.org/show_bug.cgi?id=389797
- -->
- <head>
- <title>Test for Bug 389797</title>
- <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
- </head>
- <body>
- <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=389797">Mozilla Bug 389797</a>
- <p id="display"></p>
- <div id="content" style="display: none">
-
- </div>
- <pre id="test">
- <script class="testbody" type="text/javascript">
- /** Test for Bug 389797 **/
- var allTags = [];
- var classInfos = {};
- var interfaces = {};
- var interfacesNonClassinfo = {};
- function getClassName(tag) {
- return "HTML" + classInfos[tag] + "Element";
- }
- function HTML_TAG(aTagName, aImplClass) {
- allTags.push(aTagName);
- classInfos[aTagName] = aImplClass;
- interfaces[aTagName] = [ "nsIDOMEventTarget" ];
- // Some interfaces don't appear in classinfo because other interfaces that
- // inherit from them do.
- interfacesNonClassinfo[aTagName] =
- [ "nsIDOMNode",
- "nsIDOMElement" ];
- var interfaceName = "nsIDOM" + getClassName(aTagName);
- if (interfaceName in SpecialPowers.Ci) { // no nsIDOMHTMLSpanElement
- interfaces[aTagName].push(interfaceName);
- interfacesNonClassinfo[aTagName].push("nsIDOMHTMLElement");
- } else {
- // Inherits directly from nsIDOMHTMLElement.
- interfaces[aTagName].push("nsIDOMHTMLElement");
- }
- var interfaceNameNS = "nsIDOMNS" + getClassName(aTagName);
- if (interfaceNameNS in SpecialPowers.Ci) {
- interfaces[aTagName].push(interfaceNameNS);
- }
- if (arguments.length > 2) {
- for (var i = 0; i < arguments[2].length; ++i) {
- interfaces[aTagName].push(arguments[2][i]);
- }
- }
- if (arguments.length > 3) {
- for (i = 0; i < arguments[3].length; ++i) {
- interfacesNonClassinfo[aTagName].push(arguments[3][i]);
- }
- }
- }
- const objectIfaces = [
- "imgINotificationObserver", "nsIRequestObserver", "nsIStreamListener",
- "nsIFrameLoaderOwner", "nsIObjectLoadingContent", "nsIChannelEventSink"
- ];
- var objectIfaces2 = [];
- for (var iface of objectIfaces) {
- objectIfaces2.push(iface);
- }
- objectIfaces2.push("nsIImageLoadingContent");
- /* List copy/pasted from nsHTMLTagList.h, with the second field modified to the
- correct classinfo (instead of the impl class) in the following cases:
- applet
- base
- blockquote
- dir
- dl
- embed
- menu
- ol
- param
- q
- ul
- wbr
- head
- html
- */
- HTML_TAG("a", "Anchor");
- HTML_TAG("abbr", "");
- HTML_TAG("acronym", "");
- HTML_TAG("address", "");
- HTML_TAG("applet", "Applet", [], objectIfaces);
- HTML_TAG("area", "Area");
- HTML_TAG("article", "");
- HTML_TAG("aside", "");
- HTML_TAG("b", "");
- HTML_TAG("base", "Base");
- HTML_TAG("bdo", "");
- HTML_TAG("bgsound", "Unknown");
- HTML_TAG("big", "");
- HTML_TAG("blockquote", "Quote");
- HTML_TAG("body", "Body");
- HTML_TAG("br", "BR");
- HTML_TAG("button", "Button");
- HTML_TAG("canvas", "Canvas");
- HTML_TAG("caption", "TableCaption");
- HTML_TAG("center", "");
- HTML_TAG("cite", "");
- HTML_TAG("code", "");
- HTML_TAG("col", "TableCol");
- HTML_TAG("colgroup", "TableCol");
- HTML_TAG("data", "Data");
- HTML_TAG("datalist", "DataList");
- HTML_TAG("dd", "");
- HTML_TAG("del", "Mod");
- HTML_TAG("dfn", "");
- HTML_TAG("dir", "Directory");
- HTML_TAG("div", "Div");
- HTML_TAG("dl", "DList");
- HTML_TAG("dt", "");
- HTML_TAG("em", "");
- HTML_TAG("embed", "Embed", [], objectIfaces);
- HTML_TAG("fieldset", "FieldSet");
- HTML_TAG("figcaption", "")
- HTML_TAG("figure", "")
- HTML_TAG("font", "Font");
- HTML_TAG("footer", "")
- HTML_TAG("form", "Form", [], [ "nsIWebProgressListener" ]);
- HTML_TAG("frame", "Frame", [ "nsIDOMMozBrowserFrame" ], [ "nsIFrameLoaderOwner" ]);
- HTML_TAG("frameset", "FrameSet");
- HTML_TAG("h1", "Heading");
- HTML_TAG("h2", "Heading");
- HTML_TAG("h3", "Heading");
- HTML_TAG("h4", "Heading");
- HTML_TAG("h5", "Heading");
- HTML_TAG("h6", "Heading");
- HTML_TAG("head", "Head");
- HTML_TAG("header", "")
- HTML_TAG("hgroup", "")
- HTML_TAG("hr", "HR");
- HTML_TAG("html", "Html");
- HTML_TAG("i", "");
- HTML_TAG("iframe", "IFrame", [ "nsIDOMMozBrowserFrame" ],
- [ "nsIFrameLoaderOwner" ]);
- HTML_TAG("image", "");
- HTML_TAG("img", "Image", [ "nsIImageLoadingContent" ], []);
- HTML_TAG("input", "Input", [], [ "imgINotificationObserver",
- "nsIImageLoadingContent",
- "nsIDOMNSEditableElement" ]);
- HTML_TAG("ins", "Mod");
- HTML_TAG("kbd", "");
- HTML_TAG("keygen", "Span");
- HTML_TAG("label", "Label");
- HTML_TAG("legend", "Legend");
- HTML_TAG("li", "LI");
- HTML_TAG("link", "Link");
- HTML_TAG("listing", "Pre");
- HTML_TAG("main", "");
- HTML_TAG("map", "Map");
- HTML_TAG("mark", "");
- HTML_TAG("menu", "Menu");
- HTML_TAG("meta", "Meta");
- HTML_TAG("meter", "Meter");
- HTML_TAG("multicol", "Unknown");
- HTML_TAG("nav", "")
- HTML_TAG("nobr", "");
- HTML_TAG("noembed", "");
- HTML_TAG("noframes", "");
- HTML_TAG("noscript", "");
- HTML_TAG("object", "Object", [],
- objectIfaces.concat([ "nsIImageLoadingContent" ]));
- HTML_TAG("ol", "OList");
- HTML_TAG("optgroup", "OptGroup");
- HTML_TAG("option", "Option");
- HTML_TAG("p", "Paragraph");
- HTML_TAG("param", "Param");
- HTML_TAG("plaintext", "");
- HTML_TAG("pre", "Pre");
- HTML_TAG("q", "Quote");
- HTML_TAG("rb", "");
- HTML_TAG("rp", "");
- HTML_TAG("rt", "");
- HTML_TAG("rtc", "");
- HTML_TAG("ruby", "");
- HTML_TAG("s", "");
- HTML_TAG("samp", "");
- HTML_TAG("script", "Script", [ "nsIScriptLoaderObserver" ], []);
- HTML_TAG("section", "")
- HTML_TAG("select", "Select", ["nsIDOMHTMLSelectElement"]);
- HTML_TAG("small", "");
- HTML_TAG("span", "Span");
- HTML_TAG("strike", "");
- HTML_TAG("strong", "");
- HTML_TAG("style", "Style");
- HTML_TAG("sub", "");
- HTML_TAG("sup", "");
- HTML_TAG("table", "Table");
- HTML_TAG("tbody", "TableSection");
- HTML_TAG("td", "TableCell");
- HTML_TAG("textarea", "TextArea", [], [ "nsIDOMNSEditableElement" ]);
- HTML_TAG("tfoot", "TableSection");
- HTML_TAG("th", "TableCell");
- HTML_TAG("thead", "TableSection");
- HTML_TAG("template", "Template");
- HTML_TAG("time", "Time");
- HTML_TAG("title", "Title");
- HTML_TAG("tr", "TableRow");
- HTML_TAG("tt", "");
- HTML_TAG("u", "");
- HTML_TAG("ul", "UList");
- HTML_TAG("var", "");
- HTML_TAG("wbr", "");
- HTML_TAG("xmp", "Pre");
- function tagName(aTag) {
- return "<" + aTag + ">";
- }
- for (var tag of allTags) {
- var node = document.createElement(tag);
- // Have to use the proto's toString(), since HTMLAnchorElement and company
- // override toString().
- var nodeString = HTMLElement.prototype.toString.apply(node);
- // Debug builds have extra info, so chop off after "Element" if it's followed
- // by ' ' or ']'
- nodeString = nodeString.replace(/Element[\] ].*/, "Element");
- var classInfoString = getClassName(tag);
- is(nodeString, "[object " + classInfoString,
- "Unexpected classname for " + tagName(tag));
- is(node instanceof window[classInfoString], true,
- tagName(tag) + " not an instance of " + classInfos[tag]);
- if (classInfoString != 'HTMLUnknownElement') {
- is(node instanceof HTMLUnknownElement, false,
- tagName(tag) + " is an instance of HTMLUnknownElement");
- } else {
- is(node instanceof HTMLUnknownElement, true,
- tagName(tag) + " is an instance of HTMLUnknownElement");
- }
- // Check that each node QIs to all the things we expect it to QI to
- for (var iface of interfaces[tag].concat(interfacesNonClassinfo[tag])) {
- is(iface in SpecialPowers.Ci, true,
- iface + " not in Components.interfaces");
- is(node instanceof SpecialPowers.Ci[iface], true,
- tagName(tag) + " does not QI to " + iface);
- }
- }
- </script>
- </pre>
- </body>
- </html>
|