| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <html> | |
| 3 <body> | |
| 4 <script src="../../resources/js-test.js"></script> | |
| 5 <div id="test"> | |
| 6 </div> | |
| 7 <p id="description"></p> | |
| 8 <div id="console"></div> | |
| 9 <script> | |
| 10 description('Test the extraction of the text surrounding an element.'); | |
| 11 | |
| 12 function findOffsetCoordinates(node, offset) { | |
| 13 var nodeRange = document.createRange(); | |
| 14 nodeRange.selectNode(node); | |
| 15 | |
| 16 var offsetRange = document.createRange(); | |
| 17 offsetRange.setStart(node, offset); | |
| 18 offsetRange.setEnd(node, offset + 1); | |
| 19 | |
| 20 var nodeRect = nodeRange.getBoundingClientRect(); | |
| 21 var offsetRect = offsetRange.getBoundingClientRect(); | |
| 22 var x = (offsetRect.left + offsetRect.right) / 2 - nodeRect.left; | |
| 23 var y = (offsetRect.top + offsetRect.bottom) / 2 - nodeRect.top; | |
| 24 | |
| 25 return { x: x, y: y }; | |
| 26 } | |
| 27 | |
| 28 function surroundingText(html, offset, maxLength) { | |
| 29 document.getElementById('test').innerHTML = html; | |
| 30 | |
| 31 var here = document.getElementById('here'); | |
| 32 if (here == null) | |
| 33 throw 'Test case needs an element with id "here"'; | |
| 34 | |
| 35 var node = here.hasChildNodes() ? here.firstChild : here.nextSibling; | |
| 36 if (node == null) | |
| 37 throw 'No node after "here" element'; | |
| 38 | |
| 39 var coords = findOffsetCoordinates(node, offset); | |
| 40 var text = window.internals.textSurroundingNode(node, coords.x, coords.y, ma
xLength); | |
| 41 return text.replace(/\s+/g, ' ').replace(/^\s*|\s*$/g, ''); | |
| 42 } | |
| 43 | |
| 44 function run() { | |
| 45 if (!window.internals) | |
| 46 return; | |
| 47 | |
| 48 shouldBeEqualToString('surroundingText(\'<button>.</button>12345<p id="here"
>6789 12345</p>6789<button>.</button>\', 0, 100)', '12345 6789 12345 6789'); | |
| 49 shouldBeEqualToString('surroundingText(\'<button>.</button>12345<p id="here"
>6789 12345</p>6789<button>.</button>\', 5, 6)', '89 123'); | |
| 50 shouldBeEqualToString('surroundingText(\'<button>.</button>12345<p id="here"
>6789 12345</p>6789<button>.</button>\', 5, 0)', ''); | |
| 51 shouldBeEqualToString('surroundingText(\'<button>.</button>12345<p id="here"
>6789 12345</p>6789<button>.</button>\', 5, 1)', '1'); | |
| 52 shouldBeEqualToString('surroundingText(\'<button>.</button>12345<p id="here"
>6789 12345</p>6789<button>.</button>\', 6, 2)', '12'); | |
| 53 shouldBeEqualToString('surroundingText(\'<select>.</select><div>57th Street
and Lake Shore Drive</div> <span>Chicago</span> <span id="here">IL</span> <span>
60637</span><select>.</select>\', 0, 100)', '57th Street and Lake Shore Drive Ch
icago IL 60637'); | |
| 54 shouldBeEqualToString('surroundingText(\'<fieldset>.</fieldset>12345<button>
abc</button><p>6789<br id="here"/>12345</p>6789<textarea>abc</textarea>0123<fiel
dset>.</fieldset>\', 0, 100)', '6789 12345 6789'); | |
| 55 shouldBeEqualToString('surroundingText(\'<button>.</button><div id="here">Th
is is <!-- comment --!>a test <\' + \'script language="javascript"><\' + \'/scri
pt>example<button>.</button>\', 0, 100)', 'This is a test example'); | |
| 56 shouldBeEqualToString('surroundingText(\'<button>.</button><div id="here">01
2345678901234567890123456789</div><button>.</button>\', 15, 12)', '901234567890'
); | |
| 57 shouldBeEqualToString('surroundingText(\'<option>.</option>12345<button id="
here">test</button><option>.</option>\', 0, 100)', ''); | |
| 58 shouldBeEqualToString('surroundingText(\'<option>.</option>12345<button>te<s
pan id="here">st</span></button><option>.</option>\', 0, 100)', ''); | |
| 59 shouldBeEqualToString('surroundingText(\'<p id="here">.</p>\', 0, 2)', '.'); | |
| 60 | |
| 61 document.body.removeChild(document.getElementById('test')); | |
| 62 finishJSTest(); | |
| 63 } | |
| 64 | |
| 65 window.onload = run; | |
| 66 window.jsTestIsAsync = true; | |
| 67 window.successfullyParsed = true; | |
| 68 </script> | |
| 69 </body> | |
| 70 </html> | |
| OLD | NEW |