import { Assert, UnitTest } from '@ephox/bedrock-client'; import { DomUniverse, type Universe } from '@ephox/boss'; import { Arr } from '@ephox/katamari'; import { Hierarchy, Insert, InsertAll, Remove, Replication, SugarBody, SugarElement } from '@ephox/sugar'; import * as LeftBlock from 'ephox/robin/api/general/LeftBlock'; UnitTest.test('LeftBlockTest', () => { const universe = DomUniverse(); const editor = SugarElement.fromTag('div'); const reset = () => { editor.dom.innerHTML = '

alphacathellowordhithere

'; }; const setup = () => { Insert.append(SugarBody.body(), editor); }; const cleanup = () => { Remove.remove(editor); }; const check = (expected: string, path: number[], method: (universe: Universe, item: E) => E[]) => { reset(); const ele = Hierarchy.follow(editor, path); Assert.eq('Could not find element at path: ' + path, true, ele.isSome()); ele.each((start) => { const group = method(universe, start); const clones = Arr.map(group, Replication.deep); const div = SugarElement.fromTag('div'); InsertAll.append(div, clones); Assert.eq('', expected, div.dom.innerHTML); }); }; setup(); Arr.each([ // I'm only targeting text nodes here ... this is probably a limitation in the current implementation. { expected: 'alpha', path: [ 0, 0 ], method: LeftBlock.top }, { expected: 'alpha', path: [ 0, 0 ], method: LeftBlock.all }, { expected: 'alphacathello', path: [ 0, 2, 0 ], method: LeftBlock.top }, { expected: 'alphacathello', path: [ 0, 2, 0 ], method: LeftBlock.all }, { expected: 'alphacathelloword', path: [ 0, 2, 1, 0 ], method: LeftBlock.top }, { expected: 'alphacathelloword', path: [ 0, 2, 1, 0 ], method: LeftBlock.all }, { expected: 'alphacathellowordhi', path: [ 0, 2, 2 ], method: LeftBlock.top }, { expected: 'alphacathellowordhi', path: [ 0, 2, 2 ], method: LeftBlock.all }, { expected: 'alphacathellowordhithere', path: [ 0, 3 ], method: LeftBlock.top }, { expected: 'alphacathellowordhithere', path: [ 0, 3 ], method: LeftBlock.all } ], (item) => { check(item.expected, item.path, item.method); }); cleanup(); });