Bug 457825 - Support access control headers when downloading fonts. r=jonas,dbaron...
[wine-gecko.git] / testing / mochitest / tests / test_MochiKit-DOM.html
blob07fb5c0abd38a699fe1d56166015fb49898db2e8
1 <html>
2 <head>
3 <script type="text/javascript" src="/MochiKit/MockDOM.js"></script>
4 <script type="text/javascript" src="/MochiKit/Base.js"></script>
5 <script type="text/javascript" src="/MochiKit/Iter.js"></script>
6 <script type="text/javascript" src="/MochiKit/DOM.js"></script>
7 <script type="text/javascript" src="/MochiKit/Style.js"></script>
8 <script type="text/javascript" src="../SimpleTest/SimpleTest.js"></script>
9 <link rel="stylesheet" type="text/css" href="../SimpleTest/test.css">
10 </head>
11 <body>
13 <div style="display: none;">
14 <form id="form_test">
15 <select name="select">
16 <option value="foo" selected="selected">foo</option>
17 <option value="bar">bar</option>
18 <option value="baz">baz</option>
19 </select>
20 <select name="selmultiple" multiple="multiple">
21 <option value="bar" selected="selected">bar</option>
22 <option value="baz" selected="selected">baz</option>
23 <option value="foo">foo</option>
24 </select>
25 <input type="hidden" name="hidden" value="test" />
26 <input type="radio" name="radio_off" value="1" />
27 <input type="radio" name="radio_off" value="2" />
28 <input type="radio" name="radio_off" value="3" />
29 <input type="radio" name="radio_on" value="1" />
30 <input type="radio" name="radio_on" value="2" checked="checked" />
31 <input type="radio" name="radio_on" value="3" />
32 </form>
33 <form id="form_test2">
34 <select name="selempty">
35 <option value="" selected="selected">foo</option>
36 </select>
37 <select name="selempty2">
38 <option selected="selected">foo</option>
39 </select>
40 </form>
41 </div>
43 <pre id="test">
44 <script type="text/javascript">
45 try {
47 lst = [];
48 o = {"blah": function () { lst.push("original"); }};
49 addToCallStack(o, "blah", function () { lst.push("new"); }, true);
50 addToCallStack(o, "blah", function () { lst.push("stuff"); }, true);
51 is( typeof(o.blah), 'function', 'addToCallStack has a function' );
52 is( o.blah.callStack.length, 3, 'callStack length 3' );
53 o.blah();
54 is( lst.join(" "), "original new stuff", "callStack in correct order" );
55 is( o.blah, null, "set to null" );
56 lst = [];
57 o = {"blah": function () { lst.push("original"); }};
58 addToCallStack(o, "blah",
59 function () { lst.push("new"); return false;}, false);
60 addToCallStack(o, "blah", function () { lst.push("stuff"); }, false);
61 o.blah();
62 is( lst.join(" "), "original new", "callStack in correct order (abort)" );
63 o.blah();
64 is( lst.join(" "), "original new original new", "callStack in correct order (again)" );
67 is( escapeHTML("<>\"&bar"), "&lt;&gt;&quot;&amp;bar", "escapeHTML" ); // for emacs highlighting: "
69 var isDOM = function (value, expected, message) {
70 is( escapeHTML(toHTML(value)), escapeHTML(expected), message );
73 var d = document.createElement('span');
74 updateNodeAttributes(d, {"foo": "bar", "baz": "wibble"});
75 isDOM( d, '<span baz="wibble" foo="bar"/>', "updateNodeAttributes" );
77 var d = document.createElement('span');
78 appendChildNodes(d, 'word up', [document.createElement('span')]);
79 isDOM( d, '<span>word up<span/></span>', 'appendChildNodes' );
81 replaceChildNodes(d, 'Think Different');
82 isDOM( d, '<span>Think Different</span>', 'replaceChildNodes' );
84 d = createDOM("span");
85 isDOM( d, "<span/>", "createDOM empty" );
88 d = createDOM("span", {"foo": "bar", "baz": "wibble"});
89 isDOM( d, '<span baz="wibble" foo="bar"/>', "createDOM attributes" );
91 d = createDOM("span", {"foo": "bar", "baz": "wibble"}, "one", "two", "three");
92 is( getNodeAttribute(d, 'foo'), "bar", "createDOM attribute" );
93 is( getNodeAttribute(d, 'baz'), "wibble", "createDOM attribute" );
94 is( scrapeText(d), "onetwothree", "createDOM contents" );
96 isDOM( d, '<span baz="wibble" foo="bar">onetwothree</span>', "createDOM contents" );
98 d = createDOM("span", null, function (f) {
99 return this.nodeName.toLowerCase() + "hi" + f.nodeName.toLowerCase();});
100 isDOM( d, '<span>spanhispan</span>', 'createDOM function call' );
102 d = createDOM("span", null, {msg: "hi", dom: function (f) {
103 return f.nodeName.toLowerCase() + this.msg; }});
104 isDOM( d, '<span>spanhi</span>', 'createDOM this.dom() call' );
106 d = createDOM("span", null, {msg: "hi", __dom__: function (f) {
107 return f.nodeName.toLowerCase() + this.msg; }});
108 isDOM( d, '<span>spanhi</span>', 'createDOM this.__dom__() call' );
110 d = createDOM("span", null, range(4));
111 isDOM( d, '<span>0123</span>', 'createDOM iterable' );
114 var d = {"taco": "pork"};
115 registerDOMConverter("taco",
116 function (o) { return !isUndefinedOrNull(o.taco); },
117 function (o) { return "Goddamn, I like " + o.taco + " tacos"; }
119 d = createDOM("span", null, d);
120 // not yet public API
121 domConverters.unregister("taco");
123 isDOM( d, "<span>Goddamn, I like pork tacos</span>", "createDOM with custom converter" );
126 escapeHTML(toHTML(SPAN(null))),
127 escapeHTML(toHTML(createDOM("span", null))),
128 "createDOMFunc vs createDOM"
131 is( scrapeText(d), "Goddamn, I like pork tacos", "scrape OK" );
132 is( scrapeText(d, true).join(""), "Goddamn, I like pork tacos", "scrape Array OK" );
134 var st = DIV(null, STRONG(null, "d"), "oor ", STRONG(null, "f", SPAN(null, "r"), "a"), "me");
135 is( scrapeText(st), "door frame", "scrape in-order" );
138 ok( !isUndefinedOrNull(getElement("test")), "getElement might work" );
139 ok( !isUndefinedOrNull($("test")), "$alias$$ CASH MONEY alias might work" );
141 d = createDOM("span", null, "one", "two");
142 swapDOM(d.childNodes[0], document.createTextNode("uno"));
143 isDOM( d, "<span>unotwo</span>", "swapDOM" );
145 is( scrapeText(d, true).join(" "), "uno two", "multi-node scrapeText" );
148 TODO:
149 addLoadEvent (async test?)
153 d = createDOM("span", {"class": "foo"});
154 setElementClass(d, "bar baz");
155 ok( d.className == "bar baz", "setElementClass");
156 toggleElementClass("bar", d);
157 ok( d.className == "baz", "toggleElementClass: " + d.className);
158 toggleElementClass("bar", d);
159 ok( hasElementClass(d, "baz", "bar"),
160 "toggleElementClass 2: " + d.className);
161 addElementClass(d, "bar");
162 ok( hasElementClass(d, "baz", "bar"),
163 "toggleElementClass 3: " + d.className);
164 ok( addElementClass(d, "blah"), "addElementClass return");
165 ok( hasElementClass(d, "baz", "bar", "blah"), "addElementClass action");
166 ok( !hasElementClass(d, "not"), "hasElementClass single");
167 ok( !hasElementClass(d, "baz", "not"), "hasElementClass multiple");
168 ok( removeElementClass(d, "blah"), "removeElementClass" );
169 ok( !removeElementClass(d, "blah"), "removeElementClass again" );
170 ok( !hasElementClass(d, "blah"), "removeElementClass again (hasElement)" );
171 removeElementClass(d, "baz");
172 ok( !swapElementClass(d, "blah", "baz"), "false swapElementClass" );
173 ok( !hasElementClass(d, "baz"), "false swapElementClass from" );
174 ok( !hasElementClass(d, "blah"), "false swapElementClass to" );
175 addElementClass(d, "blah");
176 ok( swapElementClass(d, "blah", "baz"), "swapElementClass" );
177 ok( hasElementClass(d, "baz"), "swapElementClass has toClass" );
178 ok( !hasElementClass(d, "blah"), "swapElementClass !has fromClass" );
179 ok( !swapElementClass(d, "blah", "baz"), "swapElementClass twice" );
180 ok( hasElementClass(d, "baz"), "swapElementClass has toClass" );
181 ok( !hasElementClass(d, "blah"), "swapElementClass !has fromClass" );
183 TABLE;
184 TBODY;
186 var t = TABLE(null,
187 TBODY({"class": "foo bar", "id":"tbody0"},
188 TR({"class": "foo", "id":"tr0"}),
189 TR({"class": "bar", "id":"tr1"})
193 var matchElements = getElementsByTagAndClassName;
195 map(itemgetter("id"), matchElements(null, "foo", t)).join(" "),
196 "tbody0 tr0",
197 "getElementsByTagAndClassName found all tags with foo class"
200 map(itemgetter("id"), matchElements("tr", "foo", t)).join(" "),
201 "tr0",
202 "getElementsByTagAndClassName found all tr tags with foo class"
205 map(itemgetter("id"), matchElements("tr", null, t)).join(" "),
206 "tr0 tr1",
207 "getElementsByTagAndClassName found all tr tags"
210 var oldDoc = document;
211 var doc = MochiKit.MockDOM.createDocument();
212 is( currentDocument(), document, "currentDocument() correct" );
213 withDocument(doc, function () {
214 ok( document != doc, "global doc unchanged" );
215 is( currentDocument(), doc, "currentDocument() correct" );
216 var h1 = H1();
217 var span = SPAN(null, "foo", h1);
218 appendChildNodes(currentDocument().body, span);
220 is( document, oldDoc, "doc restored" );
221 is( doc.childNodes.length, 1, "doc has one child" );
222 is( doc.body.childNodes.length, 1, "body has one child" );
223 var sp = doc.body.childNodes[0];
224 is( sp.nodeName, "SPAN", "only child is SPAN" );
225 is( sp.childNodes.length, 2, "SPAN has two childNodes" );
226 is( sp.childNodes[0].nodeValue, "foo", "first node is text" );
227 is( sp.childNodes[1].nodeName, "H1", "second child is H1" );
229 is( currentDocument(), document, "currentDocument() correct" );
230 try {
231 withDocument(doc, function () {
232 ok( document != doc, "global doc unchanged" );
233 is( currentDocument(), doc, "currentDocument() correct" );
234 throw new Error("foo");
236 ok( false, "didn't throw" );
237 } catch (e) {
238 ok( true, "threw" );
241 doc = MochiKit.MockDOM.createDocument();
242 var frm;
243 withDocument(doc, function () {
244 frm = FORM({name: "ignore"},
245 INPUT({name:"foo", value:"bar"}),
246 INPUT({name:"foo", value:"bar"}),
247 INPUT({name:"baz", value:"bar"})
250 var kv = formContents(frm);
251 is( kv[0].join(","), "foo,foo,baz", "mock formContents names" );
252 is( kv[1].join(","), "bar,bar,bar", "mock formContents values" );
253 is( queryString(frm), "foo=bar&foo=bar&baz=bar", "mock queryString hook" );
255 var kv = formContents("form_test");
256 is( kv[0].join(","), "select,selmultiple,selmultiple,hidden,radio_on", "formContents names" );
257 is( kv[1].join(","), "foo,bar,baz,test,2", "formContents values" );
258 is( queryString("form_test"), "select=foo&selmultiple=bar&selmultiple=baz&hidden=test&radio_on=2", "queryString hook" );
259 kv = formContents("form_test2");
260 is( kv[0].join(","), "selempty,selempty2", "formContents names empty option values" );
261 is( kv[1].join(","), ",foo", "formContents empty option values" );
262 is( queryString("form_test2"), "selempty=&selempty2=foo", "queryString empty option values" );
264 var d = DIV(null, SPAN(), " \n\t", SPAN(), "foo", SPAN(), " ");
265 is( d.childNodes.length, 6, "removeEmptyNodes test conditions correct" );
266 removeEmptyTextNodes(d);
267 is( d.childNodes.length, 4, "removeEmptyNodes" );
269 ok( true, "test suite finished!");
272 } catch (err) {
274 var s = "test suite failure!\n";
275 var o = {};
276 var k = null;
277 for (k in err) {
278 // ensure unique keys?!
279 if (!o[k]) {
280 s += k + ": " + err[k] + "\n";
281 o[k] = err[k];
284 ok ( false, s );
287 </script>
288 </pre>
289 </body>
290 </html>