From 0a4fcbfb68e6afdc2faad73ff0bd54ef88cdf3db Mon Sep 17 00:00:00 2001 From: David Monjoie Date: Mon, 1 Aug 2022 11:49:45 +0000 Subject: [PATCH] [FIX] web_editor: fix insertText test util for multiple characters task-2858621 X-original-commit: 308a039d96e709bc0ef27ba77af20abfde881ea3 Part-of: odoo/odoo#97297 --- .../src/js/editor/odoo-editor/test/utils.js | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/addons/web_editor/static/src/js/editor/odoo-editor/test/utils.js b/addons/web_editor/static/src/js/editor/odoo-editor/test/utils.js index 3bd2069a7fb..4345111c8f0 100644 --- a/addons/web_editor/static/src/js/editor/odoo-editor/test/utils.js +++ b/addons/web_editor/static/src/js/editor/odoo-editor/test/utils.js @@ -459,14 +459,23 @@ export async function createLink(editor, content) { } export async function insertText(editor, text) { - // We create and dispatch an event to mock the insert Text. - // Unfortunatly those Event are flagged `isTrusted: false`. - // So we have no choice and need to detect them inside the Editor. - // But it's the closest to real Browser we can go. - triggerEvent(editor.editable, 'input', { - inputType: 'insertText', - data: text, - }); + // Create and dispatch events to mock text insertion. Unfortunatly, the + // events will be flagged `isTrusted: false` by the browser, requiring + // the editor to detect them since they would not trigger the default + // browser behavior otherwise. + for (const char of text) { + // KeyDownEvent is required to trigger deleteRange. + triggerEvent(editor.editable, 'keydown', { key: char }); + // KeyPressEvent is not required but is triggered like in the browser. + triggerEvent(editor.editable, 'keypress', { key: char }); + // InputEvent is required to simulate the insert text. + triggerEvent(editor.editable, 'input', { + inputType: 'insertText', + data: char, + }); + // KeyUpEvent is not required but is triggered like the browser would. + triggerEvent(editor.editable, 'keyup', { key: char }); + } } export function undo(editor) {