| OLD | NEW |
| 1 <!doctype html> | 1 <!doctype html> |
| 2 <html> | |
| 3 <head> | |
| 4 <script src="../../resources/testharness.js"></script> | 2 <script src="../../resources/testharness.js"></script> |
| 5 <script src="../../resources/testharnessreport.js"></script> | 3 <script src="../../resources/testharnessreport.js"></script> |
| 6 <script src="resources/util.js"></script> | 4 <script src="../assert_selection.js"></script> |
| 7 </head> | 5 <script src="spellcheck_test.js"></script> |
| 8 <body> | |
| 9 <div> | |
| 10 <textarea id="testTextArea"></textarea> | |
| 11 <input id="testInput" type="text"></input> | |
| 12 <div id="testEditable" contenteditable></div> | |
| 13 <div id="testSourcePlain">You has the right.</div> | |
| 14 <div id="testSourceDecorated">I have a<b>n ki</b>wi. I have no idea.</div> | |
| 15 <div id="testSourceMulti">I have an grape. I have an muscat. I don't know.</div> | |
| 16 </div> | |
| 17 <script> | 6 <script> |
| 18 var testTextArea = document.getElementById('testTextArea'); | 7 function pasteHTMLToDest(document, html) |
| 19 var testInput = document.getElementById('testInput'); | |
| 20 var testEditable = document.getElementById('testEditable'); | |
| 21 var testSourcePlain = document.getElementById('testSourcePlain'); | |
| 22 var testSourceDecorated = document.getElementById('testSourceDecorated'); | |
| 23 var testSourceMulti = document.getElementById('testSourceMulti'); | |
| 24 | |
| 25 var sel = window.getSelection(); | |
| 26 | |
| 27 function findFirstTextNode(node) | |
| 28 { | 8 { |
| 29 function iterToFindFirstTextNode(node) | 9 document.getSelection().setClipboardData(html); |
| 30 { | 10 document.getElementById('dest').focus(); |
| 31 if (node instanceof Text) | 11 document.execCommand('Paste'); |
| 32 return node; | |
| 33 | |
| 34 var childNodes = node.childNodes; | |
| 35 for (var i = 0; i < childNodes.length; ++i) { | |
| 36 var n = iterToFindFirstTextNode(childNodes[i]); | |
| 37 if (n) | |
| 38 return n; | |
| 39 } | |
| 40 | |
| 41 return null; | |
| 42 } | |
| 43 | |
| 44 | |
| 45 if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) | |
| 46 return iterToFindFirstTextNode(internals.shadowRoot(node)); | |
| 47 else | |
| 48 return iterToFindFirstTextNode(node); | |
| 49 } | 12 } |
| 50 | 13 |
| 51 function verifyMarker(node, expectedMarked) | 14 spellcheck_test( |
| 52 { | 15 '<div contenteditable id="dest">|</div>', |
| 53 if (node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement) | 16 document => pasteHTMLToDest(document, 'You has the right.'), |
| 54 node.focus(); | 17 '<div contenteditable id="dest">You ~has~ the right.</div>', |
| 55 else | 18 'Paste plain text into editable <div>.'); |
| 56 sel.selectAllChildren(node); | |
| 57 | 19 |
| 58 var textNode = findFirstTextNode(node); | 20 spellcheck_test( |
| 59 var num = internals.markerCountForNode(textNode, 'grammar'); | 21 '<div contenteditable id="dest">|</div>', |
| 60 assert_equals(num, expectedMarked.length); | 22 document => pasteHTMLToDest(document, |
| 23 'I have a<b>n ki</b>wi. I have no idea.'), |
| 24 [ |
| 25 '<div contenteditable id="dest">', |
| 26 'I have ~a~<b>~n~ ki</b>wi. I have no idea.', |
| 27 '</div>' |
| 28 ].join(''), |
| 29 'Paste decorated text into editable <div>.'); |
| 61 | 30 |
| 62 for (var i = 0; i < num; ++i) { | 31 spellcheck_test( |
| 63 var range = internals.markerRangeForNode(textNode, 'grammar', i); | 32 '<div contenteditable id="dest">|</div>', |
| 64 assert_equals(range.toString(), expectedMarked[i]); | 33 document => pasteHTMLToDest( |
| 65 } | 34 document, 'I have an grape. I have an muscat. I don\'t know.'), |
| 66 } | 35 [ |
| 36 '<div contenteditable id="dest">', |
| 37 'I have ~an~ grape. I have ~an~ muscat. I don\'t know.', |
| 38 '</div>' |
| 39 ].join(''), |
| 40 'Paste text with multiple errors into editable <div>.'); |
| 67 | 41 |
| 68 function pasteText(source, dest) | 42 spellcheck_test( |
| 69 { | 43 '<input id="dest" type="text">|', |
| 70 sel.selectAllChildren(source); | 44 document => pasteHTMLToDest(document, 'You has the right.'), |
| 71 document.execCommand('Copy'); | 45 '<input id="dest" type="text" value="You ~has~ the right.">', |
| 72 if (dest instanceof HTMLInputElement || dest instanceof HTMLTextAreaElement)
{ | 46 'Paste plain text into <input>.'); |
| 73 dest.value = ''; | |
| 74 dest.focus(); | |
| 75 } else { | |
| 76 dest.innerHTML = ''; | |
| 77 sel.selectAllChildren(dest); | |
| 78 } | |
| 79 document.execCommand('Paste'); | |
| 80 }; | |
| 81 | 47 |
| 82 var steps = [ | 48 spellcheck_test( |
| 83 () => pasteText(testSourcePlain, testEditable), | 49 '<input id="dest" type="text">|', |
| 84 () => pasteText(testSourceDecorated, testEditable), | 50 document => pasteHTMLToDest(document, |
| 85 () => pasteText(testSourceMulti, testEditable), | 51 'I have a<b>n ki</b>wi. I have no idea.'), |
| 52 '<input id="dest" type="text" value="I have ~an~ kiwi. I have no idea.">', |
| 53 'Paste decorated text into <input>.'); |
| 86 | 54 |
| 87 () => pasteText(testSourcePlain, testInput), | 55 spellcheck_test( |
| 88 () => pasteText(testSourceDecorated, testInput), | 56 '<input id="dest" type="text">|', |
| 89 () => pasteText(testSourceMulti, testInput), | 57 document => pasteHTMLToDest( |
| 58 document, 'I have an grape. I have an muscat. I don\'t know.'), |
| 59 '<input id="dest" type="text" ' + |
| 60 'value="I have ~an~ grape. I have ~an~ muscat. I don\'t know.">', |
| 61 'Paste text with multiple errors into <input>.'); |
| 90 | 62 |
| 91 () => pasteText(testSourcePlain, testTextArea), | 63 spellcheck_test( |
| 92 () => pasteText(testSourceDecorated, testTextArea), | 64 '<textarea id="dest">|</textarea>', |
| 93 () => pasteText(testSourceMulti, testTextArea) | 65 document => pasteHTMLToDest(document, 'You has the right.'), |
| 94 ]; | 66 '<textarea id="dest">You ~has~ the right.</textarea>', |
| 67 'Paste plain text into <textarea>.'); |
| 95 | 68 |
| 96 var assertions = [ | 69 spellcheck_test( |
| 97 () => verifyMarker(testEditable, ['has']), | 70 '<textarea id="dest">|</textarea>', |
| 98 () => verifyMarker(testEditable, ['a']), // Checks only 'a'. | 71 document => pasteHTMLToDest(document, |
| 99 () => verifyMarker(testEditable, ['an', 'an']), | 72 'I have a<b>n ki</b>wi. I have no idea.'), |
| 73 '<textarea id="dest">I have ~an~ kiwi. I have no idea.</textarea>', |
| 74 'Paste decorated text into <textarea>.'); |
| 100 | 75 |
| 101 () => verifyMarker(testInput, ['has']), | 76 spellcheck_test( |
| 102 () => verifyMarker(testInput, ['an']), | 77 '<textarea id="dest">|</textarea>', |
| 103 () => verifyMarker(testInput, ['an', 'an']), | 78 document => pasteHTMLToDest( |
| 104 | 79 document, 'I have an grape. I have an muscat. I don\'t know.'), |
| 105 () => verifyMarker(testTextArea, ['has']), | 80 [ |
| 106 () => verifyMarker(testTextArea, ['an']), | 81 '<textarea id="dest">', |
| 107 () => verifyMarker(testTextArea, ['an', 'an']), | 82 'I have ~an~ grape. I have ~an~ muscat. I don\'t know.', |
| 108 ]; | 83 '</textarea>' |
| 109 | 84 ].join(''), |
| 110 runSpellingTest(steps, assertions, 'Grammar checking for pasted text.'); | 85 'Paste text with multiple errors into <textarea>.'); |
| 111 </script> | 86 </script> |
| 112 </body> | |
| 113 </html> | |
| OLD | NEW |