import { Assertions, Logger, Pipeline, Step } from '@ephox/agar'; import { Element } from '@ephox/sugar'; import * as CaretContainer from 'tinymce/core/caret/CaretContainer'; import CaretContainerRemove from 'tinymce/core/caret/CaretContainerRemove'; import CaretPosition from 'tinymce/core/caret/CaretPosition'; import Env from 'tinymce/core/api/Env'; import ViewBlock from '../../module/test/ViewBlock'; import { UnitTest } from '@ephox/bedrock'; UnitTest.asynctest('browser.tinymce.core.CaretContainerRemoveTest', function () { const success = arguments[arguments.length - 2]; const failure = arguments[arguments.length - 1]; const viewBlock = ViewBlock(); if (!Env.ceFalse) { return; } const getRoot = function () { return viewBlock.get(); }; const setupHtml = function (html) { viewBlock.update(html); }; const sTestRemove = Logger.t( 'Remove', Step.sync(function () { setupHtml('1'); CaretContainer.insertInline(getRoot().firstChild, true); Assertions.assertEq('Should be inline container', true, CaretContainer.isCaretContainerInline(getRoot().firstChild)); CaretContainerRemove.remove(getRoot().firstChild); Assertions.assertEq('Should not be inline container', false, CaretContainer.isCaretContainerInline(getRoot().firstChild)); }) ); const sTestRemoveAndRepositionBlockAtOffset = Logger.t( 'removeAndReposition block in same parent at offset', Step.sync(function () { setupHtml('1'); CaretContainer.insertBlock('p', getRoot().firstChild, true); Assertions.assertEq('Should be block container', true, CaretContainer.isCaretContainerBlock(getRoot().firstChild)); const pos = CaretContainerRemove.removeAndReposition(getRoot().firstChild, CaretPosition(getRoot(), 0)); Assertions.assertEq('Should be unchanged offset', 0, pos.offset()); Assertions.assertDomEq('Should be unchanged container', Element.fromDom(getRoot()), Element.fromDom(pos.container())); Assertions.assertEq('Should not be block container', false, CaretContainer.isCaretContainerBlock(getRoot().firstChild)); }) ); const sTestRemoveAndRepositionBeforeOffset = Logger.t( 'removeAndReposition block in same parent before offset', Step.sync(function () { setupHtml('12'); CaretContainer.insertBlock('p', getRoot().childNodes[1], true); Assertions.assertEq('Should be block container', true, CaretContainer.isCaretContainerBlock(getRoot().childNodes[1])); const pos = CaretContainerRemove.removeAndReposition(getRoot().childNodes[1], CaretPosition(getRoot(), 0)); Assertions.assertEq('Should be unchanged offset', 0, pos.offset()); Assertions.assertDomEq('Should be unchanged container', Element.fromDom(getRoot()), Element.fromDom(pos.container())); Assertions.assertEq('Should not be block container', false, CaretContainer.isCaretContainerBlock(getRoot().childNodes[1])); }) ); const sTestRemoveAndRepositionAfterOffset = Logger.t( 'removeAndReposition block in same parent after offset', Step.sync(function () { setupHtml('12'); CaretContainer.insertBlock('p', getRoot().childNodes[1], true); Assertions.assertEq('Should be block container', true, CaretContainer.isCaretContainerBlock(getRoot().childNodes[1])); const pos = CaretContainerRemove.removeAndReposition(getRoot().childNodes[1], CaretPosition(getRoot(), 3)); Assertions.assertEq('Should be changed offset', 2, pos.offset()); Assertions.assertDomEq('Should be unchanged container', Element.fromDom(getRoot()), Element.fromDom(pos.container())); Assertions.assertEq('Should not be block container', false, CaretContainer.isCaretContainerBlock(getRoot().childNodes[1])); }) ); viewBlock.attach(); Pipeline.async({}, [ sTestRemove, sTestRemoveAndRepositionBlockAtOffset, sTestRemoveAndRepositionBeforeOffset, sTestRemoveAndRepositionAfterOffset ], function () { viewBlock.detach(); success(); }, failure); });