import { LegacyUnit } from '@ephox/mcagar';
import { Pipeline } from '@ephox/agar';
import Env from 'tinymce/core/api/Env';
import * as CaretCandidate from 'tinymce/core/caret/CaretCandidate';
import $ from 'tinymce/core/api/dom/DomQuery';
import Zwsp from 'tinymce/core/text/Zwsp';
import ViewBlock from '../../module/test/ViewBlock';
import { UnitTest } from '@ephox/bedrock';
UnitTest.asynctest('browser.tinymce.core.CaretCandidateTest', function () {
const success = arguments[arguments.length - 2];
const failure = arguments[arguments.length - 1];
const suite = LegacyUnit.createSuite();
const viewBlock = ViewBlock();
if (!Env.ceFalse) {
return;
}
const getRoot = function () {
return viewBlock.get();
};
const setupHtml = function (html) {
viewBlock.update(html);
};
suite.test('isCaretCandidate', function () {
$.each('img input textarea hr table iframe video audio object'.split(' '), function (index, name) {
LegacyUnit.equal(CaretCandidate.isCaretCandidate(document.createElement(name)), true);
});
LegacyUnit.equal(CaretCandidate.isCaretCandidate(document.createTextNode('text')), true);
LegacyUnit.equal(CaretCandidate.isCaretCandidate($('')[0]), true);
LegacyUnit.equal(CaretCandidate.isCaretCandidate($('')[0]), false);
LegacyUnit.equal(CaretCandidate.isCaretCandidate($('
')[0]), true);
LegacyUnit.equal(CaretCandidate.isCaretCandidate($('')[0]), true);
LegacyUnit.equal(CaretCandidate.isCaretCandidate($('')[0]), false);
LegacyUnit.equal(CaretCandidate.isCaretCandidate($('')[0]), false);
LegacyUnit.equal(CaretCandidate.isCaretCandidate(document.createComment('text')), false);
LegacyUnit.equal(CaretCandidate.isCaretCandidate($('')[0]), false);
LegacyUnit.equal(CaretCandidate.isCaretCandidate(document.createTextNode(Zwsp.ZWSP)), false);
});
suite.test('isInEditable', function () {
setupHtml('abcX');
LegacyUnit.equal(CaretCandidate.isInEditable($('span span', getRoot())[0].firstChild, getRoot()), false);
LegacyUnit.equal(CaretCandidate.isInEditable($('span span', getRoot())[0], getRoot()), true);
LegacyUnit.equal(CaretCandidate.isInEditable($('span', getRoot())[0], getRoot()), true);
LegacyUnit.equal(CaretCandidate.isInEditable(getRoot().firstChild, getRoot()), true);
});
suite.test('isAtomic', function () {
$.each(['img', 'input', 'textarea', 'hr'], function (index, name) {
LegacyUnit.equal(CaretCandidate.isAtomic(document.createElement(name)), true);
});
LegacyUnit.equal(CaretCandidate.isAtomic(document.createTextNode('text')), false);
LegacyUnit.equal(CaretCandidate.isAtomic($('')[0]), false);
LegacyUnit.equal(CaretCandidate.isAtomic($('X')[0]), true);
LegacyUnit.equal(CaretCandidate.isAtomic(
$('XYZ')[0]), false
);
});
suite.test('isEditableCaretCandidate', function () {
setupHtml('abcxxX');
LegacyUnit.equal(CaretCandidate.isEditableCaretCandidate(getRoot().firstChild, getRoot()), true);
LegacyUnit.equal(CaretCandidate.isEditableCaretCandidate($('b', getRoot())[0]), false);
LegacyUnit.equal(CaretCandidate.isEditableCaretCandidate($('span', getRoot())[0]), true);
LegacyUnit.equal(CaretCandidate.isEditableCaretCandidate($('span span', getRoot())[0]), false);
});
viewBlock.attach();
Pipeline.async({}, suite.toSteps({}), function () {
viewBlock.detach();
success();
}, failure);
});