[Cleanup] BreakingContext::handleText should consistently use the cached renderer
[WebKit-https.git] / LayoutTests / editing / pasteboard / paste-and-sanitize.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <script src="../../resources/js-test-pre.js"></script>
5 <script src="../../resources/ui-helper.js"></script>
6 </head>
7 <body>
8 <p id="description">This test checks that the paste operation trims the pasted fragment to reduce the verbosity of the markup without affecting the style. </p>
9 <div id="console"></div>
10 <script>
11
12 var sel = document.getSelection();
13 var root = document.createElement("root");
14 document.body.appendChild(root);
15
16
17 function createEditable(tagName, markup) {
18     var node = document.createElement(tagName);
19     node.contentEditable = true;
20     node.innerHTML = markup;
21     return node;
22 }
23
24 async function testPaste(tagName, originalMarkup, expected) {
25     var node = createEditable(tagName, originalMarkup);
26     root.appendChild(node);
27
28     node.focus();
29     document.execCommand("SelectAll", false);
30     document.execCommand("Copy", false);
31     await UIHelper.ensurePresentationUpdate();
32
33     document.execCommand("Paste", false);
34     await UIHelper.ensurePresentationUpdate();
35
36     confirmedMarkup = node.innerHTML;
37
38     shouldBe("confirmedMarkup", "'" + expected + "'");
39 }
40
41 jsTestIsAsync = true;
42
43 async function runTest() {
44     await testPaste("div", "Hello", "Hello");
45     await testPaste("div", "<b><i>Hello</i></b>", "<b><i>Hello</i></b>");
46     await testPaste("div", "<div><b><i><span style=\"font-weight: normal\"><b><i>Hello</i></b></span></i></b></div>", "<b><i>Hello</i></b>");
47     await testPaste("div", "<div><div><div>Hello</div></div></div>", "Hello");
48     await testPaste("div", "<div><b><div><i>Hello</i></div></b></div>", "<i style=\"font-weight: bold;\">Hello</i>");
49     await testPaste("div", "<div><div style=\"text-align: center;\"><b>Hello</b></div></div>", "<div style=\"text-align: center;\"><b>Hello</b></div>");
50     await testPaste("div", "<div><b><i><span style=\"font-weight: normal\"><b><i>hello</i></b></span></i></b></div><div><b><i><span style=\"font-weight: normal\"><b><i>world</i></b></span></i></b></div>",
51               "<div><b><i>hello</i></b></div><div><b><i>world</i></b></div>");
52     await testPaste("div", "<div><b><i><span style=\"font-weight: normal;\"><b><i>hello1</i></b><b><i> hello2</i></b></span></i></b></div>", "<b><i><span style=\"font-weight: normal;\"><b><i>hello1</i></b><b><i>&nbsp;hello2</i></b></span></i></b>");
53     await testPaste("div", "<i style=\"margin: 10px;\"><b><i style=\"margin: 10px;\">hello</i></b></i>",
54               "<i style=\"margin: 10px;\">hello</i></b></i>");
55     await testPaste("div", "<div><b><i><span style=\"font-weight: normal\"><b><i>Hello <!-- comment -->world</i></b></span></i></b></div>", "<b><i>Hello&nbsp;world</i></b>");
56     await testPaste("div", "<div><b><i><span style=\"font-weight: normal\">plain text<b><i>bold italic text</i></b></span></i></b></div>", "<b><i><span style=\"font-weight: normal;\">plain text<b><i>bold italic text</i></b></span></i></b>");
57
58     root.style.display = "none";
59
60     finishJSTest();
61 }
62
63 addEventListener("load", runTest);
64 </script>
65 <script src="../../resources/js-test-post.js"></script>
66 </body>
67 </html>