4 https://bugzilla.mozilla.org/show_bug.cgi?id=116083
7 <title>Test for Bug
116083</title>
8 <script src=
"/tests/SimpleTest/SimpleTest.js"></script>
9 <script src=
"/tests/SimpleTest/EventUtils.js"></script>
10 <link rel=
"stylesheet" type=
"text/css" href=
"/tests/SimpleTest/test.css"/>
13 <a target=
"_blank" href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=116083">Mozilla Bug
116083</a>
15 <div style=
"white-space: pre">foo bar
</div>
16 <div style=
"white-space: pre-wrap">foo bar
</div>
17 <div style=
"white-space: pre-line">foo bar
</div>
18 <div style=
"white-space: -moz-pre-space">foo bar
</div>
19 <div style=
"white-space: pre" data-collapse-selection-to-child-and-extend
>foo bar
</div>
20 <div style=
"white-space: pre-wrap" data-collapse-selection-to-child-and-extend
>foo bar
</div>
21 <div style=
"white-space: pre-line" data-collapse-selection-to-child-and-extend
>foo bar
</div>
22 <div style=
"white-space: -moz-pre-space" data-collapse-selection-to-child-and-extend
>foo bar
</div>
23 <div data-result=
"bar baz"><span style=
"white-space: pre">bar
</span>baz
</div>
24 <div data-result=
"bar baz"><span style=
"white-space: pre-wrap">bar
</span>baz
</div>
25 <div data-result=
"bar baz"><span style=
"white-space: pre-line">bar
</span>baz
</div>
26 <div data-result=
"bar baz"><span style=
"white-space: -moz-pre-space">bar
</span>baz
</div>
27 <div data-result=
"foo bar ! baz" style=
"white-space: pre"><div>foo
</div><div> bar
</div><div><br></div><div>!
</div><div><br><br></div><div>baz
</div></div>
28 <div data-result=
"foo bar ! baz" style=
"white-space: pre" contenteditable
><div>foo
</div><div> bar
</div><div><br></div><div>!
</div><div><br><br></div><div>baz
</div></div>
29 <div data-result=
"foo bar ! baz" style=
"white-space: pre-wrap"><div>foo
</div><div> bar
</div><div><br></div><div>!
</div><div><br><br></div><div>baz
</div></div>
30 <div data-result=
"foo bar ! baz" style=
"white-space: pre-wrap" contenteditable
><div>foo
</div><div> bar
</div><div><br></div><div>!
</div><div><br><br></div><div>baz
</div></div>
31 <div data-result=
"foo bar ! baz" style=
"white-space: pre-line"><div>foo
</div><div> bar
</div><div><br></div><div>!
</div><div><br><br></div><div>baz
</div></div>
32 <div data-result=
"foo bar ! baz" style=
"white-space: pre-line" contenteditable
><div>foo
</div><div> bar
</div><div><br></div><div>!
</div><div><br><br></div><div>baz
</div></div>
33 <div data-result=
"foo bar ! baz" style=
"white-space: -moz-pre-space"><div>foo
</div><div> bar
</div><div><br></div><div>!
</div><div><br><br></div><div>baz
</div></div>
34 <div data-result=
"foo bar ! baz" style=
"white-space: -moz-pre-space" contenteditable
><div>foo
</div><div> bar
</div><div><br></div><div>!
</div><div><br><br></div><div>baz
</div></div>
35 <div data-result=
"foo bar baz qux"><div>foo
<br></div><span>bar
<br>baz
<br>qux
</span></div>
36 <div data-result=
"foo bar baz qux" contenteditable
><div>foo
<br></div><span>bar
<br>baz
<br>qux
</span></div>
37 <div data-result=
"foo "><div>foo
</div><span><br></span></div>
38 <div data-result=
"foo " contenteditable
><div>foo
</div><span><br></span></div>
39 <div data-result=
"foo bar"><div>foo
</div><span><br></span><div>bar
</div></div>
40 <div data-result=
"foo bar" contenteditable
><div>foo
</div><span><br></span><div>bar
</div></div>
41 <div data-result=
"foo bar "><div>foo
</div><span>bar
<br></span></div>
42 <div data-result=
"foo bar" contenteditable
><div>foo
</div><span>bar
<br></span></div>
43 <div data-result=
"foo bar baz"><div>foo
</div><span>bar
<br></span><div>baz
</div></div>
44 <div data-result=
"foo bar baz" contenteditable
><div>foo
</div><span>bar
<br></span><div>baz
</div></div>
45 <div data-result=
" foo"><div><br><br><div>foo
</div></div></div>
46 <div data-result=
" foo" contenteditable
><div><br><br><div>foo
</div></div></div>
47 <div data-result=
"foo bar"><div>foo
<br>bar
</div></div>
48 <div data-result=
"foo bar" contenteditable
><div>foo
<br>bar
</div></div>
49 <div data-result=
"foo bar "><div>foo
<br>bar
<br></div></div>
50 <div data-result=
"foo bar" contenteditable
><div>foo
<br>bar
<br></div></div>
51 <div data-result=
" foo bar ">foo bar
</div>
53 <script type=
"application/javascript">
55 const Cc = SpecialPowers.Cc;
56 const Ci = SpecialPowers.Ci;
58 function hasExpectedFlavors() {
59 var cb = Cc[
"@mozilla.org/widget/clipboard;1"].
60 getService(Ci.nsIClipboard);
62 ok(cb.hasDataMatchingFlavors([
"text/plain"], cb.kGlobalClipboard),
63 "The clipboard has text/plain");
65 ok(cb.hasDataMatchingFlavors([
"text/html"], cb.kGlobalClipboard),
66 "The clipboard has text/html");
68 if (navigator.appVersion.includes(
"Win")) {
69 ok(cb.hasDataMatchingFlavors([
"application/x-moz-nativehtml"], cb.kGlobalClipboard),
70 "The clipboard has application/x-moz-nativehtml");
74 function collapseSelectionToChildAndExtend(divElement) {
75 is(divElement.childNodes.length,
1,
"Expected exactly one child node.");
76 var textChildNode = divElement.childNodes[
0];
77 getSelection().collapse(textChildNode);
78 getSelection().extend(textChildNode, divElement.textContent.length);
81 function selectDependingOnAttributes(divElement) {
82 if (divElement.hasAttribute(
"data-collapse-selection-to-child-and-extend")) {
83 // Selecting text as follow comes closest to user behaviour.
84 collapseSelectionToChildAndExtend(divElement);
86 getSelection().selectAllChildren(divElement);
91 var div = document.querySelector(
"#content>div");
97 selectDependingOnAttributes(div);
99 var expected = div.hasAttribute(
"data-result") ?
100 div.getAttribute(
"data-result") :
103 SimpleTest.waitForClipboard(expected, function() {
104 synthesizeKey(
"C", {accelKey: true});
106 ok(true, div.getAttribute(
"style") +
" passed");
107 hasExpectedFlavors();
111 ok(false,
"failed to copy the expected content to the clipboard");
116 SimpleTest.waitForExplicitFinish();
117 SimpleTest.waitForFocus(nextTest);