mshtml: Remove duplicated property entries in preprocess_dispex_data.
[wine] / dlls / mshtml / tests / jstest.html
1 <html>
2 <head>
3 <script>
4 function ok(b,m) {
5     return external.ok(b, m);
6 }
7
8 function test_removeAttribute(e) {
9     ok(e.removeAttribute('nonexisting') === false, "removeAttribute('nonexisting') didn't return false");
10
11     e.title = "title";
12     ok(e.removeAttribute('title') === true, "removeAttribute('title') didn't return true");
13     ok(e.title === "", "e.title = " + e.title);
14     ok(("title" in e) === true, "title is not in e");
15
16     e["myattr"] = "test";
17     ok(e.removeAttribute('myattr') === true, "removeAttribute('myattr') didn't return true");
18     ok(e["myattr"] === undefined, "e['myattr'] = " + e['myattr']);
19     ok(("myattr" in e) === false, "myattr is in e");
20
21 }
22
23 function test_select_index() {
24     var s = document.getElementById("sel");
25
26     ok("0" in s, "'0' is not in s");
27     ok(s[0].text === "opt1", "s[0].text = " + s[0].text);
28     ok("1" in s, "'1 is not in s");
29     ok(s[1].text === "opt2", "s[1].text = " + s[1].text);
30     ok("2" in s, "'2' is in s");
31     ok(s[2] === null, "s[2] = " + s[2]);
32 }
33
34 function test_createDocumentFragment() {
35     var fragment = document.createDocumentFragment();
36
37     ok(typeof(fragment) === "object", "typeof(fragmend) = " + typeof(fragment));
38     ok(fragment.nodeType === 11, "fragment.nodeType = " + fragment.nodeType);
39     ok(fragment.nodeName === "#document-fragment", "fragment.nodeName = " + fragment.nodeName);
40
41     var cloned = fragment.cloneNode(true);
42     ok(cloned.nodeType === 11, "cloned.nodeType = " + cloned.nodeType);
43     ok(cloned.nodeName === "#document-fragment", "cloned.nodeName = " + cloned.nodeName);
44 }
45
46 function test_document_name_as_index() {
47     document.body.innerHTML = '<form name="formname"></form>';
48     var e = document.getElementById("formname");
49     ok(!!e, "e is null");
50
51     ok(document.formname === e, "document.formname != getElementById('formname')");
52     ok("formname" in document, "formname' is not in document");
53
54     document.body.removeChild(e);
55
56     ok(document.formname === undefined, "document.formname is not undefined");
57     ok(!("formname" in document), "formname' is in document");
58
59     document.body.innerHTML = '<form id="formid"></form>';
60     var e = document.getElementById("formid");
61     ok(!!e, "e is null");
62     ok(!("formid" in document), "formid is in document");
63
64     document.body.innerHTML = '<form name="formname"></form>';
65     ok("formname" in window, "formname' is not in window");
66     ok(typeof(window.formname) === "object", "typeof(window.formname) = " + typeof(window.formname));
67     window.formname = 1;
68     ok(window.formname === 1, "window.formname = " + window.formname);
69     formname = 2;
70     ok(window.formname === 2, "window.formname = " + window.formname);
71
72     document.body.innerHTML = '<iframe id="iframeid"></iframe>';
73     ok("iframeid" in window, "iframeid is not in window");
74     e = document.getElementById("iframeid");
75     ok(!!e, "e is null");
76     ok(iframeid != e, "iframeid == e");
77     ok(iframeid.frameElement === e, "frameid != e.contentWindow");
78 }
79
80 function test_remove_style_attribute() {
81     var s = document.body.style, b;
82
83     s.somevar = "test";
84     b = s.removeAttribute("somevar", 1);
85     ok(b, "removeAttribute returned " + b + " expected true");
86     b = s.removeAttribute("somevar", 1);
87     ok(b === false, "removeAttribute returned " + b + " expected false");
88 }
89
90 function test_clone_node() {
91     var elem, cloned;
92
93     elem = document.getElementById("divid");
94     elem.style.filter = "alpha(opacity=50)";
95     ok(elem.style.filter === "alpha(opacity=50)", "elem.style.filter = " + elem.style.filter);
96
97     cloned = elem.cloneNode(true);
98     ok(cloned.style.filter === "alpha(opacity=50)", "cloned.style.filter = " + cloned.style.filter);
99 }
100
101 function test_setAttribute() {
102     var input;
103
104     document.body.innerHTML = '<input id="inputid"></input>';
105     input = document.getElementById("inputid");
106     ok(input.checked === false, "input.checked = " + input.checked);
107
108     input.setAttribute("checked", "test");
109     ok(input.checked === true, "input.checked = " + input.checked);
110
111     input.setAttribute("checked", 0);
112     ok(input.checked === false, "input.checked = " + input.checked);
113
114     input.setAttribute("checked", "");
115     ok(input.checked === false, "input.checked = " + input.checked);
116 }
117
118 function test_attribute_collection() {
119     var div, attr;
120
121     document.body.innerHTML = '<div id="divid" class="test"></div>';
122     div = document.getElementById("divid");
123
124     attr = div.attributes["dir"];
125     ok(attr === div.attributes["dir"], "attr !== div.attributes['dir']");
126 }
127
128 function test_getter_call() {
129     document.body.innerHTML = '<div id="divid"></div>';
130
131     var e = document.getElementById("divid");
132
133     e.myfunc = function(x) { this.myfunc_called = x; };
134     e.myfunc("test");
135     ok(e.myfunc_called === "test", "e.myfunc_called = " + e.myfunc_called);
136
137     e.onmousedown = function(x) { this.onmousedown_called = x; };
138     e.onmousedown("test");
139     ok(e.onmousedown_called === "test", "e.onmousedown_called = " + e.onmousedown_called);
140 }
141
142 function test_arg_conv() {
143     /* this call would throw if the argument wasn't converted by JScript */
144     window.clearInterval("");
145
146     navigator.javaEnabled();
147 }
148
149 function test_override_functions() {
150     function override_func() { return "test"; }
151
152     ok(typeof(window.showModalDialog) === "object", "typeof(window.showModalDialog) = " + typeof(window.showModalDialog));
153     window.showModalDialog = override_func;
154     ok(window.showModalDialog === override_func, "window.showModalDialog != override_func");
155     ok(typeof(window.showModalDialog) === "function", "typeof(window.showModalDialog) = " + typeof(window.showModalDialog));
156
157     document.body.innerHTML = '<div id="divid"></div>';
158     var div = document.getElementById("divid");
159     ok(typeof(div.addBehavior) === "object", "typeof(div.addBehavior) = " + typeof(div.addBehavior));
160     div.addBehavior = override_func;
161     ok(div.addBehavior === override_func, "div.addBehavior != override_func");
162     ok(typeof(div.addBehavior) === "function", "typeof(div.addBehavior) = " + typeof(div.addBehavior));
163
164     var tmp = div.addBehavior();
165     ok(tmp === "test", "div.addBehavior() = " + tmp);
166 }
167
168 function test_forin() {
169     var cnt=0;
170
171     document.body.innerHTML = '<a id="aid"></a>';
172
173     for(var x in document.getElementById("aid")) {
174         cnt++;
175     }
176
177     ok(cnt > 100, "cnt = " + cnt);
178 }
179
180 var globalVar = false;
181
182 function runTests() {
183     obj = new Object();
184     ok(obj === window.obj, "obj !== window.obj");
185
186     ok(typeof(divid) === "object", "typeof(divid) = " + typeof(divid));
187
188     test_removeAttribute(document.getElementById("divid"));
189     test_removeAttribute(document.body);
190     test_select_index();
191     test_clone_node();
192     test_createDocumentFragment();
193     test_document_name_as_index();
194     test_remove_style_attribute();
195     test_getter_call();
196     test_setAttribute();
197     test_attribute_collection();
198     test_arg_conv();
199     test_override_functions();
200     test_forin();
201
202     var r = window.execScript("globalVar = true;");
203     ok(r === undefined, "execScript returned " + r);
204     ok(globalVar === true, "globalVar = " + globalVar);
205 }
206
207 function runTest() {
208     try {
209         runTests();
210     }catch(e) {
211         ok(false, "got exception");
212     }
213
214     external.reportSuccess();
215 }
216 </script>
217 <body onload="runTest();">
218 <div id="divid"></div>
219 <select id="sel">
220 <option>opt1</option>
221 <option>opt2</option>
222 </select>
223 </body>
224 </html>