da35e03190254f9d0b0eb0e1a4a959d86a216e7e
[WebKit-https.git] / LayoutTests / platform / mac / fast / dom / wrapper-classes-objc.html
1 <html>
2 <head>
3 <link rel="stylesheet" href="../../../../fast/js/resources/js-test-style.css">
4 <script src="../../../../fast/js/resources/js-test-pre.js"></script>
5 <style id="style" media="screen">
6 .non-existent-class {
7     color: black;
8     clip: rect(0, 0, 1, 1);
9     content: counter(dummy, square);
10 }
11 </style>
12 </head>
13 <body>
14 <p id="description"></p>
15 <div id="console"></div>
16 <iframe id="xmlframe" onload="frameLoaded()" style="height:0px" src="data:application/xhtml+xml,<?xml version='1.0' encoding='UTF-8'?><body/>"></iframe>
17 <script>
18
19 if (window.layoutTestController)
20     layoutTestController.waitUntilDone();
21
22 function objCWrapperClass(node)
23 {
24     if (!window.objCController)
25         return "only works under DumpRenderTree";
26     return objCController.className(node);
27 }
28
29 function objCObjectOfClass(name)
30 {
31     if (!window.objCController)
32         return "only works under DumpRenderTree";
33     return objCController.objectOfClass(name);
34 }
35
36 function tagObjCWrapperClass(tagName)
37 {
38     return objCWrapperClass(document.createElement(tagName));
39 }
40
41 function testTag(tagName, className, objCClassName)
42 {
43     if (!objCClassName)
44         objCClassName = "DOM" + className;
45     if (window.objCController)
46         shouldBe("tagObjCWrapperClass('" + tagName + "')", "'" + objCClassName + "'");
47 }
48
49 function test(expression, className, objCClassName)
50 {
51     if (!objCClassName)
52         objCClassName = "DOM" + className;
53     if (window.objCController)
54         shouldBe("objCWrapperClass(" + expression + ")", "'" + objCClassName + "'");
55 }
56
57 function runTest()
58 {
59     // NOTE: This is a sister test to fast/dom/wrapper-class.html which test the JS wrapper classes.  Update accordingly.
60     description("This tests wrapper class names for Objective-C.");
61
62     stylesheet = document.getElementById("style").sheet;
63     root = document.documentElement;
64     xmlDocument = document.getElementById("xmlframe").contentDocument;
65
66     debug('Basics');
67     debug('');
68
69     test("document.createAttribute()", "Attr");
70     test("document.createComment()", "Comment");
71     test("document.createDocumentFragment()", "DocumentFragment");
72     test("document.implementation", "DOMImplementation", "DOMImplementation");
73     test("root.attributes", "NamedNodeMap");
74     test("document.createNodeIterator(root, 0, null, false)", "NodeIterator");
75     test("document.getElementsByTagName('div')", "NodeList");
76     test("document.createRange()", "Range");
77     test("document.createTextNode()", "Text");
78     test("document.createTreeWalker(root, 0, null, false)", "TreeWalker");
79
80     debug('');
81     debug('XML');
82     debug('');
83
84     test("xmlDocument", "Document");
85     test("xmlDocument.createCDATASection()", "CDATASection");
86     test("xmlDocument.createElementNS('x', 'x', 'x')", "Element");
87     test("xmlDocument.createEntityReference()", "EntityReference");
88     test("xmlDocument.createProcessingInstruction()", "ProcessingInstruction");
89
90     debug('');
91     debug('Events');
92     debug('');
93
94     test("document.createEvent('Event')", "Event");
95     test("document.createEvent('KeyboardEvent')", "KeyboardEvent");
96     test("document.createEvent('MouseEvent')", "MouseEvent");
97     test("document.createEvent('MutationEvent')", "MutationEvent");
98     test("document.createEvent('OverflowEvent')", "OverflowEvent");
99     test("document.createEvent('TextEvent')", "TextEvent");
100     test("document.createEvent('UIEvent')", "UIEvent");
101     test("document.createEvent('WheelEvent')", "WheelEvent");
102
103     debug('');
104     debug('CSS DOM');
105     debug('');
106
107     test("document.styleSheets", "StyleSheetList");
108     test("stylesheet", "CSSStyleSheet");
109     test("stylesheet.cssRules", "CSSRuleList");
110     test("stylesheet.cssRules.item(0)", "CSSStyleRule");
111     test("stylesheet.cssRules.item(0).style", "CSSStyleDeclaration");
112     test("stylesheet.cssRules.item(0).style.getPropertyCSSValue('color')", "CSSPrimitiveValue");
113     test("stylesheet.cssRules.item(0).style.getPropertyCSSValue('color').getRGBColorValue()", "RGBColor");
114     test("stylesheet.cssRules.item(0).style.getPropertyCSSValue('clip').getRectValue()", "Rect");
115     test("stylesheet.cssRules.item(0).style.getPropertyCSSValue('content')", "CSSValueList");
116     test("stylesheet.cssRules.item(0).style.getPropertyCSSValue('content').item(0).getCounterValue()", "Counter");
117     test("stylesheet.media", "MediaList");
118
119     debug('');
120     debug('XPath');
121     debug('');
122
123     test("document.createExpression('//*', document.createNSResolver(document))", "XPathExpression");
124     test("document.evaluate('//*', document, document.createNSResolver(document), 0, null)", "XPathResult");
125
126     debug('');
127     debug('Other');
128     debug('');
129
130     test("window", "DOMWindow", "DOMAbstractView");
131
132     debug('');
133     debug('HTML DOM');
134     debug('');
135
136     test("root.children", "HTMLCollection");
137     test("document", "HTMLDocument");
138     test("document.createElement('select').options", "HTMLOptionsCollection");
139
140     debug('');
141     debug('HTML Elements');
142     debug('');
143
144     testTag("a", "HTMLAnchorElement");
145     testTag("abbr", "HTMLElement");
146     testTag("acronym", "HTMLElement");
147     testTag("address", "HTMLElement");
148     testTag("applet", "HTMLAppletElement");
149     testTag("area", "HTMLAreaElement");
150     testTag("b", "HTMLElement");
151     testTag("base", "HTMLBaseElement");
152     testTag("basefont", "HTMLBaseFontElement");
153     testTag("bdo", "HTMLElement");
154     testTag("big", "HTMLElement");
155     testTag("blockquote", "HTMLBlockquoteElement", "DOMHTMLElement");
156     testTag("body", "HTMLBodyElement");
157     testTag("br", "HTMLBRElement");
158     testTag("button", "HTMLButtonElement");
159     testTag("canvas", "HTMLCanvasElement");
160     testTag("caption", "HTMLTableCaptionElement");
161     testTag("center", "HTMLElement");
162     testTag("cite", "HTMLElement");
163     testTag("code", "HTMLElement");
164     testTag("col", "HTMLTableColElement");
165     testTag("colgroup", "HTMLTableColElement");
166     testTag("dd", "HTMLElement");
167     testTag("del", "HTMLModElement");
168     testTag("dfn", "HTMLElement");
169     testTag("dir", "HTMLDirectoryElement");
170     testTag("div", "HTMLDivElement");
171     testTag("dl", "HTMLDListElement");
172     testTag("dt", "HTMLElement");
173     testTag("em", "HTMLElement");
174     testTag("embed", "HTMLEmbedElement");
175     testTag("fieldset", "HTMLFieldSetElement");
176     testTag("font", "HTMLFontElement");
177     testTag("form", "HTMLFormElement");
178     testTag("frame", "HTMLFrameElement");
179     testTag("frameset", "HTMLFrameSetElement");
180     testTag("head", "HTMLHeadElement");
181     testTag("h1", "HTMLHeadingElement");
182     testTag("h2", "HTMLHeadingElement");
183     testTag("h3", "HTMLHeadingElement");
184     testTag("h4", "HTMLHeadingElement");
185     testTag("h5", "HTMLHeadingElement");
186     testTag("h6", "HTMLHeadingElement");
187     testTag("hr", "HTMLHRElement");
188     testTag("html", "HTMLHtmlElement");
189     testTag("i", "HTMLElement");
190     testTag("iframe", "HTMLIFrameElement");
191     testTag("image", "HTMLImageElement");
192     testTag("img", "HTMLImageElement");
193     testTag("input", "HTMLInputElement");
194     testTag("ins", "HTMLModElement");
195     testTag("isindex", "HTMLIsIndexElement");
196     testTag("kbd", "HTMLElement");
197     testTag("keygen", "HTMLSelectElement");
198     testTag("label", "HTMLLabelElement");
199     testTag("layer", "HTMLElement");
200     testTag("legend", "HTMLLegendElement");
201     testTag("li", "HTMLLIElement");
202     testTag("link", "HTMLLinkElement");
203     testTag("listing", "HTMLPreElement");
204     testTag("map", "HTMLMapElement");
205     testTag("marquee", "HTMLMarqueeElement");
206     testTag("menu", "HTMLMenuElement");
207     testTag("meta", "HTMLMetaElement");
208     testTag("nobr", "HTMLElement");
209     testTag("noembed", "HTMLElement");
210     testTag("noframes", "HTMLElement");
211     testTag("nolayer", "HTMLElement");
212     testTag("noscript", "HTMLElement");
213     testTag("object", "HTMLObjectElement");
214     testTag("ol", "HTMLOListElement");
215     testTag("optgroup", "HTMLOptGroupElement");
216     testTag("option", "HTMLOptionElement");
217     testTag("p", "HTMLParagraphElement");
218     testTag("param", "HTMLParamElement");
219     testTag("plaintext", "HTMLElement");
220     testTag("pre", "HTMLPreElement");
221     testTag("q", "HTMLQuoteElement");
222     testTag("s", "HTMLElement");
223     testTag("samp", "HTMLElement");
224     testTag("script", "HTMLScriptElement");
225     testTag("select", "HTMLSelectElement");
226     testTag("small", "HTMLElement");
227     testTag("span", "HTMLElement");
228     testTag("strike", "HTMLElement");
229     testTag("strong", "HTMLElement");
230     testTag("style", "HTMLStyleElement");
231     testTag("sub", "HTMLElement");
232     testTag("sup", "HTMLElement");
233     testTag("table", "HTMLTableElement");
234     testTag("tbody", "HTMLTableSectionElement");
235     testTag("td", "HTMLTableCellElement");
236     testTag("textarea", "HTMLTextAreaElement");
237     testTag("tfoot", "HTMLTableSectionElement");
238     testTag("th", "HTMLTableCellElement");
239     testTag("thead", "HTMLTableSectionElement");
240     testTag("title", "HTMLTitleElement");
241     testTag("tr", "HTMLTableRowElement");
242     testTag("tt", "HTMLElement");
243     testTag("u", "HTMLElement");
244     testTag("ul", "HTMLUListElement");
245     testTag("var", "HTMLElement");
246     testTag("wbr", "HTMLElement");
247     testTag("xmp", "HTMLPreElement");
248     
249     debug('');
250     debug('JavaScript types');
251     debug('');
252
253     shouldBe("objCWrapperClass(null)", "'nil'");
254     shouldBe("objCWrapperClass(undefined)", "'WebUndefined'");
255     shouldBe("objCWrapperClass(0)", "'NSCFNumber'");
256     shouldBe("objCWrapperClass(1)", "'NSCFNumber'");
257     shouldBe("objCWrapperClass(false)", "'NSCFBoolean'");
258     shouldBe("objCWrapperClass(true)", "'NSCFBoolean'");
259     shouldBe("objCWrapperClass('')", "'NSCFString'");
260     shouldBe("objCWrapperClass({ })", "'WebScriptObject'");
261     shouldBe("objCWrapperClass([ ])", "'WebScriptObject'");
262
263     shouldBe("objCObjectOfClass('NSNull')", "null"); // can't test with typeof because typeof null is 'object'
264     shouldBe("typeof objCObjectOfClass('')", "'undefined'");
265     shouldBe("typeof objCObjectOfClass('WebUndefined')", "'undefined'");
266     shouldBe("typeof objCObjectOfClass('NSCFBoolean')", "'boolean'");
267     shouldBe("typeof objCObjectOfClass('NSCFNumber')", "'number'");
268     shouldBe("typeof objCObjectOfClass('NSCFString')", "'string'");
269     shouldBe("typeof objCObjectOfClass('WebScriptObject')", "'object'");
270     shouldBeTrue("objCObjectOfClass('NSArray') instanceof Array");
271
272     // Not yet tested:
273
274     // CSSCharsetRule
275     // CSSFontFaceRule
276     // CSSImportRule
277     // CSSMediaRule
278     // CSSPageRule
279     // CSSRule
280     // CSSValue
281     // SVGColor
282     // SVGPaint
283     // SVGZoomEvent
284
285     // the various window sub-objects
286
287     // what else is missing?
288
289     if (window.layoutTestController)
290         layoutTestController.notifyDone();
291 }
292
293 function frameLoaded()
294 {
295     runTest();
296 }
297
298 </script>
299 </body>
300 </html>