diff --git a/addons/web/static/src/js/tools/tools.js b/addons/web/static/src/js/tools/tools.js
new file mode 100644
index 00000000000..f886d80d3c5
--- /dev/null
+++ b/addons/web/static/src/js/tools/tools.js
@@ -0,0 +1,22 @@
+odoo.define('web.tools', function (require) {
+"use strict";
+
+/**
+ * Wrapper for deprecated functions that display a warning message.
+ *
+ * @param {Function} fn the deprecated function
+ * @param {string} [message=''] optional message to display
+ * @returns {Function}
+ */
+function deprecated(fn, message) {
+ return function () {
+ console.warn(message || (fn.name + ' is deprecated.'));
+ fn.apply(this, arguments);
+ };
+}
+
+return {
+ deprecated: deprecated,
+};
+
+});
diff --git a/addons/web/static/tests/helpers/test_utils.js b/addons/web/static/tests/helpers/test_utils.js
index 2ecc30b3872..8529cae52fb 100644
--- a/addons/web/static/tests/helpers/test_utils.js
+++ b/addons/web/static/tests/helpers/test_utils.js
@@ -22,6 +22,13 @@ var testUtilsKanban = require('web.test_utils_kanban');
var testUtilsMock = require('web.test_utils_mock');
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);
+};
// 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,
@@ -99,6 +106,19 @@ return $.when(
createView: testUtilsCreate.createView,
createModel: testUtilsCreate.createModel,
createParent: testUtilsCreate.createParent,
+
+ // backward-compatibility
+ addMockEnvironment: deprecated(testUtilsMock.addMockEnvironment, 'mock'),
+ dragAndDrop: deprecated(testUtilsDom.dragAndDrop, 'dom'),
+ fieldsViewGet: deprecated(testUtilsMock.fieldsViewGet, 'mock'),
+ intercept: deprecated(testUtilsMock.intercept, 'mock'),
+ openDatepicker: deprecated(testUtilsDom.openDatepicker, 'dom'),
+ patch: deprecated(testUtilsMock.patch, 'mock'),
+ patchDate: deprecated(testUtilsMock.patchDate, 'mock'),
+ triggerKeypressEvent: deprecated(testUtilsDom.triggerKeypressEvent, 'dom'),
+ triggerMouseEvent: deprecated(testUtilsDom.triggerMouseEvent, 'dom'),
+ triggerPositionalMouseEvent: deprecated(testUtilsDom.triggerPositionalMouseEvent, 'dom'),
+ unpatch: deprecated(testUtilsMock.unpatch, 'mock'),
};
});
diff --git a/addons/web/views/webclient_templates.xml b/addons/web/views/webclient_templates.xml
index 15b4c49dcd6..e7729ab9fad 100644
--- a/addons/web/views/webclient_templates.xml
+++ b/addons/web/views/webclient_templates.xml
@@ -223,6 +223,7 @@
+