diff options
Diffstat (limited to 'addons/web/static/tests/helpers/test_utils.js')
| -rw-r--r-- | addons/web/static/tests/helpers/test_utils.js | 85 |
1 files changed, 82 insertions, 3 deletions
diff --git a/addons/web/static/tests/helpers/test_utils.js b/addons/web/static/tests/helpers/test_utils.js index 2897b02214c..ccf5d8daf6b 100644 --- a/addons/web/static/tests/helpers/test_utils.js +++ b/addons/web/static/tests/helpers/test_utils.js @@ -11,7 +11,9 @@ odoo.define('web.test_utils', function (require) { */ var ajax = require('web.ajax'); +var concurrency = require('web.concurrency'); var core = require('web.core'); +var relationalFields = require('web.relational_fields'); var session = require('web.session'); var testUtilsCreate = require('web.test_utils_create'); var testUtilsDom = require('web.test_utils_dom'); @@ -25,22 +27,89 @@ var testUtilsModal = require('web.test_utils_modal'); var testUtilsPivot = require('web.test_utils_pivot'); var tools = require('web.tools'); + function deprecated(fn, type) { var msg = `Helper 'testUtils.${fn.name}' is deprecated. ` + `Please use 'testUtils.${type}.${fn.name}' instead.`; return tools.deprecated(fn, msg); } +/** + * Helper function, make a promise with a public resolve function. Note that + * this is not standard and should not be used outside of tests... + * + * @returns {Promise + resolve and reject function} + */ +function makeTestPromise() { + var resolve; + var reject; + var promise = new Promise(function (_resolve, _reject) { + resolve = _resolve; + reject = _reject; + }); + promise.resolve = function () { + resolve.apply(null, arguments); + return promise; + }; + promise.reject = function () { + reject.apply(null, arguments); + return promise; + }; + return promise; +} + +/** + * Make a promise with public resolve and reject functions (see + * @makeTestPromise). Perform an assert.step when the promise is + * resolved/rejected. + * + * @param {Object} assert instance object with the assertion methods + * @param {function} assert.step + * @param {string} str message to pass to assert.step + * @returns {Promise + resolve and reject function} + */ +function makeTestPromiseWithAssert(assert, str) { + var prom = makeTestPromise(); + prom.then(() => assert.step('ok ' + str)).catch(function () {}); + prom.catch(() => assert.step('ko ' + str)); + return prom; +} + +/** + * Create a new promise that can be waited by the caller in order to execute + * code after the next microtask tick and before the next jobqueue tick. + * + * @return {Promise} an already fulfilled promise + */ +async function nextMicrotaskTick() { + return Promise.resolve(); +} + +/** + * Returns a promise that is resolved in the next jobqueue tick so that the + * caller can wait on it in order to execute code in the next jobqueue tick. + * + * @return {Promise} a promise that will be fulfilled in the next jobqueue tick + */ +async function nextTick() { + return concurrency.delay(0); +} + // Loading static files cannot be properly simulated when their real content is // really needed. This is the case for static XML files so we load them here, // before starting the qunit test suite. // (session.js is in charge of loading the static xml bundle and we also have // to load xml files that are normally lazy loaded by specific widgets). -return $.when( +return Promise.all([ session.is_bound, ajax.loadXML('/web/static/src/xml/dialog.xml', core.qweb) -).then(function () { +]).then(function () { setTimeout(function () { + // jquery autocomplete refines the search in a setTimeout() parameterized + // with a delay, so we force this delay to 0 s.t. the dropdown is filtered + // directly on the next tick + relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY = 0; + // this is done with the hope that tests are // only started all together... QUnit.start(); @@ -53,6 +122,7 @@ return $.when( patchDate: testUtilsMock.patchDate, unpatch: testUtilsMock.unpatch, fieldsViewGet: testUtilsMock.fieldsViewGet, + patchSetTimeout: testUtilsMock.patchSetTimeout, }, dom: { triggerKeypressEvent: testUtilsDom.triggerKeypressEvent, @@ -63,6 +133,7 @@ return $.when( click: testUtilsDom.click, clickFirst: testUtilsDom.clickFirst, clickLast: testUtilsDom.clickLast, + triggerEvents: testUtilsDom.triggerEvents, }, form: { clickEdit: testUtilsForm.clickEdit, @@ -99,6 +170,9 @@ return $.when( editInput: testUtilsFields.editInput, editSelect: testUtilsFields.editSelect, editAndTrigger: testUtilsFields.editAndTrigger, + triggerKey: testUtilsFields.triggerKey, + triggerKeydown: testUtilsFields.triggerKeydown, + triggerKeyup: testUtilsFields.triggerKeyup, }, file: { createFile: testUtilsFile.createFile, @@ -108,11 +182,16 @@ return $.when( createActionManager: testUtilsCreate.createActionManager, createDebugManager: testUtilsCreate.createDebugManager, - createAsyncView: testUtilsCreate.createAsyncView, + createAsyncView: testUtilsCreate.createView, + createCalendarView: testUtilsCreate.createCalendarView, createControlPanel: testUtilsCreate.createControlPanel, createView: testUtilsCreate.createView, createModel: testUtilsCreate.createModel, createParent: testUtilsCreate.createParent, + makeTestPromise: makeTestPromise, + makeTestPromiseWithAssert: makeTestPromiseWithAssert, + nextMicrotaskTick: nextMicrotaskTick, + nextTick: nextTick, // backward-compatibility addMockEnvironment: deprecated(testUtilsMock.addMockEnvironment, 'mock'), |
