module('range'); test('range', function() { var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range, nativeRange; range = K.range(document); ok(range.startContainer === document); ok(range.startOffset === 0); ok(range.endContainer === document); ok(range.endOffset === 0); ok(range.collapsed === true); ok(range.commonAncestor() === document); range = K.range(document); range.selectNodeContents(strong); nativeRange = range.get(); var newRange = K.range(nativeRange); same(range.toString(), newRange.toString()); }); test('range.setStart', function() { expect(6); var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range = K.range(document); range.setStart(strong.previousSibling, 3); ok(range.startContainer === strong.previousSibling); ok(range.startOffset === 3); ok(range.endContainer === strong.previousSibling); ok(range.endOffset === 3); ok(range.collapsed === true); ok(range.commonAncestor() === strong.previousSibling); }); test('range.setEnd', function() { expect(6); var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range = K.range(document); range.setStart(strong.previousSibling, 3); range.setEnd(p, 4); ok(range.startContainer === strong.previousSibling); ok(range.startOffset === 3); ok(range.endContainer === p); ok(range.endOffset === 4); ok(range.collapsed === false); ok(range.commonAncestor() === p); }); test('range.setStartBefore', function() { expect(6); var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range = K.range(document); range.setStartBefore(strong); ok(range.startContainer === p); ok(range.startOffset === 1); ok(range.endContainer === p); ok(range.endOffset === 1); ok(range.collapsed === true); ok(range.commonAncestor() === p); }); test('range.setStartAfter', function() { expect(6); var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range = K.range(document); range.setStartAfter(strong); ok(range.startContainer === p); ok(range.startOffset === 2); ok(range.endContainer === p); ok(range.endOffset === 2); ok(range.collapsed === true); ok(range.commonAncestor() === p); }); test('range.setEndBefore', function() { expect(6); var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range = K.range(document); range.setEndBefore(strong); ok(range.startContainer === p); ok(range.startOffset === 1); ok(range.endContainer === p); ok(range.endOffset === 1); ok(range.collapsed === true); ok(range.commonAncestor() === p); }); test('range.setEndAfter', function() { expect(6); var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range = K.range(document); range.setStartAfter(strong); range.setEndAfter(strong); ok(range.startContainer === p); ok(range.startOffset === 2); ok(range.endContainer === p); ok(range.endOffset === 2); ok(range.collapsed === true); ok(range.commonAncestor() === p); }); test('range.selectNode', function() { expect(6); var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range = K.range(document); range.selectNode(strong); ok(range.startContainer === p); ok(range.startOffset === 1); ok(range.endContainer === p); ok(range.endOffset === 2); ok(range.collapsed === false); ok(range.commonAncestor() === p); }); test('range.selectNodeContents', function() { var range, strong, img, p; //1 strong = K.query('#test-data-01 strong'); range = K.range(document); range.selectNodeContents(strong); ok(range.startContainer === strong); ok(range.startOffset === 0); ok(range.endContainer === strong); ok(range.endOffset === 1); ok(range.collapsed === false); ok(range.commonAncestor() === strong); //2 img = K.query('#test-data-01 img'); range = K.range(document); range.selectNodeContents(img); ok(range.startContainer === img.parentNode); ok(range.startOffset === 3); ok(range.endContainer === img.parentNode); ok(range.endOffset === 4); ok(range.collapsed === false); ok(range.commonAncestor() === img.parentNode); //3 strong = K.query('#test-data-02 strong'); range = K.range(document); range.selectNodeContents(strong); ok(range.startContainer === strong); ok(range.startOffset === 0); ok(range.endContainer === strong); ok(range.endOffset === 0); ok(range.collapsed === true); ok(range.commonAncestor() === strong); //4 p = K.query('#test-data-02 p'); range = K.range(document); range.selectNodeContents(p); ok(range.startContainer === p); ok(range.endContainer === p); ok(range.startOffset === 0); ok(range.endOffset === 7); ok(range.collapsed === false); ok(range.commonAncestor() === p); }); test('range.collapse', function() { var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range; range = K.range(document); range.setStart(p.childNodes[2], 0); range.setEnd(p.childNodes[4], 2); range.collapse(true); ok(range.startContainer === range.endContainer); ok(range.startOffset === range.endOffset); ok(range.collapsed === true); range = K.range(document); range.setStart(p.childNodes[2], 0); range.setEnd(p.childNodes[4], 2); range.collapse(false); ok(range.startContainer === range.endContainer); ok(range.startOffset === range.endOffset); ok(range.collapsed === true); }); test('range.compareBoundaryPoints', function() { var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var cmp, rangeA, rangeB; //1 rangeA = K.range(document); rangeB = K.range(document); rangeA.setStart(p.childNodes[0], 0); rangeA.setEnd(p.childNodes[0], 2); rangeB.setStart(p.childNodes[4], 0); rangeB.setEnd(p.childNodes[4], 2); cmp = rangeA.compareBoundaryPoints(K.START_TO_START, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.END_TO_END, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.END_TO_START, rangeB); ok(cmp === -1); //2 rangeA = K.range(document); rangeB = K.range(document); rangeA.setStart(p.childNodes[0], 0); rangeA.setEnd(p.childNodes[4], 3); rangeB.setStart(p.childNodes[4], 0); rangeB.setEnd(p.childNodes[4], 2); cmp = rangeA.compareBoundaryPoints(K.START_TO_START, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_START, rangeB); ok(cmp === -1); //3 rangeA = K.range(document); rangeB = K.range(document); rangeA.setStart(p.childNodes[0], 0); rangeA.setEnd(p.childNodes[2], 3); rangeB.setStart(p.childNodes[2], 0); rangeB.setEnd(p.childNodes[4], 2); cmp = rangeA.compareBoundaryPoints(K.START_TO_START, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_END, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.END_TO_START, rangeB); ok(cmp === -1); //4 rangeA = K.range(document); rangeB = K.range(document); rangeA.selectNode(strong); rangeB.selectNode(p); cmp = rangeA.compareBoundaryPoints(K.START_TO_START, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_END, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.END_TO_START, rangeB); ok(cmp === -1); //5 rangeA = K.range(document); rangeB = K.range(document); rangeA.setStart(p.childNodes[0], 0); rangeA.setEnd(p.childNodes[0], 2); rangeB.setStart(p.childNodes[0], 0); rangeB.setEnd(p.childNodes[0], 2); cmp = rangeA.compareBoundaryPoints(K.START_TO_START, rangeB); ok(cmp === 0); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_END, rangeB); ok(cmp === 0); cmp = rangeA.compareBoundaryPoints(K.END_TO_START, rangeB); ok(cmp === -1); //6 rangeA = K.range(document); rangeB = K.range(document); rangeA.selectNode(strong); rangeB.selectNode(strong.firstChild); cmp = rangeA.compareBoundaryPoints(K.START_TO_START, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_START, rangeB); ok(cmp === -1); //7 rangeA = K.range(document); rangeB = K.range(document); rangeA.selectNode(strong.firstChild); rangeB.setStart(strong.firstChild, 0); rangeB.setEnd(strong.firstChild, 2); cmp = rangeA.compareBoundaryPoints(K.START_TO_START, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_START, rangeB); ok(cmp === -1); //8 rangeA = K.range(document); rangeB = K.range(document); rangeA.selectNode(p.childNodes[3]); rangeB.selectNode(strong.firstChild); rangeB.setEnd(strong.nextSibling, 4); cmp = rangeA.compareBoundaryPoints(K.START_TO_START, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_END, rangeB); ok(cmp === 1); cmp = rangeA.compareBoundaryPoints(K.END_TO_START, rangeB); ok(cmp === 1); //9 rangeA = K.range(document); rangeB = K.range(document); rangeA.selectNode(strong.previousSibling); rangeB.setStart(p, 1); rangeB.setEnd(strong.firstChild, 3); cmp = rangeA.compareBoundaryPoints(K.START_TO_START, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === 0); cmp = rangeA.compareBoundaryPoints(K.END_TO_END, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.END_TO_START, rangeB); ok(cmp === -1); //10 rangeA = K.range(document); rangeB = K.range(document); rangeA.selectNode(strong.previousSibling); rangeB.selectNode(strong.firstChild); rangeB.setEnd(strong.nextSibling, 4); cmp = rangeA.compareBoundaryPoints(K.START_TO_START, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.END_TO_END, rangeB); ok(cmp === -1); cmp = rangeA.compareBoundaryPoints(K.END_TO_START, rangeB); ok(cmp === -1); //10 rangeA = K.range(document); rangeB = K.range(document); rangeA.setStart(strong.previousSibling, 4); rangeB.setStart(strong.firstChild, 0); cmp = rangeA.compareBoundaryPoints(K.START_TO_END, rangeB); ok(cmp === -1); }); test('range.cloneRange', function() { expect(6); var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range = K.range(document); range.setStart(p.childNodes[2], 0); range.setEnd(p.childNodes[4], 2); var cloneRange = range.cloneRange(); ok(range.startContainer === cloneRange.startContainer); ok(range.startOffset === cloneRange.startOffset); ok(range.endContainer === cloneRange.endContainer); ok(range.endOffset === cloneRange.endOffset); ok(range.collapsed === cloneRange.collapsed); ok(range.commonAncestor() === cloneRange.commonAncestor()); }); test('range.toString', function() { var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range; //1 range = K.range(document); range.selectNode(strong); same(range.toString(), 'efg'); //2 range = K.range(document); range.selectNode(strong); range.setStart(strong.firstChild, 1); same(range.toString(), 'fg'); //3 range = K.range(document); range.setStart(strong.firstChild, 1); range.setEnd(strong.firstChild, 2); same(range.toString(), 'f'); //4 range = K.range(document); range.setStart(p.childNodes[0], 0); range.setEnd(p.childNodes[4], 2); same(range.toString(), 'abcdefghijkxy'); //5 range = K.range(document); range.setStart(p.childNodes[4], 1); range.setEnd(p.childNodes[4], 2); same(range.toString(), 'y'); //6 range = K.range(document); range.selectNode(p); same(range.toString(), 'abcdefghijkxyz0123456789'); //7 range = K.range(document); range.selectNode(strong.firstChild); same(range.toString(), 'efg'); //8 range = K.range(document); range.selectNode(strong); same(range.toString(), 'efg'); //9 range = K.range(document); same(range.toString(), ''); //10 range = K.range(document); range.selectNode(document.body); ok(range.toString().length > 100); }); test('range.cloneContents', function() { var p = K.query('#test-data-01 p'); var strong = K.query('#test-data-01 strong'); var range, frag; //1 range = K.range(document); range.selectNode(strong); frag = range.cloneContents(); same(K(frag).outer().toLowerCase(), 'efg'); ok(!range.collapsed); //2 range = K.range(document); range.setStart(strong.firstChild, 1); range.setEnd(strong.firstChild, 2); frag = range.cloneContents(); same(K(frag).outer().toLowerCase(), 'f'); //3 range = K.range(document); range.setStart(strong.firstChild, 0); range.setEnd(strong.firstChild, 3); frag = range.cloneContents(); same(K(frag).outer().toLowerCase(), 'efg'); //4 range = K.range(document); range.setStart(strong.firstChild, 1); range.setEnd(strong.nextSibling, 1); frag = range.cloneContents(); same(K(frag).outer().toLowerCase(), 'fgh'); //5 range = K.range(document); range.setStart(strong.firstChild, 1); range.setEnd(strong.nextSibling, 0); frag = range.cloneContents(); same(K(frag).outer().toLowerCase(), 'fg'); //6 range = K.range(document); range.setStart(p, 0); range.setEnd(p, 4); frag = range.cloneContents(); ok(K(frag).children().length === 4); //7 range = K.range(document); range.selectNode(strong.firstChild); range.setEnd(strong.nextSibling, 4); frag = range.cloneContents(); same(K(frag).outer().toLowerCase(), 'efghijk'); //8 range = K.range(document); range.setStart(strong.nextSibling, 4); range.setEnd(p, 4); frag = range.cloneContents(); ok(K(frag).children().length === 1); same(K(frag).first().name, 'img'); }); test('range.extractContents', function() { var p = K.query('#test-data-01 p'), cloneP, strong, range, frag, div; //1 cloneP = p.cloneNode(true); document.body.appendChild(cloneP); strong = K.query('strong', cloneP); range = K.range(document); range.selectNode(strong); frag = range.extractContents(); same(K(frag).outer().toLowerCase(), 'efg'); ok(range.collapsed); document.body.removeChild(cloneP); //2 cloneP = p.cloneNode(true); document.body.appendChild(cloneP); strong = K.query('strong', cloneP); range = K.range(document); range.setStart(strong.firstChild, 1); range.setEnd(strong.firstChild, 2); frag = range.extractContents(); same(K(frag).outer().toLowerCase(), 'f'); document.body.removeChild(cloneP); //3 cloneP = p.cloneNode(true); document.body.appendChild(cloneP); strong = K.query('strong', cloneP); range = K.range(document); range.setStart(strong.firstChild, 0); range.setEnd(strong.firstChild, 3); frag = range.extractContents(); same(K(frag).outer().toLowerCase(), 'efg'); document.body.removeChild(cloneP); //4 cloneP = p.cloneNode(true); document.body.appendChild(cloneP); strong = K.query('strong', cloneP); range = K.range(document); range.setStart(strong.firstChild, 1); range.setEnd(strong.nextSibling, 1); frag = range.extractContents(); same(K(frag).outer().toLowerCase(), 'fgh'); document.body.removeChild(cloneP); //5 cloneP = p.cloneNode(true); document.body.appendChild(cloneP); strong = K.query('strong', cloneP); range = K.range(document); range.setStart(strong.firstChild, 1); range.setEnd(strong.nextSibling, 0); frag = range.extractContents(); same(K(frag).outer().toLowerCase(), 'fg'); document.body.removeChild(cloneP); //6 cloneP = p.cloneNode(true); document.body.appendChild(cloneP); strong = K.query('strong', cloneP); range = K.range(document); range.setStart(cloneP, 0); range.setEnd(cloneP, 4); frag = range.extractContents(); ok(K(frag).children().length === 4); document.body.removeChild(cloneP); //7 cloneP = p.cloneNode(true); document.body.appendChild(cloneP); strong = K.query('strong', cloneP); range = K.range(document); range.selectNode(strong.firstChild); range.setEnd(strong.nextSibling, 4); frag = range.extractContents(); same(K(frag).outer().toLowerCase(), 'efghijk'); document.body.removeChild(cloneP); //8 cloneP = p.cloneNode(true); document.body.appendChild(cloneP); strong = K.query('strong', cloneP); range = K.range(document); range.setStart(cloneP, 3); range.setEnd(cloneP, 4); frag = range.extractContents(); ok(K(frag).children().length === 1); same(K(frag).first().name, 'img'); document.body.removeChild(cloneP); //9 cloneP = p.cloneNode(true); document.body.appendChild(cloneP); strong = K.query('strong', cloneP); range = K.range(document); range.setStart(cloneP, 1); range.setEnd(strong.firstChild, 3); frag = range.extractContents(); same(K(frag).outer().toLowerCase(), 'efg'); document.body.removeChild(cloneP); //10 cloneP = p.cloneNode(true); document.body.appendChild(cloneP); strong = K.query('strong', cloneP); range = K.range(document); range.setStart(cloneP, 0); range.setEnd(strong.firstChild, 1); frag = range.extractContents(); same(K(frag).outer(), 'abcde'); document.body.removeChild(cloneP); //11 div = K('
123abc
'); range = K.range(document); range.setStart(div[0], 0); range.setEnd(div[0], 1); range.shrink(); same(range.html(), '123abc'); div.html(''); }); test('range.moveToBookmark', function() { var div = K(''); K(document.body.firstChild).before(div); //1 div.html('123456789
'); range = K.range(document); range.setStart(div.first().first()[0], 3); range.setEnd(div.first().first().next()[0], 1); var bookmark = range.createBookmark(); range.moveToBookmark(bookmark); same(range.html(), '45678'); div.html(''); //2 div.html('123456789
'); range = K.range(document); range.setStart(div.first()[0], 1); range.setEnd(div.first().last()[0], 0); var bookmark = range.createBookmark(true); range.moveToBookmark(bookmark); same(range.html(), '5678'); div.html(''); }); test('range.get', function() { var div = K(''); K(document.body.firstChild).before(div); //1 div.html('0123456789123 |