ModuleLoader.require([ "tinymce/Env", "tinymce/caret/CaretPosition" ], function(Env, CaretPosition) { module("tinymce.caret.CaretPosition"); if (!Env.ceFalse) { return; } var createRange = Utils.createRange, assertCaretPosition = Utils.assertCaretPosition, assertRange = Utils.assertRange; function getRoot() { return document.getElementById('view'); } function setupHtml(html) { tinymce.$(getRoot()).empty(); getRoot().innerHTML = html; } test('Constructor', function() { setupHtml('abc'); strictEqual(new CaretPosition(getRoot(), 0).container(), getRoot()); strictEqual(new CaretPosition(getRoot(), 1).offset(), 1); strictEqual(new CaretPosition(getRoot().firstChild, 0).container(), getRoot().firstChild); strictEqual(new CaretPosition(getRoot().firstChild, 1).offset(), 1); }); test('fromRangeStart', function() { setupHtml('abc'); assertCaretPosition(CaretPosition.fromRangeStart(createRange(getRoot(), 0)), new CaretPosition(getRoot(), 0)); assertCaretPosition(CaretPosition.fromRangeStart(createRange(getRoot(), 1)), new CaretPosition(getRoot(), 1)); assertCaretPosition(CaretPosition.fromRangeStart(createRange(getRoot().firstChild, 1)), new CaretPosition(getRoot().firstChild, 1)); }); test('fromRangeEnd', function() { setupHtml('abc'); assertCaretPosition(CaretPosition.fromRangeEnd(createRange(getRoot(), 0, getRoot(), 1)), new CaretPosition(getRoot(), 1)); assertCaretPosition(CaretPosition.fromRangeEnd(createRange(getRoot().firstChild, 0, getRoot().firstChild, 1)), new CaretPosition(getRoot().firstChild, 1)); }); test('after', function() { setupHtml('abc123'); assertCaretPosition(CaretPosition.after(getRoot().firstChild), new CaretPosition(getRoot(), 1)); assertCaretPosition(CaretPosition.after(getRoot().lastChild), new CaretPosition(getRoot(), 2)); }); test('before', function() { setupHtml('abc123'); assertCaretPosition(CaretPosition.before(getRoot().firstChild), new CaretPosition(getRoot(), 0)); assertCaretPosition(CaretPosition.before(getRoot().lastChild), new CaretPosition(getRoot(), 1)); }); test('isAtStart', function() { setupHtml('abc123123'); ok(new CaretPosition(getRoot(), 0).isAtStart()); ok(!new CaretPosition(getRoot(), 1).isAtStart()); ok(!new CaretPosition(getRoot(), 3).isAtStart()); ok(new CaretPosition(getRoot().firstChild, 0).isAtStart()); ok(!new CaretPosition(getRoot().firstChild, 1).isAtStart()); ok(!new CaretPosition(getRoot().firstChild, 3).isAtStart()); }); test('isAtEnd', function() { setupHtml('abc123123'); ok(new CaretPosition(getRoot(), 3).isAtEnd()); ok(!new CaretPosition(getRoot(), 2).isAtEnd()); ok(!new CaretPosition(getRoot(), 0).isAtEnd()); ok(new CaretPosition(getRoot().firstChild, 3).isAtEnd()); ok(!new CaretPosition(getRoot().firstChild, 0).isAtEnd()); ok(!new CaretPosition(getRoot().firstChild, 1).isAtEnd()); }); test('toRange', function() { setupHtml('abc'); assertRange(new CaretPosition(getRoot(), 0).toRange(), createRange(getRoot(), 0)); assertRange(new CaretPosition(getRoot(), 1).toRange(), createRange(getRoot(), 1)); assertRange(new CaretPosition(getRoot().firstChild, 1).toRange(), createRange(getRoot().firstChild, 1)); }); test('isEqual', function() { setupHtml('abc'); equal(new CaretPosition(getRoot(), 0).isEqual(new CaretPosition(getRoot(), 0)), true); equal(new CaretPosition(getRoot(), 1).isEqual(new CaretPosition(getRoot(), 0)), false); equal(new CaretPosition(getRoot(), 0).isEqual(new CaretPosition(getRoot().firstChild, 0)), false); }); test('isVisible', function() { setupHtml(' abc'); equal(new CaretPosition(getRoot().firstChild.firstChild, 0).isVisible(), false); equal(new CaretPosition(getRoot().firstChild.firstChild, 3).isVisible(), true); }); test('getClientRects', function() { setupHtml( 'abc' + '
1
' + '
2
' + '
2
' + '' + '' + '' + '

123

' + '
' ); equal(new CaretPosition(getRoot().firstChild.firstChild, 0).getClientRects().length, 1); equal(new CaretPosition(getRoot(), 1).getClientRects().length, 1); equal(new CaretPosition(getRoot(), 2).getClientRects().length, 2); equal(new CaretPosition(getRoot(), 3).getClientRects().length, 2); equal(new CaretPosition(getRoot(), 4).getClientRects().length, 2); equal(new CaretPosition(getRoot(), 5).getClientRects().length, 1); equal(new CaretPosition(getRoot(), 6).getClientRects().length, 1); equal(new CaretPosition(getRoot(), 7).getClientRects().length, 1); equal(new CaretPosition(getRoot(), 8).getClientRects().length, 1); equal(new CaretPosition(getRoot(), 9).getClientRects().length, 0); }); test('getClientRects between inline node and cE=false', function() { setupHtml( 'def' + 'ghi' ); equal(new CaretPosition(getRoot(), 1).getClientRects().length, 1); }); test('getClientRects at last visible character', function() { setupHtml('a '); equal(new CaretPosition(getRoot().firstChild.firstChild, 1).getClientRects().length, 1); }); test('getClientRects at extending character', function() { setupHtml('a\u0301b'); equal(new CaretPosition(getRoot().firstChild, 0).getClientRects().length, 1); equal(new CaretPosition(getRoot().firstChild, 1).getClientRects().length, 0); equal(new CaretPosition(getRoot().firstChild, 2).getClientRects().length, 1); }); test('getClientRects at whitespace character', function() { setupHtml(' a '); equal(new CaretPosition(getRoot().firstChild, 0).getClientRects().length, 0); equal(new CaretPosition(getRoot().firstChild, 1).getClientRects().length, 0); equal(new CaretPosition(getRoot().firstChild, 2).getClientRects().length, 1); equal(new CaretPosition(getRoot().firstChild, 3).getClientRects().length, 1); equal(new CaretPosition(getRoot().firstChild, 4).getClientRects().length, 0); equal(new CaretPosition(getRoot().firstChild, 5).getClientRects().length, 0); }); test('getNode', function() { setupHtml('abc'); equal(new CaretPosition(getRoot().firstChild.firstChild, 0).getNode(), getRoot().firstChild.firstChild); equal(new CaretPosition(getRoot(), 1).getNode(), getRoot().childNodes[1]); equal(new CaretPosition(getRoot(), 2).getNode(), getRoot().childNodes[2]); equal(new CaretPosition(getRoot(), 3).getNode(), getRoot().childNodes[2]); }); test('getNode (before)', function() { setupHtml('abc'); equal(new CaretPosition(getRoot().firstChild.firstChild, 0).getNode(true), getRoot().firstChild.firstChild); equal(new CaretPosition(getRoot(), 1).getNode(true), getRoot().childNodes[0]); equal(new CaretPosition(getRoot(), 2).getNode(true), getRoot().childNodes[1]); equal(new CaretPosition(getRoot(), 3).getNode(true), getRoot().childNodes[2]); }); });