diff options
| author | Christophe Simonis <chs@odoo.com> | 2018-09-14 16:00:17 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2018-09-14 16:00:17 +0200 |
| commit | 9c77066f345360429a0920ca4d17af1f84a7ebea (patch) | |
| tree | 469494018b2da134a8ddb5f51930566c1d39bf8e /addons/web/static/tests/core/widget_tests.js | |
| parent | 5c11e0d6f9dcc2161735ce3fb93430b767d54cf9 (diff) | |
| parent | 6c103589c15dcf97603f3e2909871cb1fefd6484 (diff) | |
[MERGE] forward port branch saas-11.4 up to 6c103589c15
Diffstat (limited to 'addons/web/static/tests/core/widget_tests.js')
| -rw-r--r-- | addons/web/static/tests/core/widget_tests.js | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/addons/web/static/tests/core/widget_tests.js b/addons/web/static/tests/core/widget_tests.js index 19e72cb97b6..9510079e380 100644 --- a/addons/web/static/tests/core/widget_tests.js +++ b/addons/web/static/tests/core/widget_tests.js @@ -1,10 +1,12 @@ odoo.define('web.widget_tests', function (require) { "use strict"; +var AjaxService = require('web.AjaxService'); var concurrency = require('web.concurrency'); var core = require('web.core'); var QWeb = require('web.QWeb'); var Widget = require('web.Widget'); +var testUtils = require('web.test_utils'); QUnit.module('core', {}, function () { @@ -377,16 +379,47 @@ QUnit.module('core', {}, function () { }); QUnit.test("calling _rpc on destroyed widgets", function (assert) { - assert.expect(1); + assert.expect(3); + + var def; + var parent = new Widget(); + testUtils.addMockEnvironment(parent, { + session: { + rpc: function () { + def = $.Deferred(); + def.abort = def.reject; + return def; + }, + }, + services: [AjaxService], + }); + var widget = new Widget(parent); + + widget._rpc({route: '/a/route'}).then(function () { + assert.ok(true, "The ajax call should be resolve"); + }); + def.resolve(); + def = null; - var widget = new Widget(); + widget._rpc({route: '/a/route'}).always(function () { + throw Error("Calling _rpc on a destroyed widget should return a " + + "deferred that is never resolved nor rejected"); + }); widget.destroy(); + def.resolve(); + def = null; + widget._rpc({route: '/a/route'}).always(function () { throw Error("Calling _rpc on a destroyed widget should return a " + "deferred that is never resolved nor rejected"); }); + assert.ok(!def, + "The trigger_up is not performed and the call returns a deferred "+ + "never resolved nor rejected"); + assert.ok(true, "there should be no crash when calling _rpc on a destroyed widget"); + parent.destroy(); }); QUnit.test('start is not called when widget is destroyed', function (assert) { |
