summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2017-12-01 11:12:20 +0100
committerAaron Bohy <aab@odoo.com>2017-12-04 10:01:22 +0100
commit595a405b767eed34f90d48e5f04dff338cc34c2f (patch)
tree592c0edcd2d3eca22ba933e614c17203ca62aae1
parent5fd72753c632b76b97a3653f3ad2bafa0e2cd7f3 (diff)
[IMP] web: tests: patch _.debounce and _.throttle
... to allow them to be called several times without having to wait for the delays. This was already done for _.throttle, by default for the whole test suite, and it couldn't be parameterized in individual tests. This was enough for _.throttle, but the same solution couldn't be applied for _.debounce, because some tests actually test that some handlers are correctly debounced. Those function are now patched in addMockEnvironment, and two parameters can be set: 'debounce' (default: true) and 'throttle' (default: false).
-rw-r--r--addons/web/static/tests/helpers/qunit_config.js12
-rw-r--r--addons/web/static/tests/helpers/test_utils.js29
2 files changed, 26 insertions, 15 deletions
diff --git a/addons/web/static/tests/helpers/qunit_config.js b/addons/web/static/tests/helpers/qunit_config.js
index 8d2b287ab88..641d3a6f09b 100644
--- a/addons/web/static/tests/helpers/qunit_config.js
+++ b/addons/web/static/tests/helpers/qunit_config.js
@@ -41,17 +41,6 @@ QUnit.config.hidepassed = (window.location.href.match(/[?&]testId=/) === null);
var sortButtonAppended = false;
/**
- * We override the _.throttle function to avoid the delay in order to be able to
- * chain multiple actions using throttle in the same test.
- */
-QUnit.begin(function () {
- this._initialThrottle = _.throttle;
- var self = this;
- _.throttle = function (func, wait, options) {
- return self._initialThrottle(func, 0, options);
- };
-});
-/**
* This is the way the testing framework knows that tests passed or failed. It
* only look in the phantomJS console and check if there is a ok or an error.
*
@@ -67,7 +56,6 @@ QUnit.done(function(result) {
if (!sortButtonAppended) {
_addSortButton();
}
- _.throttle = this._initialThrottle;
});
/**
diff --git a/addons/web/static/tests/helpers/test_utils.js b/addons/web/static/tests/helpers/test_utils.js
index 0643b3e6a6b..37a98de1746 100644
--- a/addons/web/static/tests/helpers/test_utils.js
+++ b/addons/web/static/tests/helpers/test_utils.js
@@ -228,6 +228,11 @@ function createAsyncView(params) {
* up in the init process of the view, because there are no other way to do it
* after this method returns. Some events ('call_service', "load_views",
* "get_session", "load_filters") have a special treatment beforehand.
+ * @param {boolean} [debounce=true] set to false to completely remove the
+ * debouncing, forcing the handler to be called directly (not on the next
+ * execution stack, like it does with delay=0).
+ * @param {boolean} [throttle=false] set to true to keep the throttling, which
+ * is completely removed by default.
*
* @returns {MockServer} the instance of the mock server, created by this
* function. It is necessary for createAsyncView so that method can call some
@@ -250,9 +255,9 @@ function addMockEnvironment(widget, params) {
debug: params.debug,
});
// make sure the debounce value for input fields is set to 0
- var initialDebounce = DebouncedField.prototype.DEBOUNCE;
+ var initialDebounceValue = DebouncedField.prototype.DEBOUNCE;
DebouncedField.prototype.DEBOUNCE = params.fieldDebounce || 0;
- var initialSession, initialConfig, initialParameters;
+ var initialSession, initialConfig, initialParameters, initialDebounce, initialThrottle;
initialSession = _.extend({}, session);
session.getTZOffset = function () {
return 0; // by default, but may be overriden in specific tests
@@ -274,6 +279,18 @@ function addMockEnvironment(widget, params) {
initialParameters = _.extend({}, core._t.database.parameters);
_.extend(core._t.database.parameters, params.translateParameters);
}
+ if (params.debounce === false) {
+ initialDebounce = _.debounce;
+ _.debounce = function (func) {
+ return func;
+ };
+ }
+ if (!('throttle' in params) || !params.throttle) {
+ initialThrottle = _.throttle;
+ _.throttle = function (func) {
+ return func;
+ };
+ }
var widgetDestroy = widget.destroy;
widget.destroy = function () {
@@ -281,7 +298,13 @@ function addMockEnvironment(widget, params) {
// widget is destroyed, at the end of each test to avoid collisions
core.bus.trigger('clear_cache');
- DebouncedField.prototype.DEBOUNCE = initialDebounce;
+ DebouncedField.prototype.DEBOUNCE = initialDebounceValue;
+ if (params.debounce === false) {
+ _.debounce = initialDebounce;
+ }
+ if (!('throttle' in params) || !params.throttle) {
+ _.throttle = initialThrottle;
+ }
var key;
if ('session' in params) {