import { LegacyUnit } from '@ephox/mcagar'; import { Pipeline } from '@ephox/agar'; import Env from 'tinymce/core/api/Env'; import CaretPosition from 'tinymce/core/caret/CaretPosition'; import CaretAsserts from '../../module/test/CaretAsserts'; import ViewBlock from '../../module/test/ViewBlock'; import { UnitTest } from '@ephox/bedrock'; UnitTest.asynctest('browser.tinymce.core.CaretPositionTest', function () { const success = arguments[arguments.length - 2]; const failure = arguments[arguments.length - 1]; const suite = LegacyUnit.createSuite(); const createRange = CaretAsserts.createRange; const viewBlock = ViewBlock(); if (!Env.ceFalse) { return; } const getRoot = function () { return viewBlock.get(); }; const setupHtml = function (html) { viewBlock.update(html); }; suite.test('Constructor', function () { setupHtml('abc'); LegacyUnit.equalDom(CaretPosition(getRoot(), 0).container(), getRoot()); LegacyUnit.strictEqual(CaretPosition(getRoot(), 1).offset(), 1); LegacyUnit.equalDom(CaretPosition(getRoot().firstChild, 0).container(), getRoot().firstChild); LegacyUnit.strictEqual(CaretPosition(getRoot().firstChild, 1).offset(), 1); }); suite.test('fromRangeStart', function () { setupHtml('abc'); CaretAsserts.assertCaretPosition(CaretPosition.fromRangeStart(createRange(getRoot(), 0)), CaretPosition(getRoot(), 0)); CaretAsserts.assertCaretPosition(CaretPosition.fromRangeStart(createRange(getRoot(), 1)), CaretPosition(getRoot(), 1)); CaretAsserts.assertCaretPosition( CaretPosition.fromRangeStart(createRange(getRoot().firstChild, 1)), CaretPosition(getRoot().firstChild, 1) ); }); suite.test('fromRangeEnd', function () { setupHtml('abc'); CaretAsserts.assertCaretPosition( CaretPosition.fromRangeEnd(createRange(getRoot(), 0, getRoot(), 1)), CaretPosition(getRoot(), 1) ); CaretAsserts.assertCaretPosition( CaretPosition.fromRangeEnd(createRange(getRoot().firstChild, 0, getRoot().firstChild, 1)), CaretPosition(getRoot().firstChild, 1) ); }); suite.test('after', function () { setupHtml('abc123'); CaretAsserts.assertCaretPosition(CaretPosition.after(getRoot().firstChild), CaretPosition(getRoot(), 1)); CaretAsserts.assertCaretPosition(CaretPosition.after(getRoot().lastChild), CaretPosition(getRoot(), 2)); }); suite.test('before', function () { setupHtml('abc123'); CaretAsserts.assertCaretPosition(CaretPosition.before(getRoot().firstChild), CaretPosition(getRoot(), 0)); CaretAsserts.assertCaretPosition(CaretPosition.before(getRoot().lastChild), CaretPosition(getRoot(), 1)); }); suite.test('isAtStart', function () { setupHtml('abc123123'); LegacyUnit.equal(CaretPosition(getRoot(), 0).isAtStart(), true); LegacyUnit.equal(!CaretPosition(getRoot(), 1).isAtStart(), true); LegacyUnit.equal(!CaretPosition(getRoot(), 3).isAtStart(), true); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 0).isAtStart(), true); LegacyUnit.equal(!CaretPosition(getRoot().firstChild, 1).isAtStart(), true); LegacyUnit.equal(!CaretPosition(getRoot().firstChild, 3).isAtStart(), true); }); suite.test('isAtEnd', function () { setupHtml('abc123123'); LegacyUnit.equal(CaretPosition(getRoot(), 3).isAtEnd(), true); LegacyUnit.equal(!CaretPosition(getRoot(), 2).isAtEnd(), true); LegacyUnit.equal(!CaretPosition(getRoot(), 0).isAtEnd(), true); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 3).isAtEnd(), true); LegacyUnit.equal(!CaretPosition(getRoot().firstChild, 0).isAtEnd(), true); LegacyUnit.equal(!CaretPosition(getRoot().firstChild, 1).isAtEnd(), true); }); suite.test('toRange', function () { setupHtml('abc'); CaretAsserts.assertRange(CaretPosition(getRoot(), 0).toRange(), createRange(getRoot(), 0)); CaretAsserts.assertRange(CaretPosition(getRoot(), 1).toRange(), createRange(getRoot(), 1)); CaretAsserts.assertRange(CaretPosition(getRoot().firstChild, 1).toRange(), createRange(getRoot().firstChild, 1)); }); suite.test('isEqual', function () { setupHtml('abc'); LegacyUnit.equal(CaretPosition(getRoot(), 0).isEqual(CaretPosition(getRoot(), 0)), true); LegacyUnit.equal(CaretPosition(getRoot(), 1).isEqual(CaretPosition(getRoot(), 0)), false); LegacyUnit.equal(CaretPosition(getRoot(), 0).isEqual(CaretPosition(getRoot().firstChild, 0)), false); }); suite.test('isVisible', function () { setupHtml(' abc'); LegacyUnit.equal(CaretPosition(getRoot().firstChild.firstChild, 0).isVisible(), false); LegacyUnit.equal(CaretPosition(getRoot().firstChild.firstChild, 3).isVisible(), true); }); suite.test('getClientRects', function () { setupHtml( 'abc' + '
1
' + '
2
' + '
2
' + '' + '' + '' + '

123

' + '
' ); LegacyUnit.equal(CaretPosition(getRoot().firstChild.firstChild, 0).getClientRects().length, 1); LegacyUnit.equal(CaretPosition(getRoot(), 1).getClientRects().length, 1); LegacyUnit.equal(CaretPosition(getRoot(), 2).getClientRects().length, 2); LegacyUnit.equal(CaretPosition(getRoot(), 3).getClientRects().length, 2); LegacyUnit.equal(CaretPosition(getRoot(), 4).getClientRects().length, 2); LegacyUnit.equal(CaretPosition(getRoot(), 5).getClientRects().length, 1); LegacyUnit.equal(CaretPosition(getRoot(), 6).getClientRects().length, 1); LegacyUnit.equal(CaretPosition(getRoot(), 7).getClientRects().length, 1); LegacyUnit.equal(CaretPosition(getRoot(), 8).getClientRects().length, 1); LegacyUnit.equal(CaretPosition(getRoot(), 9).getClientRects().length, 0); }); suite.test('getClientRects between inline node and cE=false', function () { setupHtml( 'def' + 'ghi' ); LegacyUnit.equal(CaretPosition(getRoot(), 1).getClientRects().length, 1); }); suite.test('getClientRects at last visible character', function () { setupHtml('a '); LegacyUnit.equal(CaretPosition(getRoot().firstChild.firstChild, 1).getClientRects().length, 1); }); suite.test('getClientRects at extending character', function () { setupHtml('a'); const textNode = getRoot().firstChild as Text; textNode.appendData('\u0301b'); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 0).getClientRects().length, 1); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 1).getClientRects().length, 0); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 2).getClientRects().length, 1); }); suite.test('getClientRects at whitespace character', function () { setupHtml(' a '); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 0).getClientRects().length, 0); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 1).getClientRects().length, 0); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 2).getClientRects().length, 1); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 3).getClientRects().length, 1); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 4).getClientRects().length, 0); LegacyUnit.equal(CaretPosition(getRoot().firstChild, 5).getClientRects().length, 0); }); suite.test('getClientRects at only one text node should return client rects', function () { setupHtml('

a
b

'); LegacyUnit.equal(CaretPosition(getRoot().firstChild.firstChild, 0).getClientRects().length > 0, true); LegacyUnit.equal(CaretPosition(getRoot().firstChild.firstChild, 1).getClientRects().length > 0, true); LegacyUnit.equal(CaretPosition(getRoot().firstChild.lastChild, 0).getClientRects().length > 0, true); LegacyUnit.equal(CaretPosition(getRoot().firstChild.lastChild, 1).getClientRects().length > 0, true); }); suite.test('getNode', function () { setupHtml('abc'); LegacyUnit.equalDom(CaretPosition(getRoot().firstChild.firstChild, 0).getNode(), getRoot().firstChild.firstChild); LegacyUnit.equalDom(CaretPosition(getRoot(), 1).getNode(), getRoot().childNodes[1]); LegacyUnit.equalDom(CaretPosition(getRoot(), 2).getNode(), getRoot().childNodes[2]); LegacyUnit.equalDom(CaretPosition(getRoot(), 3).getNode(), getRoot().childNodes[2]); }); suite.test('getNode (before)', function () { setupHtml('abc'); LegacyUnit.equalDom(CaretPosition(getRoot().firstChild.firstChild, 0).getNode(true), getRoot().firstChild.firstChild); LegacyUnit.equalDom(CaretPosition(getRoot(), 1).getNode(true), getRoot().childNodes[0]); LegacyUnit.equalDom(CaretPosition(getRoot(), 2).getNode(true), getRoot().childNodes[1]); LegacyUnit.equalDom(CaretPosition(getRoot(), 3).getNode(true), getRoot().childNodes[2]); }); suite.test('isAtStart/isAtEnd/isTextPosition', function () { setupHtml('abc

'); LegacyUnit.equal(CaretPosition.isAtStart(CaretPosition(getRoot().firstChild.firstChild, 0)), true); LegacyUnit.equal(CaretPosition.isAtStart(CaretPosition(getRoot().firstChild.firstChild, 1)), false); LegacyUnit.equal(CaretPosition.isAtStart(CaretPosition(getRoot().firstChild.firstChild, 3)), false); LegacyUnit.equal(CaretPosition.isAtStart(CaretPosition(getRoot().lastChild, 0)), true); LegacyUnit.equal(CaretPosition.isAtStart(CaretPosition(getRoot().lastChild, 1)), false); LegacyUnit.equal(CaretPosition.isAtEnd(CaretPosition(getRoot().firstChild.firstChild, 3)), true); LegacyUnit.equal(CaretPosition.isAtEnd(CaretPosition(getRoot().firstChild.firstChild, 1)), false); LegacyUnit.equal(CaretPosition.isAtEnd(CaretPosition(getRoot().firstChild.firstChild, 0)), false); LegacyUnit.equal(CaretPosition.isAtEnd(CaretPosition(getRoot().lastChild, 1)), true); LegacyUnit.equal(CaretPosition.isAtEnd(CaretPosition(getRoot().lastChild, 0)), false); LegacyUnit.equal(CaretPosition.isTextPosition(CaretPosition(getRoot().firstChild.firstChild, 0)), true); LegacyUnit.equal(CaretPosition.isTextPosition(CaretPosition(getRoot().lastChild, 0)), false); }); viewBlock.attach(); Pipeline.async({}, suite.toSteps({}), function () { viewBlock.detach(); success(); }, failure); });