4 <title>Test for nsIHTMLEditor.getSelectedElement()
</title>
5 <script src=
"/tests/SimpleTest/SimpleTest.js"></script>
6 <script src=
"/tests/SimpleTest/EventUtils.js"></script>
7 <link rel=
"stylesheet" href=
"/tests/SimpleTest/test.css">
12 <div id=
"content" contenteditable
></div>
13 <img src=
"green.png"><!-- necessary to load this image before start testing -->
17 <script class=
"testbody" type=
"application/javascript">
19 SimpleTest.waitForExplicitFinish();
20 SimpleTest.waitForFocus(async function() {
21 let editor = document.getElementById(
"content");
22 let selection = window.getSelection();
24 // nsIHTMLEditor.getSelectedElement() is probably designed to retrieve
25 // a[href]:not([
href=
""]), a[name]:not([
name=
""]), or void element like
26 //
<img> element. When user selects usual inline elements with dragging,
27 // double-clicking, Gecko sets start and/or end to point in text nodes
28 // as far as possible. Therefore, this API users don't expect that this
29 // returns usual inline elements like
<b> element.
31 // So, we need to check user's operation works fine.
32 for (let eatSpaceToNextWord of [true, false]) {
33 await SpecialPowers.pushPrefEnv({
"set": [[
"layout.word_select.eat_space_to_next_word", eatSpaceToNextWord]]});
35 editor.innerHTML =
"<p>This <b>is</b> an <i>example </i>text.<br></p>" +
36 "<p>and an image <img src=\"green.png\
"> is here.</p>" +
37 "<p>An anchor with href attr <a href=\"about:blank\
">is</a> here.</p>";
39 editor.scrollTop; // flush layout.
41 let b = editor.firstChild.firstChild.nextSibling;
42 let i = b.nextSibling.nextSibling;
43 let img = editor.firstChild.nextSibling.firstChild.nextSibling;
44 let href = editor.firstChild.nextSibling.nextSibling.firstChild.nextSibling;
46 // double clicking usual inline element shouldn't cause
"selecting" the element.
47 synthesizeMouseAtCenter(b, {clickCount:
1});
48 synthesizeMouseAtCenter(b, {clickCount:
2});
49 is(selection.getRangeAt(
0).startContainer, b.previousSibling,
50 `#
0-
1 Double-clicking in
<b> element should set start of selection to end of previous text node (eat_space_to_next_word: ${eatSpaceToNextWord})`);
51 is(selection.getRangeAt(
0).startOffset, b.previousSibling.length,
52 `#
0-
1 Double-clicking in
<b> element should set start of selection to end of previous text node (eat_space_to_next_word: ${eatSpaceToNextWord})`);
53 is(selection.getRangeAt(
0).endContainer, b.nextSibling,
54 `#
0-
1 Double-clicking in
<b> element should set end of selection to start of next text node (eat_space_to_next_word: ${eatSpaceToNextWord})`);
55 is(selection.getRangeAt(
0).endOffset, eatSpaceToNextWord ?
1 :
0,
56 `#
0-
1 Double-clicking in
<b> element should set end of selection to start of next text node (eat_space_to_next_word: ${eatSpaceToNextWord})`);
58 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
60 `#
0-
1 nsIHTMLEditor::getSelectedElement(\
"\") should return null after double-clicking in
<b> element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
62 synthesizeMouseAtCenter(i, {clickCount:
1});
63 synthesizeMouseAtCenter(i, {clickCount:
2});
64 is(selection.getRangeAt(
0).startContainer, i.previousSibling,
65 `#
0-
2 Double-clicking in
<i> element should set start of selection to end of previous text node (eat_space_to_next_word: ${eatSpaceToNextWord})`);
66 is(selection.getRangeAt(
0).startOffset, i.previousSibling.length,
67 `#
0-
2 Double-clicking in
<i> element should set start of selection to end of previous text node (eat_space_to_next_word: ${eatSpaceToNextWord})`);
68 if (eatSpaceToNextWord) {
69 is(selection.getRangeAt(
0).endContainer, i.nextSibling,
70 "#0-2 Double-clicking in <i> element should set end of selection to start of next text node (eat_space_to_next_word: true)");
71 is(selection.getRangeAt(
0).endOffset,
0,
72 "#0-2 Double-clicking in <i> element should set end of selection to start of next text node (eat_space_to_next_word: true)");
74 is(selection.getRangeAt(
0).endContainer, i.firstChild,
75 "#0-2 Double-clicking in <i> element should set end of selection to end of the word in <i> (eat_space_to_next_word: false)");
76 is(selection.getRangeAt(
0).endOffset,
"example".length,
77 "#0-2 Double-clicking in <i> element should set end of selection to end of the word in <i> (eat_space_to_next_word: false)");
80 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
82 `#
0-
2 nsIHTMLEditor::getSelectedElement(\
"\") should return null after double-clicking in
<b> element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
84 // Both clicking and double-clicking on
<img> element should
"select" it.
85 synthesizeMouseAtCenter(img, {clickCount:
1});
86 is(selection.getRangeAt(
0).startContainer, img.parentElement,
87 `#
0-
3 Clicking in
<img> element should set start of selection to the
<img> element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
88 is(selection.getRangeAt(
0).startOffset,
1,
89 `#
0-
3 Clicking in
<img> element should set start of selection to the
<img> element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
90 is(selection.getRangeAt(
0).endContainer, img.parentElement,
91 `#
0-
3 Clicking in
<img> element should set end of selection to start of next text node (eat_space_to_next_word: ${eatSpaceToNextWord})`);
92 is(selection.getRangeAt(
0).endOffset,
2,
93 `#
0-
3 Clicking in
<img> element should set end of selection to start of next text node (eat_space_to_next_word: ${eatSpaceToNextWord})`);
95 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
97 `#
0-
3 nsIHTMLEditor::getSelectedElement(\
"\") should return the
<img> element after clicking in it (eat_space_to_next_word: ${eatSpaceToNextWord})`);
99 synthesizeMouseAtCenter(img, {clickCount:
1});
100 synthesizeMouseAtCenter(img, {clickCount:
2});
101 is(selection.getRangeAt(
0).startContainer, img.parentElement,
102 `#
0-
4 Double-clicking in
<img> element should set start of selection to the
<img> element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
103 is(selection.getRangeAt(
0).startOffset,
1,
104 `#
0-
4 Double-clicking in
<img> element should set start of selection to the
<img> element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
105 is(selection.getRangeAt(
0).endContainer, img.parentElement,
106 `#
0-
4 Double-clicking in
<img> element should set end of selection to start of next text node (eat_space_to_next_word: ${eatSpaceToNextWord})`);
107 is(selection.getRangeAt(
0).endOffset,
2,
108 `#
0-
4 Double-clicking in
<img> element should set end of selection to start of next text node (eat_space_to_next_word: ${eatSpaceToNextWord})`);
110 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
112 `#
0-
4 nsIHTMLEditor::getSelectedElement(\
"\") should return the
<img> element after double-clicking in it (eat_space_to_next_word: ${eatSpaceToNextWord})`);
114 // Puts caret into the
<a href
> element.
115 synthesizeMouseAtCenter(href, {clickCount:
1});
116 is(selection.getRangeAt(
0).startContainer, href.firstChild,
117 `#
0-
5 Clicking in
<a href
> element should set start of selection to the text node in it (eat_space_to_next_word: ${eatSpaceToNextWord})`);
118 is(selection.isCollapsed, true,
119 `#
0-
5 Clicking in
<a href
> element should cause collapsing Selection (eat_space_to_next_word: ${eatSpaceToNextWord})`);
121 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
123 `#
0-
5 nsIHTMLEditor::getSelectedElement(\
"\") should return null after clicking in the
<a href
> element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
124 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
126 `#
0-
5 nsIHTMLEditor::getSelectedElement(\
"href\") should return the
<a href
> element after clicking in it (eat_space_to_next_word: ${eatSpaceToNextWord})`);
128 // Selects the
<a href
> element with a triple-click.
129 synthesizeMouseAtCenter(href, {clickCount:
1});
130 synthesizeMouseAtCenter(href, {clickCount:
2});
131 synthesizeMouseAtCenter(href, {clickCount:
3});
132 is(selection.getRangeAt(
0).startContainer, href.parentElement,
133 `#
0-
6 Triple-clicking in
<a href
> element should set start of selection to the element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
134 is(selection.getRangeAt(
0).startOffset,
1,
135 `#
0-
6 Triple-clicking in
<a href
> element should set start of selection to the element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
136 is(selection.getRangeAt(
0).endContainer, href.parentElement,
137 `#
0-
6 Triple-clicking in
<a href
> element should set end of selection to start of next
<br> element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
138 is(selection.getRangeAt(
0).endOffset,
2,
139 `#
0-
6 Triple-clicking in
<a href
> element should set end of selection to start of next
<br> element (eat_space_to_next_word: ${eatSpaceToNextWord})`);
141 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
143 `#
0-
6 nsIHTMLEditor::getSelectedElement(\
"\") should return the
<a href
> element after double-clicking in it (eat_space_to_next_word: ${eatSpaceToNextWord})`);
144 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
146 `#
0-
6 nsIHTMLEditor::getSelectedElement(\
"href\") should return the
<a href
> element after double-clicking in it (eat_space_to_next_word: ${eatSpaceToNextWord})`);
149 editor.innerHTML =
"<p>p1<b>b1</b><i>i1</i></p>";
153 let range = document.createRange();
154 range.setStart(editor.firstChild.firstChild,
0);
155 range.setEnd(editor.firstChild.firstChild,
0);
156 selection.removeAllRanges();
157 selection.addRange(range);
159 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
161 "#1-1 nsIHTMLEditor::getSelectedElement(\"\
") should return null when selection is collapsed in a text node");
164 range = document.createRange();
165 range.setStart(editor.firstChild.firstChild,
0);
166 range.setEnd(editor.firstChild.firstChild,
2);
167 selection.removeAllRanges();
168 selection.addRange(range);
170 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
172 "#1-2 nsIHTMLEditor::getSelectedElement(\"\
") should return null when selection ends in a text node");
174 //
<p>[p1
<b>]b1
</b>...
175 range = document.createRange();
176 range.setStart(editor.firstChild.firstChild,
0);
177 range.setEnd(editor.firstChild.firstChild.nextSibling.firstChild,
0);
178 selection.removeAllRanges();
179 selection.addRange(range);
181 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
183 "#1-3 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection ends at start of text node in <b> element");
184 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
186 "#1-3 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection ends at start of text node in <b> element");
187 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
188 editor.firstChild.nextSibling,
189 "#1-3 nsIHTMLEditor::getSelectedElement(\"i\
") should return the <b> element when Selection ends at start of text node in <b> element");
191 //
<p>[p1
<b>b1]
</b>...
192 range = document.createRange();
193 range.setStart(editor.firstChild.firstChild,
0);
194 range.setEnd(editor.firstChild.firstChild.nextSibling.firstChild,
2);
195 selection.removeAllRanges();
196 selection.addRange(range);
198 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
200 "#1-4 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection ends at end of text node in a text node");
201 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
203 "#1-4 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection ends at end of text node in a text node");
204 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
205 editor.firstChild.nextSibling,
206 "#1-4 nsIHTMLEditor::getSelectedElement(\"i\
") should return the <b> element when Selection ends at end of text node in <b> element");
209 range = document.createRange();
210 range.setStart(editor.firstChild.firstChild,
0);
211 range.setEnd(editor.firstChild.firstChild.nextSibling,
0);
212 selection.removeAllRanges();
213 selection.addRange(range);
215 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
217 "#1-5 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection ends at text node and there are no elements");
218 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
220 "#1-5 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection ends at text node and there are no elements");
221 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
223 "#1-5 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when Selection ends at text node and there are no elements");
225 //
<p>p1
<b>{b1}
</b>...
226 range = document.createRange();
227 range.setStart(editor.firstChild.firstChild.nextSibling,
0);
228 range.setEnd(editor.firstChild.firstChild.nextSibling,
1);
229 selection.removeAllRanges();
230 selection.addRange(range);
232 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
234 "#1-6 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection only selects a text node");
235 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
237 "#1-6 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection only selects a text node");
238 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
240 "#1-6 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when Selection only selects a text node");
242 //
<p>[p1
<b>b1
</b>}
<i>...
243 range = document.createRange();
244 range.setStart(editor.firstChild.firstChild,
0);
245 range.setEnd(editor.firstChild,
2);
246 selection.removeAllRanges();
247 selection.addRange(range);
249 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
251 "#1-7 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection ends the <b> element but starts from the previous text node");
252 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
254 "#1-7 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection ends the <b> element but starts from the previous text node");
255 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
257 "#1-7 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when Selection ends the <b> element but starts from the previous text node");
258 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
260 "#1-7 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection ends the <b> element but starts from the previous text node");
261 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
263 "#1-7 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection ends the <b> element but starts from the previous text node");
264 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
266 "#1-7 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return null when Selection ends the <b> element but starts from the previous text node");
268 //
<p>[p1
<b>b1
</b><i>i1
</i>}...
269 range = document.createRange();
270 range.setStart(editor.firstChild.firstChild,
0);
271 range.setEnd(editor.firstChild,
3);
272 selection.removeAllRanges();
273 selection.addRange(range);
275 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
277 "#1-8 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection includes 2 elements and starts from previous text node");
278 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
280 "#1-8 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection includes 2 elements and starts from previous text node");
281 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
283 "#1-8 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when Selection includes 2 elements and starts from previous text node");
284 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
286 "#1-8 nsIHTMLEditor::getSelectedElement(\"href\
") should null when Selection includes 2 elements and starts from previous text node");
287 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
289 "#1-8 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection includes 2 elements and starts from previous text node");
290 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
292 "#1-8 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return null when Selection includes 2 elements and starts from previous text node");
294 //
<p>p1{
<b>b1
</b>}
<i>i1
</i>...
295 // Note that this won't happen with user operation since Gecko sets
296 // start and end of Selection to points in text nodes as far as possible.
297 range = document.createRange();
298 range.setStart(editor.firstChild,
1);
299 range.setEnd(editor.firstChild,
2);
300 selection.removeAllRanges();
301 selection.addRange(range);
303 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
304 editor.firstChild.firstChild.nextSibling,
305 "#1-9 nsIHTMLEditor::getSelectedElement(\"\
") should return <b> element when only it is selected and matched");
306 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
307 editor.firstChild.firstChild.nextSibling,
308 "#1-9 nsIHTMLEditor::getSelectedElement(\"b\
") should return <b> element when only it is selected and matched");
309 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
311 "#1-9 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when only a <b> element is selected but it is unmatched");
312 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
314 "#1-9 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when only a <b> element is selected but it is unmatched");
315 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
317 "#1-9 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when only a <b> element is selected but it is unmatched");
318 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
320 "#1-9 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return when only a <b> element is selected but it is unmatched");
322 //
<p>p1
<b>b1
</b>{
<i>i1
</i>}
</p>...
323 range = document.createRange();
324 range.setStart(editor.firstChild,
2);
325 range.setEnd(editor.firstChild,
3);
326 selection.removeAllRanges();
327 selection.addRange(range);
329 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
330 editor.firstChild.firstChild.nextSibling.nextSibling,
331 "#1-10 nsIHTMLEditor::getSelectedElement(\"\
") should return <i> element when only it is selected and matched");
332 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
334 "#1-10 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when only an <i> element is selected but it is unmatched");
335 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
336 editor.firstChild.firstChild.nextSibling.nextSibling,
337 "#1-10 nsIHTMLEditor::getSelectedElement(\"i\
") should return <i> element when only it is selected and matched");
338 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
340 "#1-10 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when only an <i> element is selected but it is unmatched");
341 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
343 "#1-10 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when only an <i> element is selected but it is unmatched");
344 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
346 "#1-10 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return null when only an <i> element is selected but it is unmatched");
348 //
<p>{p1}
<b>b1
</b><i>...
349 range = document.createRange();
350 range.setStart(editor.firstChild,
0);
351 range.setEnd(editor.firstChild,
1);
352 selection.removeAllRanges();
353 selection.addRange(range);
355 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
357 "#1-11 nsIHTMLEditor::getSelectedElement(\"\
") should return null when only a text node is selected");
358 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
360 "#1-11 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when only a text node is selected");
361 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
363 "#1-11 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when only a text node is selected");
364 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
366 "#1-11 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when only a text node is selected");
367 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
369 "#1-11 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when only a text node is selected");
370 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
372 "#1-11 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return null when only a text node is selected");
374 editor.innerHTML =
"<p>p1<b>b1</b><b>b2</b><b>b3</b></p>";
377 //
<p>p1
<b>b[
1</b><b>b2
</b><b>b]
3</b>...
378 range = document.createRange();
379 range.setStart(editor.firstChild.firstChild.nextSibling.firstChild,
1);
380 range.setEnd(editor.firstChild.firstChild.nextSibling.nextSibling.nextSibling.firstChild,
1);
381 selection.removeAllRanges();
382 selection.addRange(range);
384 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
386 "#2-1 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection is across 3 <b> elements");
387 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
389 "#2-1 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection is across 3 <b> elements");
390 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
392 "#2-1 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when Selection is across 3 <b> elements");
394 //
<p>p[
1<b>b1
</b><b>b2
</b><b>b]
3</b>...
395 range = document.createRange();
396 range.setStart(editor.firstChild.firstChild,
1);
397 range.setEnd(editor.firstChild.firstChild.nextSibling.nextSibling.nextSibling.firstChild,
1);
398 selection.removeAllRanges();
399 selection.addRange(range);
401 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
403 "#2-2 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection is across 3 <b> elements and previous text node");
404 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
406 "#2-2 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection is across 3 <b> elements and previous text node");
407 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
409 "#2-2 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when Selection is across 3 <b> elements and previous text node");
411 editor.innerHTML =
"<p>p1<b>b1<b>b2<b>b3</b></b></b>p2</p>";
414 //
<p>p1
<b>b[
1<b>b1-
2<b>b]
1-
3</b>...
415 range = document.createRange();
416 range.setStart(editor.firstChild.firstChild.nextSibling.firstChild,
1);
417 range.setEnd(editor.firstChild.firstChild.nextSibling.firstChild.nextSibling.firstChild.nextSibling.firstChild,
1);
418 selection.removeAllRanges();
419 selection.addRange(range);
421 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
423 "#3-1 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection is across 3 <b> elements which are nested");
424 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
426 "#3-1 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection is across 3 <b> elements which are nested");
427 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
429 "#3-1 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when Selection is across 3 <b> elements which are nested");
431 //
<p>p[
1<b>b1
<b>b1-
2<b>b]
1-
3</b>...
432 range = document.createRange();
433 range.setStart(editor.firstChild.firstChild,
1);
434 range.setEnd(editor.firstChild.firstChild.nextSibling.firstChild.nextSibling.firstChild.nextSibling.firstChild,
1);
435 selection.removeAllRanges();
436 selection.addRange(range);
438 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
440 "#3-2 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection is across a text node and 3 <b> elements which are nested");
441 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
443 "#3-2 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection is across a text node and 3 <b> elements which are nested");
444 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
446 "#3-2 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when Selection is across a text node and 3 <b> elements which are nested");
448 //
<p>p1
<b>b1
<b>b1-
2<b>b[
1-
3</b></b></b>p]
2...
449 range = document.createRange();
450 range.setStart(editor.firstChild.firstChild.nextSibling.firstChild.nextSibling.firstChild.nextSibling.firstChild,
1);
451 range.setEnd(editor.firstChild.firstChild.nextSibling.nextSibling,
1);
452 selection.removeAllRanges();
453 selection.addRange(range);
455 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
457 "#3-3 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection is across 3 <b> elements which are nested and following text node");
458 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"b")),
460 "#3-3 nsIHTMLEditor::getSelectedElement(\"b\
") should return null when Selection is across 3 <b> elements which are nested and following text node");
461 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"i")),
463 "#3-3 nsIHTMLEditor::getSelectedElement(\"i\
") should return null when Selection is across 3 <b> elements which are nested and following text node");
465 editor.innerHTML =
"<p><b>b1</b><a href=\"about:blank\
">a1</a><a href=\"about:blank\
">a2</a><a name=\"foo\
">a3</a><b>b2</b></p>";
468 //
<p><b>b1
</b>{
<a href=
"...">a1
</a>}
<a href=
"...">a2...
469 // Note that this won't happen with user operation since Gecko sets
470 // start and end of Selection to points in text nodes as far as possible.
471 range = document.createRange();
472 range.setStart(editor.firstChild,
1);
473 range.setEnd(editor.firstChild,
2);
474 selection.removeAllRanges();
475 selection.addRange(range);
477 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
478 editor.firstChild.firstChild.nextSibling,
479 "#4-1 nsIHTMLEditor::getSelectedElement(\"\
") should return the first <a> element when only it is selected and matched");
480 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
481 editor.firstChild.firstChild.nextSibling,
482 "#4-1 nsIHTMLEditor::getSelectedElement(\"href\
") should return the first <a> element when only it is selected and matched");
483 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
485 "#4-1 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when the first <a> element is selected but it is unmatched");
486 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
488 "#4-1 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return null when the first <a> element is selected but it is unmatched");
490 //
<p><b>b1
</b><a href=
"...">a[]
1</a><a href=
"...">a2...
491 range = document.createRange();
492 range.setStart(editor.firstChild.firstChild.nextSibling.firstChild,
1);
493 range.setEnd(editor.firstChild.firstChild.nextSibling.firstChild,
1);
494 selection.removeAllRanges();
495 selection.addRange(range);
497 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
499 "#4-2 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection is collapsed");
500 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
501 editor.firstChild.firstChild.nextSibling,
502 "#4-2 nsIHTMLEditor::getSelectedElement(\"href\
") should return the first <a> element when Selection is collapsed in the element");
503 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
505 "#4-2 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection is collapsed");
506 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
508 "#4-2 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return null when Selection is collapsed");
510 //
<p><b>b1
</b><a href=
"...">a[
1]
</a><a href=
"...">a2...
511 range = document.createRange();
512 range.setStart(editor.firstChild.firstChild.nextSibling.firstChild,
1);
513 range.setEnd(editor.firstChild.firstChild.nextSibling.firstChild,
2);
514 selection.removeAllRanges();
515 selection.addRange(range);
517 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
519 "#4-3 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection is in a text node");
520 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
521 editor.firstChild.firstChild.nextSibling,
522 "#4-3 nsIHTMLEditor::getSelectedElement(\"href\
") should return the first <a> element when Selection is in the element");
523 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
525 "#4-3 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection is in a text node");
526 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
528 "#4-3 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return null when Selection is in a text node");
530 //
<p><b>b1
</b><a href=
"...">a[
1</a><a href=
"...">a]
2...
531 range = document.createRange();
532 range.setStart(editor.firstChild.firstChild.nextSibling.firstChild,
1);
533 range.setEnd(editor.firstChild.firstChild.nextSibling.nextSibling.firstChild,
1);
534 selection.removeAllRanges();
535 selection.addRange(range);
537 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
539 "#4-4 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection crosses 2 <a> elements");
540 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
542 "#4-4 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection crosses 2 <a> elements");
543 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
545 "#4-4 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection crosses 2 <a> elements");
546 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
548 "#4-4 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return null when Selection crosses 2 <a> elements");
550 //
<p><b>b1
</b><a href=
"...">a1
</a><a href=
"...">a2
</a>{
<a name=
"...">a3
</a>}
<b>b2
</b></p>
551 // Note that this won't happen with user operation since Gecko sets
552 // start and end of Selection to points in text nodes as far as possible.
553 range = document.createRange();
554 range.setStart(editor.firstChild,
3);
555 range.setEnd(editor.firstChild,
4);
556 selection.removeAllRanges();
557 selection.addRange(range);
559 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
560 editor.firstChild.firstChild.nextSibling.nextSibling.nextSibling,
561 "#4-5 nsIHTMLEditor::getSelectedElement(\"\
") should return the third <a> element when only it is selected and matched");
562 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
564 "#4-5 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when the third <a> element is selected but it is unmatched");
565 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
566 editor.firstChild.firstChild.nextSibling.nextSibling.nextSibling,
567 "#4-5 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return the third <a> element when only it is selected and matched");
568 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
570 "#4-5 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return null when the third <a> element is selected but it is unmatched");
572 //
<p><b>b1
</b><a href=
"...">a1
</a><a href=
"...">a2
</a><a name=
"...">a[]
3</a><b>b2
</b></p>
573 range = document.createRange();
574 range.setStart(editor.firstChild.firstChild.nextSibling.nextSibling.nextSibling.firstChild,
1);
575 range.setEnd(editor.firstChild.firstChild.nextSibling.nextSibling.nextSibling.firstChild,
1);
576 selection.removeAllRanges();
577 selection.addRange(range);
579 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
581 "#4-6 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection is collapsed in a text node even in named anchor element");
582 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
584 "#4-6 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection is collapsed in a text node even in named anchor element");
585 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
587 "#4-6 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection is collapsed in a text node even in named anchor element");
588 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"namedanchor")),
590 "#4-6 nsIHTMLEditor::getSelectedElement(\"namedanchor\
") should return null when Selection is collapsed in a text node even in named anchor element");
592 editor.innerHTML =
"<p>p1<b>b1</b>p1</p>";
595 //
<p>p1[
<b>b1
</b>]p1
</p>
596 // This is usual case that user selects
<b> element with dragging or double-clicking.
597 range = document.createRange();
598 range.setStart(editor.firstChild.firstChild,
2);
599 range.setEnd(editor.firstChild.firstChild.nextSibling.nextSibling,
0);
600 selection.removeAllRanges();
601 selection.addRange(range);
603 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
605 "#5-1 nsIHTMLEditor::getSelectedElement(\"\
") should return null even when Selection starts from end of preceding text node and ends at start or following text node of <b> element");
606 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
608 "#5-1 nsIHTMLEditor::getSelectedElement(\"href\
") should return null even when Selection starts from end of preceding text node and ends at start or following text node of <b> element");
609 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
611 "#5-1 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null even when Selection starts from end of preceding text node and ends at start or following text node of <b> element");
613 //
<p>p[
1<b>b1
</b>]p1
</p>
614 range = document.createRange();
615 range.setStart(editor.firstChild.firstChild,
1);
616 range.setEnd(editor.firstChild.firstChild.nextSibling.nextSibling,
0);
617 selection.removeAllRanges();
618 selection.addRange(range);
620 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
622 "#5-2 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection ends at start of following text node of <b> element");
623 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
625 "#5-2 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection ends at start of following text node of <b> element");
626 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
628 "#5-2 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection ends at start of following text node of <b> element");
630 //
<p>p1[
<b>b1
</b>p]
1</p>
631 range = document.createRange();
632 range.setStart(editor.firstChild.firstChild,
2);
633 range.setEnd(editor.firstChild.firstChild.nextSibling.nextSibling,
1);
634 selection.removeAllRanges();
635 selection.addRange(range);
637 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
639 "#5-3 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection starts from end of following text node of <b> element");
640 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
642 "#5-3 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection starts from at end of following text node of <b> element");
643 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
645 "#5-3 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection starts from end of following text node of <b> element");
647 //
<p>p1
<b>[b1
</b>]p1
</p>
648 range = document.createRange();
649 range.setStart(editor.firstChild.firstChild.nextSibling.firstChild,
0);
650 range.setEnd(editor.firstChild.firstChild.nextSibling.nextSibling,
0);
651 selection.removeAllRanges();
652 selection.addRange(range);
654 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
656 "#5-4 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection starts from start of text node in <b> element and ends at start of following text node of <b> element");
657 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
659 "#5-4 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection starts from start of text node in <b> element and ends at start of following text node of <b> element");
660 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
662 "#5-4 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection starts from start of text node in <b> element and ends at start of following text node of <b> element");
664 //
<p>p1[
<b>b1]
</b>p1
</p>
665 range = document.createRange();
666 range.setStart(editor.firstChild.firstChild,
2);
667 range.setEnd(editor.firstChild.firstChild.nextSibling.firstChild,
2);
668 selection.removeAllRanges();
669 selection.addRange(range);
671 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
673 "#5-5 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection starts from end of preceding text node of <b> element and ends at end of text node in <b> element");
674 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
676 "#5-5 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection starts from end of preceding text node of <b> element and ends at end of text node in <b> element");
677 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
679 "#5-5 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection starts from end of preceding text node of <b> element and ends at end of text node in <b> element");
681 //
<p>p1
<b>b[
1</b>}p1
</p>
682 range = document.createRange();
683 range.setStart(editor.firstChild.firstChild.nextSibling.firstChild,
1);
684 range.setEnd(editor.firstChild,
2);
685 selection.removeAllRanges();
686 selection.addRange(range);
688 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
689 editor.firstChild.firstChild.nextSibling,
690 "#5-6 nsIHTMLEditor::getSelectedElement(\"\
") should the <b> element when Selection starts from in the <b> element's text node and end of preceding text node of <b> element and ends at end of the <b> element");
691 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
693 "#5-6 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection starts from in the <b> element's text node and end of preceding text node of <b> element and ends at end of the <b> element");
694 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
696 "#5-6 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection starts from in the <b> element's text node and end of preceding text node of <b> element and ends at end of the <b> element");
698 editor.innerHTML =
"<p>p1<b>b1</b></p>";
701 //
<p>p1[
<b>b1
</b>}
</p>
702 // This is usual case of double-clicking in the
<b> element.
703 range = document.createRange();
704 range.setStart(editor.firstChild.firstChild,
2);
705 range.setEnd(editor.firstChild,
2);
706 selection.removeAllRanges();
707 selection.addRange(range);
709 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
711 "#6-1 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection starts from previous text node of <b> element and end at end of <b> element");
712 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
714 "#6-1 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection starts from previous text node of <b> element and end at end of <b> element");
715 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
717 "#6-1 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection starts from previous text node of <b> element and end at end of <b> element");
719 editor.innerHTML =
"<p><b>b1</b>p1</p>";
722 //
<p><b>[b1
</b>]p1
</p>
723 // This is usual case of double-clicking in the
<b> element.
724 range = document.createRange();
725 range.setStart(editor.firstChild.firstChild.firstChild,
0);
726 range.setEnd(editor.firstChild.firstChild.nextSibling,
0);
727 selection.removeAllRanges();
728 selection.addRange(range);
730 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
732 "#7-1 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection starts from a text node in <b> element and ends at start of following text node");
733 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
735 "#7-1 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection starts from a text node in <b> element and ends at start of following text node");
736 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
738 "#7-1 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection starts from a text node in <b> element and ends at start of following text node");
740 editor.innerHTML =
"<p>p1<b>b1</b><br></p>";
743 //
<p>p1[
<b>b1
</b>}
<br></p>
744 // This is usual case of double-clicking in the
<b> element.
745 range = document.createRange();
746 range.setStart(editor.firstChild.firstChild,
2);
747 range.setEnd(editor.firstChild,
2);
748 selection.removeAllRanges();
749 selection.addRange(range);
751 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
753 "#8-1 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection starts from previous text node of <b> element and ends before the following <br> element");
754 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
756 "#8-1 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection starts from previous text node of <b> element and ends before the following <br> element");
757 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
759 "#8-1 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection starts from previous text node of <b> element and ends before the following <br> element");
762 editor.innerHTML =
"<p><b>b1</b><br></p>";
765 //
<p><b>[b1
</b>}
<br></p>
766 // This is usual case of double-clicking in the
<b> element.
767 range = document.createRange();
768 range.setStart(editor.firstChild.firstChild.firstChild,
0);
769 range.setEnd(editor.firstChild,
1);
770 selection.removeAllRanges();
771 selection.addRange(range);
773 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
775 "#9-1 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection starts from a text node in <b> element and ends before the following <br> element");
776 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
778 "#9-1 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection starts from a text node in <b> element and ends before the following <br> element");
779 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
781 "#9-1 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection starts from a text node in <b> element and ends before the following <br> element");
783 editor.innerHTML =
"<p><b>b1</b><b><br></b><b>b2</b></p>";
786 //
<p><b>[b1
</b><b>}
<br></b><b>b2
</b></p>
787 // This is usual case of double-clicking in the first
<b> element.
788 range = document.createRange();
789 range.setStart(editor.firstChild.firstChild.firstChild,
0);
790 range.setEnd(editor.firstChild.firstChild.nextSibling,
0);
791 selection.removeAllRanges();
792 selection.addRange(range);
794 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"")),
796 "#10-1 nsIHTMLEditor::getSelectedElement(\"\
") should return null when Selection starts from a text node in <b> element and ends before the following <br> element in another <b> element");
797 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"href")),
799 "#10-1 nsIHTMLEditor::getSelectedElement(\"href\
") should return null when Selection starts from a text node in <b> element and ends before the following <br> element in another <b> element");
800 is(SpecialPowers.unwrap(getHTMLEditor().getSelectedElement(
"anchor")),
802 "#10-1 nsIHTMLEditor::getSelectedElement(\"anchor\
") should return null when Selection starts from a text node in <b> element and ends before the following <br> element in another <b> element");
807 function getHTMLEditor() {
808 var Ci = SpecialPowers.Ci;
809 var editingSession = SpecialPowers.wrap(window).docShell.editingSession;
810 return editingSession.getEditorForWindow(window).QueryInterface(Ci.nsIHTMLEditor);