| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <div id="test" contenteditable> |
| <p> hello<br> |
| world.</p> |
| <blockquote><div>|<br></div></blockquote> |
| <em>webkit</em> |
| </div> |
| <div id="console"></div> |
| <script> |
| |
| if (!window.internals) |
| testFailed('This test requires internals object'); |
| else { |
| var container = document.getElementById('test'); |
| |
| function range(startContainer, startOffset, endContainer, endOffset) { |
| var range = document.createRange(); |
| range.setStart(startContainer, startOffset); |
| range.setEnd(endContainer, endOffset); |
| return range; |
| } |
| |
| function locationAndLengthFromRange(range) { |
| var location = internals.locationFromRange(container, range); |
| var length = internals.lengthFromRange(container, range); |
| return [location, length]; |
| } |
| |
| Range.prototype.toArray = function () { |
| return [this.startContainer, this.startOffset, this.endContainer, this.endOffset]; |
| } |
| |
| var p = document.querySelector('#test p'); |
| var div = document.querySelector('#test div'); |
| var r = internals.rangeFromLocationAndLength(container, 0, 1); |
| shouldBe('locationAndLengthFromRange(range(p.firstChild, 0, p.firstChild, 3))', '[0, 1]'); |
| shouldBe('locationAndLengthFromRange(range(p.firstChild, 1, p.firstChild, 4))', '[0, 2]'); |
| shouldBe('locationAndLengthFromRange(range(p.firstChild, 2, p.firstChild, 3))', '[0, 1]'); |
| shouldBe('internals.rangeFromLocationAndLength(container, 0, 1).toArray()', '[p.firstChild, 2, p.firstChild, 3]'); |
| |
| shouldBe('locationAndLengthFromRange(range(p.firstChild, 2, p.firstChild, 7))', '[0, 5]'); |
| shouldBe('locationAndLengthFromRange(range(p.firstChild, 2, p, 1))', '[0, 5]'); |
| shouldBe('locationAndLengthFromRange(range(p.firstChild, 2, p, 2))', '[0, 6]'); |
| shouldBe('locationAndLengthFromRange(range(p.firstChild, 2, p.childNodes[2], 1))', '[0, 6]'); |
| shouldBe('internals.rangeFromLocationAndLength(container, 1, 4).toArray()', '[p.firstChild, 3, p.firstChild, 7]'); |
| shouldBe('internals.rangeFromLocationAndLength(container, 0, 6).toArray()', '[p.firstChild, 2, p.childNodes[2], 1]'); |
| |
| shouldBe('locationAndLengthFromRange(range(p.childNodes[2], 6, p, 3))', '[11, 1]'); |
| shouldBe('internals.rangeFromLocationAndLength(container, 11, 2).toArray()', '[p.childNodes[2], 6, div, 0]'); |
| |
| container.style.display = 'none'; |
| } |
| |
| |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |