jscript: Added Object.defineProperties stub.
[wine.git] / dlls / mshtml / tests / documentmode.js
blob02f077883db62648efa1b1fe90aeec5525f93b69
1 /*
2  * Copyright 2016 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
19 var compat_version;
21 function test_elem_props() {
22     var elem = document.documentElement;
24     function test_exposed(prop, expect) {
25         if(expect)
26             ok(prop in elem, prop + " not found in element.");
27         else
28             ok(!(prop in elem), prop + " found in element.");
29     }
31     var v = document.documentMode;
33     test_exposed("doScroll", v < 11);
34     test_exposed("querySelectorAll", v >= 8);
35     test_exposed("textContent", v >= 9);
36     test_exposed("prefix", v >= 9);
37     test_exposed("firstElementChild", v >= 9);
38     test_exposed("onsubmit", v >= 9);
39     test_exposed("getElementsByClassName", v >= 9);
40     test_exposed("removeAttributeNS", v >= 9);
41     test_exposed("addEventListener", v >= 9);
42     test_exposed("removeEventListener", v >= 9);
43     test_exposed("dispatchEvent", v >= 9);
45     next_test();
48 function test_doc_props() {
49     function test_exposed(prop, expect) {
50         if(expect)
51             ok(prop in document, prop + " not found in document.");
52         else
53             ok(!(prop in document), prop + " found in document.");
54     }
56     var v = document.documentMode;
58     test_exposed("textContent", v >= 9);
59     test_exposed("prefix", v >= 9);
60     test_exposed("defaultView", v >= 9);
61     test_exposed("head", v >= 9);
62     test_exposed("addEventListener", v >= 9);
63     test_exposed("removeEventListener", v >= 9);
64     test_exposed("dispatchEvent", v >= 9);
65     test_exposed("createEvent", v >= 9);
67     test_exposed("parentWindow", true);
68     if(v >= 9) ok(document.defaultView === document.parentWindow, "defaultView != parentWindow");
70     next_test();
73 function test_window_props() {
74     function test_exposed(prop, expect) {
75         if(expect)
76             ok(prop in window, prop + " not found in window.");
77         else
78             ok(!(prop in window), prop + " found in window.");
79     }
81     var v = document.documentMode;
83     test_exposed("postMessage", true);
84     test_exposed("addEventListener", v >= 9);
85     test_exposed("removeEventListener", v >= 9);
86     test_exposed("dispatchEvent", v >= 9);
88     next_test();
91 function test_xhr_props() {
92     var xhr = new XMLHttpRequest();
94     function test_exposed(prop, expect) {
95         if(expect)
96             ok(prop in xhr, prop + " not found in XMLHttpRequest.");
97         else
98             ok(!(prop in xhr), prop + " found in XMLHttpRequest.");
99     }
101     var v = document.documentMode;
103     test_exposed("addEventListener", v >= 9);
104     test_exposed("removeEventListener", v >= 9);
105     test_exposed("dispatchEvent", v >= 9);
107     next_test();
110 function test_javascript() {
111     var g = window;
113     function test_exposed(func, obj, expect) {
114         if(expect)
115             ok(func in obj, func + " not found in " + obj);
116         else
117             ok(!(func in obj), func + " found in " + obj);
118     }
120     function test_parses(code, expect) {
121         var success;
122         try {
123             eval(code);
124             success = true;
125         }catch(e) {
126             success = false;
127         }
128         if(expect)
129             ok(success === true, code + " did not parse");
130         else
131             ok(success === false, code + " parsed");
132     }
134     var v = document.documentMode;
136     test_exposed("ScriptEngineMajorVersion", g, true);
138     test_exposed("JSON", g, v >= 8);
139     test_exposed("now", Date, true);
140     test_exposed("toISOString", Date.prototype, v >= 9);
141     test_exposed("isArray", Array, v >= 9);
142     test_exposed("indexOf", Array.prototype, v >= 9);
143     /* FIXME: IE8 implements weird semi-functional property descriptors. */
144     if(v != 8) {
145         test_exposed("getOwnPropertyDescriptor", Object, v >= 8);
146         test_exposed("defineProperty", Object, v >= 8);
147         test_exposed("defineProperties", Object, v >= 8);
148     }
150     test_parses("if(false) { o.default; }", v >= 9);
151     test_parses("if(false) { o.with; }", v >= 9);
152     test_parses("if(false) { o.if; }", v >= 9);
154     next_test();
157 function test_elem_by_id() {
158     document.body.innerHTML = '<form id="testid" name="testname"></form>';
160     var id_elem = document.getElementById("testid");
161     ok(id_elem.tagName === "FORM", "id_elem.tagName = " + id_elem.tagName);
163     var name_elem = document.getElementById("testname");
164     if(document.documentMode < 8)
165         ok(id_elem === name_elem, "id_elem != id_elem");
166     else
167         ok(name_elem === null, "name_elem != null");
169     next_test();
172 function test_doc_mode() {
173     compat_version = parseInt(document.location.search.substring(1));
175     trace("Testing compatibility mode " + compat_version);
177     if(compat_version > 6 && compat_version > document.documentMode) {
178         win_skip("Document mode not supported (expected " + compat_version + " got " + document.documentMode + ")");
179         reportSuccess();
180         return;
181     }
183     ok(Math.max(compat_version, 5) === document.documentMode, "documentMode = " + document.documentMode);
185     if(document.documentMode > 5)
186         ok(document.compatMode === "CSS1Compat", "document.compatMode = " + document.compatMode);
187     else
188         ok(document.compatMode === "BackCompat", "document.compatMode = " + document.compatMode);
190     next_test();
193 function test_iframe_doc_mode() {
194     var iframe = document.createElement("iframe");
196     iframe.onload = function() {
197         var iframe_mode = iframe.contentWindow.document.documentMode;
198         if(document.documentMode < 9)
199             ok(iframe_mode === 5, "iframe_mode = " + iframe_mode);
200         else
201             ok(iframe_mode === document.documentMode, "iframe_mode = " + iframe_mode);
202         next_test();
203     }
205     iframe.src = "about:blank";
206     document.body.appendChild(iframe);
209 function test_conditional_comments() {
210     var div = document.createElement("div");
211     document.body.appendChild(div);
213     function test_version(v) {
214         var version = compat_version ? compat_version : 7;
216         div.innerHTML = "<!--[if lte IE " + v + "]>true<![endif]-->";
217         ok(div.innerText === (version <= v ? "true" : ""),
218            "div.innerText = " + div.innerText + " for version (<=) " + v);
220         div.innerHTML = "<!--[if lt IE " + v + "]>true<![endif]-->";
221         ok(div.innerText === (version < v ? "true" : ""),
222            "div.innerText = " + div.innerText + " for version (<) " + v);
224         div.innerHTML = "<!--[if gte IE " + v + "]>true<![endif]-->";
225         ok(div.innerText === (version >= v && version < 10 ? "true" : ""),
226            "div.innerText = " + div.innerText + " for version (>=) " + v);
228         div.innerHTML = "<!--[if gt IE " + v + "]>true<![endif]-->";
229         ok(div.innerText === (version > v && version < 10 ? "true" : ""),
230            "div.innerText = " + div.innerText + " for version (>) " + v);
231     }
233     test_version(5);
234     test_version(6);
235     test_version(7);
236     test_version(8);
238     next_test();
241 var tests = [
242     test_doc_mode,
243     test_iframe_doc_mode,
244     test_elem_props,
245     test_doc_props,
246     test_window_props,
247     test_javascript,
248     test_xhr_props,
249     test_elem_by_id,
250     test_conditional_comments