diff --git a/addons/web/static/tests/webclient/actions/misc_tests.js b/addons/web/static/tests/webclient/actions/misc_tests.js index fd426dd2341..f33e115a5d0 100644 --- a/addons/web/static/tests/webclient/actions/misc_tests.js +++ b/addons/web/static/tests/webclient/actions/misc_tests.js @@ -6,7 +6,6 @@ import { session } from "@web/session"; import AbstractAction from "web.AbstractAction"; import core from "web.core"; import testUtils from "web.test_utils"; -import Widget from "web.Widget"; import { makeTestEnv } from "../../helpers/mock_env"; import { click, @@ -22,7 +21,6 @@ import { getActionManagerServerData, setupWebClientRegistries, } from "./../helpers"; -import * as cpHelpers from "@web/../tests/search/helpers"; import { listView } from "@web/views/list/list_view"; import { companyService } from "@web/webclient/company_service"; @@ -205,177 +203,6 @@ QUnit.module("ActionManager", (hooks) => { assert.deepEqual(action.context, actionParams); }); - QUnit.test("no widget memory leaks when doing some action stuff", async function (assert) { - assert.expect(1); - let delta = 0; - testUtils.mock.patch(Widget, { - init: function () { - delta++; - this._super.apply(this, arguments); - }, - destroy: function () { - delta--; - this._super.apply(this, arguments); - }, - }); - const webClient = await createWebClient({ serverData }); - await doAction(webClient, 8); - const n = delta; - await doAction(webClient, 4); - // kanban view is loaded, switch to list view - await cpHelpers.switchView(target, "list"); - await legacyExtraNextTick(); - // open a record in form view - await testUtils.dom.click(target.querySelector(".o_list_view .o_data_row")); - await legacyExtraNextTick(); - // go back to action 7 in breadcrumbs - await testUtils.dom.click(target.querySelector(".o_control_panel .breadcrumb a")); - await legacyExtraNextTick(); - assert.strictEqual(delta, n, "should have properly destroyed all other widgets"); - testUtils.mock.unpatch(Widget); - }); - - QUnit.test("no widget memory leaks when executing actions in dialog", async function (assert) { - assert.expect(1); - let delta = 0; - testUtils.mock.patch(Widget, { - init: function () { - delta++; - this._super.apply(this, arguments); - }, - destroy: function () { - if (!this.isDestroyed()) { - delta--; - } - this._super.apply(this, arguments); - }, - }); - const webClient = await createWebClient({ serverData }); - const n = delta; - await doAction(webClient, 5); - await doAction(webClient, { type: "ir.actions.act_window_close" }); - assert.strictEqual(delta, n, "should have properly destroyed all widgets"); - testUtils.mock.unpatch(Widget); - }); - - QUnit.test( - "no memory leaks when executing an action while switching view", - async function (assert) { - assert.expect(1); - let def; - let delta = 0; - testUtils.mock.patch(Widget, { - init: function () { - delta += 1; - this._super.apply(this, arguments); - }, - destroy: function () { - delta -= 1; - this._super.apply(this, arguments); - }, - }); - const mockRPC = async function (route, args) { - if (args && args.method === "read") { - await Promise.resolve(def); - } - }; - const webClient = await createWebClient({ serverData, mockRPC }); - await doAction(webClient, 4); - const n = delta; - await doAction(webClient, 3, { clearBreadcrumbs: true }); - // switch to the form view (this request is blocked) - def = testUtils.makeTestPromise(); - await testUtils.dom.click(target.querySelector(".o_list_view .o_data_row")); - // execute another action meanwhile (don't block this request) - await doAction(webClient, 4, { clearBreadcrumbs: true }); - // unblock the switch to the form view in action 3 - def.resolve(); - await testUtils.nextTick(); - assert.strictEqual(n, delta, "all widgets of action 3 should have been destroyed"); - testUtils.mock.unpatch(Widget); - } - ); - - QUnit.test( - "no memory leaks when executing an action while loading views", - async function (assert) { - assert.expect(1); - let def; - let delta = 0; - testUtils.mock.patch(Widget, { - init: function () { - delta += 1; - this._super.apply(this, arguments); - }, - destroy: function () { - delta -= 1; - this._super.apply(this, arguments); - }, - }); - const mockRPC = async function (route, args) { - if (args && args.method === "get_views") { - await Promise.resolve(def); - } - }; - const webClient = await createWebClient({ serverData, mockRPC }); - // execute action 4 to know the number of widgets it instantiates - await doAction(webClient, 4); - const n = delta; - // execute a first action (its 'get_views' RPC is blocked) - def = testUtils.makeTestPromise(); - doAction(webClient, 3, { clearBreadcrumbs: true }); - await testUtils.nextTick(); - await legacyExtraNextTick(); - // execute another action meanwhile (and unlock the RPC) - doAction(webClient, 4, { clearBreadcrumbs: true }); - def.resolve(); - await testUtils.nextTick(); - await legacyExtraNextTick(); - assert.strictEqual(n, delta, "all widgets of action 3 should have been destroyed"); - testUtils.mock.unpatch(Widget); - } - ); - - QUnit.test( - "no memory leaks when executing an action while loading data of default view", - async function (assert) { - assert.expect(1); - let def; - let delta = 0; - testUtils.mock.patch(Widget, { - init: function () { - delta += 1; - this._super.apply(this, arguments); - }, - destroy: function () { - delta -= 1; - this._super.apply(this, arguments); - }, - }); - const mockRPC = async function (route) { - if (route === "/web/dataset/search_read") { - await Promise.resolve(def); - } - }; - const webClient = await createWebClient({ serverData, mockRPC }); - // execute action 4 to know the number of widgets it instantiates - await doAction(webClient, 4); - const n = delta; - // execute a first action (its 'search_read' RPC is blocked) - def = testUtils.makeTestPromise(); - doAction(webClient, 3, { clearBreadcrumbs: true }); - await testUtils.nextTick(); - await legacyExtraNextTick(); - // execute another action meanwhile (and unlock the RPC) - doAction(webClient, 4, { clearBreadcrumbs: true }); - def.resolve(); - await testUtils.nextTick(); - await legacyExtraNextTick(); - assert.strictEqual(n, delta, "all widgets of action 3 should have been destroyed"); - testUtils.mock.unpatch(Widget); - } - ); - QUnit.test('action with "no_breadcrumbs" set to true', async function (assert) { serverData.actions[4].context = { no_breadcrumbs: true }; const webClient = await createWebClient({ serverData });