import { Pipeline } from '@ephox/agar'; import { LegacyUnit, TinyLoader } from '@ephox/mcagar'; import Env from 'tinymce/core/api/Env'; import HtmlUtils from '../../module/test/HtmlUtils'; import Theme from 'tinymce/themes/modern/Theme'; import { UnitTest } from '@ephox/bedrock'; UnitTest.asynctest('browser.tinymce.util.QuirksWekbitTest', function () { const success = arguments[arguments.length - 2]; const failure = arguments[arguments.length - 1]; const suite = LegacyUnit.createSuite(); Theme(); suite.test('Delete from beginning of P into H1', function (editor) { editor.getBody().innerHTML = '
b
'; LegacyUnit.setSelection(editor, 'p', 0); editor.execCommand('Delete'); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'a
b
'; LegacyUnit.setSelection(editor, 'p:last', 0); editor.execCommand('Delete'); LegacyUnit.equal(HtmlUtils.normalizeHtml(HtmlUtils.cleanHtml(editor.getBody().innerHTML)), 'a
b
'); LegacyUnit.equal(editor.selection.getStart().nodeName, 'P'); }); suite.test('Delete range from middle of H1 to middle of span in P', function (editor) { editor.getBody().innerHTML = 'bcd
'; LegacyUnit.setSelection(editor, 'h1', 1, 'span', 1); editor.execCommand('Delete'); LegacyUnit.equal( HtmlUtils.normalizeHtml(HtmlUtils.cleanHtml(editor.getBody().innerHTML)), 'bc
'; LegacyUnit.setSelection(editor, 'p', 0); editor.execCommand('Delete'); LegacyUnit.equal(editor.getContent(), 'bc
'; LegacyUnit.setSelection(editor, 'p', 0); editor.execCommand('Delete'); LegacyUnit.equal(editor.getContent(), 'bc
'; LegacyUnit.setSelection(editor, 'p', 0); editor.execCommand('Delete'); LegacyUnit.equal(editor.getContent(), 'bc
'); LegacyUnit.equal(editor.selection.getNode().nodeName, 'P'); }); suite.test('Delete from beginning of P with style span inside into H1 with trailing BR', function (editor) { editor.getBody().innerHTML = 'bc
'; LegacyUnit.setSelection(editor, 'p', 0); editor.execCommand('Delete'); LegacyUnit.equal(editor.getContent(), 'b
'; LegacyUnit.setSelection(editor, 'span', 0); editor.execCommand('Delete'); LegacyUnit.equal(editor.getContent(), 'b
'; LegacyUnit.setSelection(editor, 'span', 0); editor.execCommand('Delete'); LegacyUnit.equal(editor.getContent(), 'b
c
a
a
b
'; LegacyUnit.setSelection(editor, 'h1', 1); editor.execCommand('ForwardDelete'); LegacyUnit.equal(editor.getContent(), 'b
'; LegacyUnit.setSelection(editor, 'h1', 1); editor.execCommand('ForwardDelete'); LegacyUnit.equal(editor.getContent(), 'b
'; LegacyUnit.setSelection(editor, 'h1', 1); editor.execCommand('ForwardDelete'); LegacyUnit.equal(editor.getContent(), 'b
'); LegacyUnit.equal(editor.selection.getStart().nodeName, 'H1'); }); suite.test('ForwardDelete from end of H1 to P with style and inline block element', function (editor) { editor.getBody().innerHTML = 'b
'; LegacyUnit.setSelection(editor, 'h1', 1); editor.execCommand('ForwardDelete'); LegacyUnit.equal(editor.getContent(), 'c
'; const rng = editor.selection.getRng(); rng.setStart(editor.$('h1')[0].lastChild, 1); rng.setEnd(editor.$('h1')[0].lastChild, 1); editor.selection.setRng(rng); editor.execCommand('ForwardDelete'); LegacyUnit.equal(HtmlUtils.normalizeHtml(HtmlUtils.cleanHtml(editor.getBody().innerHTML)), 'b
'; LegacyUnit.setSelection(editor, 'h1', 1); editor.execCommand('ForwardDelete'); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'b
'; LegacyUnit.setSelection(editor, 'h1', 1); editor.execCommand('ForwardDelete'); LegacyUnit.equal(editor.getContent(), 'b
'); }); suite.test('ForwardDelete from end of H1 into P with style span inside', function (editor) { editor.getBody().innerHTML = 'bc
'; LegacyUnit.setSelection(editor, 'h1', 1); editor.execCommand('ForwardDelete'); LegacyUnit.equal(editor.getContent(), 'b
'; LegacyUnit.setSelection(editor, 'p', 0); editor.fire('keydown', { keyCode: 8, shiftKey: false, ctrlKey: false, altKey: false, metaKey: false }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'b
'; LegacyUnit.setSelection(editor, 'h1', 1); editor.fire('keydown', { keyCode: 46, shiftKey: false, ctrlKey: false, altKey: false, metaKey: false }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'abc 123
'; LegacyUnit.setSelection(editor, 'p', 7); editor.fire("keydown", { keyCode: 8, ctrlKey: true }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'abc
'); LegacyUnit.equal(editor.selection.getStart().nodeName, 'P'); }); suite.test('Backspace previous line', function (editor) { editor.getBody().innerHTML = 'abc 123
'; LegacyUnit.setSelection(editor, 'p', 7); editor.fire("keydown", { keyCode: 8, metaKey: true }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'abc 123
'; LegacyUnit.setSelection(editor, 'p', 0); editor.fire("keydown", { keyCode: 46, ctrlKey: true }); // Remove nbsp since very old WebKit has an slight issue LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML).replace(' ', ''), '123
'); LegacyUnit.equal(editor.selection.getStart().nodeName, 'P'); }); suite.test('Delete next line', function (editor) { editor.getBody().innerHTML = 'abc 123
'; LegacyUnit.setSelection(editor, 'p', 0); editor.fire("keydown", { keyCode: 46, metaKey: true }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'x
y
'; LegacyUnit.setSelection(editor, 'b', 0, 'b', 1); editor.fire("keypress", { keyCode: 65, charCode: 65 }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'a
y
'); LegacyUnit.equal(editor.selection.getStart().nodeName, 'B'); }); suite.test('Type over partial bold text and keep bold', function (editor) { editor.getBody().innerHTML = 'xy
'; LegacyUnit.setSelection(editor, 'b', 0, 'b', 1); editor.fire("keypress", { keyCode: 65, charCode: 65 }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'ay
'); LegacyUnit.equal(editor.selection.getStart().nodeName, 'B'); }); suite.test('Type over bold text wrapped inside other formats', function (editor) { editor.getBody().innerHTML = '123
'; LegacyUnit.setSelection(editor, 'b', 0, 'b', 1); editor.fire("keypress", { keyCode: 65, charCode: 65 }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), '1a3
'); LegacyUnit.equal(editor.selection.getStart().nodeName, 'B'); }); suite.test('Delete last character in formats', function (editor) { editor.getBody().innerHTML = 'b
'; LegacyUnit.setSelection(editor, 'i', 1); editor.fire("keydown", { keyCode: 8 }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'b
'; LegacyUnit.setSelection(editor, 'i', 0); editor.fire("keydown", { keyCode: 46 }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'a
a
a
a
abc
'; LegacyUnit.setSelection(editor, 'p', 0, 'p', 3); editor.fire('keypress', { charCode: 97 }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'a
'); LegacyUnit.equal(editor.selection.getRng().startContainer.data, 'a'); LegacyUnit.equal(editor.selection.getRng().startOffset, 1); }); */ suite.test('ForwardDelete all contents', function (editor) { editor.getBody().innerHTML = 'abc
'; LegacyUnit.setSelection(editor, 'p', 0, 'p', 3); editor.fire('keydown', { keyCode: 46 }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), 'abc
'; LegacyUnit.setSelection(editor, 'p', 0, 'p', 3); editor.fire('keydown', { keyCode: 8 }); LegacyUnit.equal(HtmlUtils.cleanHtml(editor.getBody().innerHTML), '