summaryrefslogtreecommitdiffstats
path: root/editor/libeditor/tests/test_bug478725.html
blob: 8df85dfff5d31b6e9080b0e9198bcdae92b41528 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<!DOCTYPE HTML>
<html><head>
<title>Test for bug 478725</title>
<style src="/tests/SimpleTest/test.css" type="text/css"></style>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>

<script class="testbody" type="application/javascript">

function runTest() {
  function verifyContent(s) {
    var e = document.getElementById('i1');
    var doc = e.contentDocument;
    is(doc.body.innerHTML, s, "");
  }

  function pasteInto(html,target_id) {
    var e = document.getElementById('i1');
    var doc = e.contentDocument;
    doc.designMode = "on";
    doc.body.innerHTML = html;
    e = doc.getElementById(target_id);
    doc.defaultView.focus();
    var selection = doc.defaultView.getSelection();
    selection.removeAllRanges();
    selection.selectAllChildren(e);
    selection.collapseToEnd();
    SpecialPowers.wrap(doc).execCommand("paste", false, null);
   return e;
  }

  function copyToClipBoard(s,asHTML,target_id) {
    var e = document.getElementById('i2');
    var doc = e.contentDocument;
    if (asHTML) {
      doc.body.innerHTML = s;
    } else {
      var text = doc.createTextNode(s);
      doc.body.appendChild(text);
    }
    doc.designMode = "on";
    doc.defaultView.focus();
    var selection = doc.defaultView.getSelection();
    selection.removeAllRanges();
    if (!target_id) {
      selection.selectAllChildren(doc.body);
    } else {
      var range = document.createRange();
      range.selectNode(doc.getElementById(target_id));
      selection.addRange(range);
    }
    SpecialPowers.wrap(doc).execCommand("copy", false, null);
    return e;
  }

  copyToClipBoard("<dl><dd>Hello Kitty</dd></dl>", true);
  pasteInto('<ol><li id="paste_here">X</li></ol>',"paste_here");
  verifyContent('<ol><li id="paste_here">X<dl><dd>Hello Kitty</dd></dl></li></ol>');

  copyToClipBoard("<li>Hello Kitty</li>", true);
  pasteInto('<ol><li id="paste_here">X</li></ol>',"paste_here");
  verifyContent('<ol><li id="paste_here">X</li><li>Hello Kitty</li></ol>');

  copyToClipBoard("<ol><li>Hello Kitty</li></ol>", true);
  pasteInto('<ol><li id="paste_here">X</li></ol>',"paste_here");
  verifyContent('<ol><li id="paste_here">X</li><li>Hello Kitty</li></ol>');

  copyToClipBoard("<ul><li>Hello Kitty</li></ul>", true);
  pasteInto('<ol><li id="paste_here">X</li></ol>',"paste_here");
  verifyContent('<ol><li id="paste_here">X</li><li>Hello Kitty</li></ol>');

  copyToClipBoard("<ul><li>Hello</li><ul><li>Kitty</li></ul></ul>", true);
  pasteInto('<ol><li id="paste_here">X</li></ol>',"paste_here");
  verifyContent('<ol><li id="paste_here">X</li><li>Hello</li><ul><li>Kitty</li></ul></ol>');

  copyToClipBoard("<dl><dd>Hello</dd><dd>Kitty</dd></dl>", true);
  pasteInto('<dl><dd id="paste_here">X</dd></dl>',"paste_here");
  verifyContent('<dl><dd id="paste_here">X</dd><dd>Hello</dd><dd>Kitty</dd></dl>');

  copyToClipBoard("<dl><dd>Hello</dd><dd>Kitty</dd></dl>", true);
  pasteInto('<dl><dt id="paste_here">X</dt></dl>',"paste_here");
  verifyContent('<dl><dt id="paste_here">X</dt><dd>Hello</dd><dd>Kitty</dd></dl>');

  copyToClipBoard("<dl><dt>Hello</dt><dd>Kitty</dd></dl>", true);
  pasteInto('<dl><dd id="paste_here">X</dd></dl>',"paste_here");
  verifyContent('<dl><dd id="paste_here">X</dd><dt>Hello</dt><dd>Kitty</dd></dl>');

  copyToClipBoard("<pre>Kitty</pre>", true);
  pasteInto('<pre id="paste_here">Hello </pre>',"paste_here");
  verifyContent('<pre id="paste_here">Hello Kitty</pre>');

// I was expecting these to trigger the special TABLE/TR rules in nsHTMLEditor::InsertHTMLWithContext
// but they don't for some reason...
//  copyToClipBoard('<table><tr id="copy_here"><td>Kitty</td></tr></table>', true, "copy_here");
//  pasteInto('<table><tr id="paste_here"><td>Hello</td></tr></table>',"paste_here");
//  verifyContent('');
//
//  copyToClipBoard('<table id="copy_here"><tr><td>Kitty</td></tr></table>', true, "copy_here");
//  pasteInto('<table><tr id="paste_here"><td>Hello</td></tr></table>',"paste_here");
//  verifyContent('');
//
//  copyToClipBoard('<table id="copy_here"><tr><td>Kitty</td></tr></table>', true, "copy_here");
//  pasteInto('<table id="paste_here"><tr><td>Hello</td></tr></table>',"paste_here");
//  verifyContent('');
//
//  copyToClipBoard('<table><tr id="copy_here"><td>Kitty</td></tr></table>', true, "copy_here");
//  pasteInto('<table id="paste_here"><tr><td>Hello</td></tr></table>',"paste_here");
//  verifyContent('');


  SimpleTest.finish();
}

SimpleTest.waitForExplicitFinish();
addLoadEvent(runTest);
</script>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=478725">Mozilla Bug 478725</a>
<p id="display"></p>

<pre id="test">
</pre>


<iframe id="i1" width="200" height="100" src="about:blank"></iframe><br>
<iframe id="i2" width="200" height="100" src="about:blank"></iframe><br>

</body>
</html>