mshtml/tests: Added a test of calls to functions from different frame.
[wine.git] / dlls / mshtml / tests / elements.js
bloba16194f72943c2e4d3a39857e48f57192be1fe50
1 /*
2  * Copyright 2017 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 function test_input_selection() {
20     var input = document.createElement("input");
21     input.type = "text";
22     input.value = "test";
23     document.body.appendChild(input);
25     function test_range(start, end) {
26         ok(input.selectionStart === start, "input.selectionStart = " + input.selectionStart + " expected " + start);
27         ok(input.selectionEnd === end, "input.selectionEnd = " + input.selectionEnd + " expected " + end);
28     }
30     test_range(0, 0);
32     input.selectionStart = 2;
33     test_range(2, 2);
35     input.selectionStart = -1;
36     test_range(0, 2);
38     input.selectionStart = 10;
39     test_range(4, 4);
41     input.selectionEnd = 2;
42     test_range(2, 2);
44     input.selectionEnd = -1;
45     test_range(0, 0);
47     input.selectionEnd = 10;
48     test_range(0, 4);
50     input.setSelectionRange(2, 3);
51     test_range(2, 3);
53     input.setSelectionRange(-1, 10);
54     test_range(0, 4);
56     input.setSelectionRange(3, 3);
57     test_range(3, 3);
59     next_test();
62 function test_textContent() {
63     var text = document.createTextNode("test");
64     ok(text.textContent === "test", "text.textContent = " + text.textContent);
66     var div = document.createElement("div");
67     document.body.appendChild(div);
68     div.innerHTML = "abc<script>/* */</script><div>text</div>";
69     ok(div.textContent === "abc/* */text", "div.textContent = " + div.textContent);
71     div.textContent = "test";
72     ok(div.textContent === "test", "div.textContent = " + div.textContent);
73     ok(div.childNodes.length === 1, "div.childNodes.length = " + div.childNodes.length);
74     ok(div.firstChild.textContent === "test", "div.firstChild.textContent = " + div.firstChild.textContent);
76     div.textContent = "";
77     ok(div.textContent === "", "div.textContent = " + div.textContent);
78     ok(div.childNodes.length === 0, "div.childNodes.length = " + div.childNodes.length);
80     ok(document.textContent === null, "document.textContent = " + document.textContent);
82     next_test();
85 function test_ElementTraversal() {
86     var div = document.createElement("div");
87     div.innerHTML = "abc<b>bold</b><script>/* */<script><div>text</div>def";
88     ok(div.firstElementChild.outerHTML === "<b>bold</b>",
89             "div.firstElementChild.outerHTML = " + div.firstElementChild.outerHTML);
91     div.innerHTML = "abc";
92     ok(div.firstElementChild === null, "div.firstElementChild = " + div.firstElementChild);
94     ok(!("firstElementChild" in document), "firstElementChild found in document");
96     next_test();
99 function test_head() {
100     var h = document.head;
101     ok(h.tagName === "HEAD", "h.tagName = " + h.tagName);
102     ok(h === document.getElementsByTagName("head")[0], "unexpected head element");
104     next_test();
107 function test_iframe() {
108     document.body.innerHTML = '<iframe src="runscript.html?frame.js"></iframe>'
109     var iframe = document.body.firstChild;
111     iframe.onload = guard(function() {
112         var r = iframe.contentWindow.global_object.get_global_value();
113         ok(r === "global value", "get_global_value() returned " + r);
115         var f = iframe.contentWindow.global_object.get_global_value;
116         ok(f() === "global value", "f() returned " + f());
118         next_test();
119     });
122 function test_getElementsByClassName() {
123     var elems;
125     document.body.innerHTML = '<div class="class1">'
126         + '<div class="class1"></div>'
127         + '<a id="class1" class="class2"></a>'
128         + '</div>'
129         + '<script class="class1"></script>';
131     elems = document.getElementsByClassName("class1");
132     ok(elems.length === 3, "elems.length = " + elems.length);
133     ok(elems[0].tagName === "DIV", "elems[0].tagName = " + elems[0].tagName);
134     ok(elems[1].tagName === "DIV", "elems[1].tagName = " + elems[1].tagName);
135     ok(elems[2].tagName === "SCRIPT", "elems[2].tagName = " + elems[2].tagName);
137     elems = document.getElementsByClassName("class2");
138     ok(elems.length === 1, "elems.length = " + elems.length);
139     ok(elems[0].tagName === "A", "elems[0].tagName = " + elems[0].tagName);
141     elems = document.getElementsByClassName("classnotfound");
142     ok(elems.length == 0, "elems.length = " + elems.length);
144     next_test();
147 function test_query_selector() {
148     document.body.innerHTML = '<div class="class1">'
149         + '<div class="class1"></div>'
150         + '<a id="class1" class="class2"></a>'
151         + '</div>'
152         + '<script class="class1"></script>';
154     var e = document.querySelector("nomatch");
155     ok(e === null, "e = " + e);
157     e = document.querySelector(".class1");
158     ok(e.tagName === "DIV", "e.tagName = " + e.tagName);
160     e = document.querySelector("a");
161     ok(e.tagName === "A", "e.tagName = " + e.tagName);
163     next_test();
166 function test_compare_position() {
167     document.body.innerHTML = '<div><div></div><div></div></div>';
169     var parent = document.body.firstChild;
170     var child1 = parent.firstChild;
171     var child2 = child1.nextSibling;
172     var elem = document.createElement("div");
174     function compare_position(node1, node2, expected_result, ignore_mask) {
175         var cmp = node1.compareDocumentPosition(node2);
176         ok((cmp & ~ignore_mask) == expected_result,
177            "compareDocumentPosition returned " + cmp + " expected " + expected_result);
178     }
180     compare_position(child1, child2, 4);
181     compare_position(child2, child1, 2);
182     compare_position(parent, child1, 0x14);
183     compare_position(parent, child2, 0x14);
184     compare_position(parent, elem, 0x21, 6);
185     compare_position(elem, parent, 0x21, 6);
187     next_test();
190 var tests = [
191     test_input_selection,
192     test_textContent,
193     test_ElementTraversal,
194     test_getElementsByClassName,
195     test_head,
196     test_iframe,
197     test_query_selector,
198     test_compare_position