import { describe, it } from '@ephox/bedrock-client'; import { Arr } from '@ephox/katamari'; import { SelectorFind, SugarElement } from '@ephox/sugar'; import { assert } from 'chai'; import * as CaretCandidate from 'tinymce/core/caret/CaretCandidate'; import * as Zwsp from 'tinymce/core/text/Zwsp'; import * as ViewBlock from '../../module/test/ViewBlock'; describe('browser.tinymce.core.CaretCandidateTest', () => { const viewBlock = ViewBlock.bddSetup(); const getRoot = () => SugarElement.fromDom(viewBlock.get()); const setupHtml = viewBlock.update; it('isCaretCandidate', () => { Arr.each('img input textarea hr table iframe video audio object'.split(' '), (name) => { assert.isTrue(CaretCandidate.isCaretCandidate(document.createElement(name))); }); assert.isTrue(CaretCandidate.isCaretCandidate(document.createTextNode('text'))); assert.isTrue(CaretCandidate.isCaretCandidate(SugarElement.fromHtml('').dom)); assert.isFalse(CaretCandidate.isCaretCandidate(SugarElement.fromHtml('').dom)); assert.isTrue(CaretCandidate.isCaretCandidate(SugarElement.fromHtml('
').dom)); assert.isTrue(CaretCandidate.isCaretCandidate(SugarElement.fromHtml('
X
').dom)); assert.isFalse(CaretCandidate.isCaretCandidate(SugarElement.fromHtml('').dom)); assert.isFalse(CaretCandidate.isCaretCandidate(SugarElement.fromHtml('').dom)); assert.isFalse(CaretCandidate.isCaretCandidate(document.createComment('text'))); assert.isFalse(CaretCandidate.isCaretCandidate(SugarElement.fromHtml('').dom)); assert.isFalse(CaretCandidate.isCaretCandidate(document.createTextNode(Zwsp.ZWSP))); }); it('isInEditable', () => { setupHtml('abcX'); assert.isFalse(CaretCandidate.isInEditable(SelectorFind.descendant(getRoot(), 'span span').getOrDie().dom.firstChild as Node, getRoot().dom)); assert.isTrue(CaretCandidate.isInEditable(SelectorFind.descendant(getRoot(), 'span span').getOrDie().dom, getRoot().dom)); assert.isTrue(CaretCandidate.isInEditable(SelectorFind.descendant(getRoot(), 'span').getOrDie().dom, getRoot().dom)); assert.isTrue(CaretCandidate.isInEditable(getRoot().dom.firstChild as Node, getRoot().dom)); }); it('isAtomic', () => { Arr.each([ 'img', 'input', 'textarea', 'hr' ], (name) => { assert.isTrue(CaretCandidate.isAtomic(document.createElement(name))); }); assert.isFalse(CaretCandidate.isAtomic(document.createTextNode('text'))); assert.isFalse(CaretCandidate.isAtomic(SugarElement.fromHtml('
X
').dom)); assert.isTrue(CaretCandidate.isAtomic(SugarElement.fromHtml('X').dom)); assert.isFalse(CaretCandidate.isAtomic(SugarElement.fromHtml('XYZ').dom)); }); it('isEditableCaretCandidate', () => { setupHtml('abcxxX'); assert.isTrue(CaretCandidate.isEditableCaretCandidate(getRoot().dom.firstChild, getRoot().dom)); assert.isFalse(CaretCandidate.isEditableCaretCandidate(SelectorFind.descendant(getRoot(), 'b').getOrDie().dom)); assert.isTrue(CaretCandidate.isEditableCaretCandidate(SelectorFind.descendant(getRoot(), 'span').getOrDie().dom)); assert.isFalse(CaretCandidate.isEditableCaretCandidate(SelectorFind.descendant(getRoot(), 'span span').getOrDie().dom)); }); });