From fa927315e5f0616b2a2287ce56376f65f4a9d37a Mon Sep 17 00:00:00 2001 From: Thanh Dodeur Date: Thu, 25 Jul 2019 11:58:33 +0000 Subject: [PATCH] [IMP] web: adds multi file drag and drop support This commit adds a function to mock multi-file drops. Task: #2002553 closes odoo/odoo#35435 Signed-off-by: Martin Geubelle (mge) --- addons/web/static/tests/helpers/test_utils.js | 1 + .../static/tests/helpers/test_utils_file.js | 25 +++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/addons/web/static/tests/helpers/test_utils.js b/addons/web/static/tests/helpers/test_utils.js index 460bd9f4f78..90a581e7b33 100644 --- a/addons/web/static/tests/helpers/test_utils.js +++ b/addons/web/static/tests/helpers/test_utils.js @@ -179,6 +179,7 @@ return Promise.all([ createFile: testUtilsFile.createFile, dragoverFile: testUtilsFile.dragoverFile, dropFile: testUtilsFile.dropFile, + dropFiles: testUtilsFile.dropFiles, }, createActionManager: testUtilsCreate.createActionManager, diff --git a/addons/web/static/tests/helpers/test_utils_file.js b/addons/web/static/tests/helpers/test_utils_file.js index e5b68a28e0b..df577347bb0 100644 --- a/addons/web/static/tests/helpers/test_utils_file.js +++ b/addons/web/static/tests/helpers/test_utils_file.js @@ -17,17 +17,17 @@ odoo.define('web.test_utils_file', function () { //------------------------------------------------------------------------------ /** - * Create a fake object 'dataTransfer', linked to a file, which is passed to + * Create a fake object 'dataTransfer', linked to some files, which is passed to * drag and drop events. * - * @param {Object} file + * @param {Object[]} files * @returns {Object} */ -function _createFakeDataTransfer(file) { +function _createFakeDataTransfer(files) { return { dropEffect: 'all', effectAllowed: 'all', - files: [file], + files, getData: function () { return file; }, @@ -96,7 +96,21 @@ function dragoverFile($el, file) { function dropFile($el, file) { var ev = new Event('drop', { bubbles: true, }); Object.defineProperty(ev, 'dataTransfer', { - value: _createFakeDataTransfer(file), + value: _createFakeDataTransfer([file]), + }); + $el[0].dispatchEvent(ev); +} + +/** + * Drop some files on a DOM element. + * + * @param {$.Element} $el + * @param {Object[]} files must have been created beforehand (@see createFile) + */ +function dropFiles($el, files) { + var ev = new Event('drop', { bubbles: true, }); + Object.defineProperty(ev, 'dataTransfer', { + value: _createFakeDataTransfer(files), }); $el[0].dispatchEvent(ev); } @@ -109,6 +123,7 @@ return { createFile: createFile, dragoverFile: dragoverFile, dropFile: dropFile, + dropFiles, }; });