[FIX] web: correctly destroy owl renderer

d06e67e748 introduces tools to use owl
renderer in a view. However, this owl renderer is never destroyed.
This commit fixes this issue.

Task-ID 2171436
This commit is contained in:
Pierre Rousseau
2020-01-14 08:38:24 +00:00
parent 1b7d26c6fb
commit a44d7722bc
2 changed files with 51 additions and 0 deletions
@@ -11,6 +11,14 @@ var ControllerAdapter = AbstractController.extend({
this.renderer.__callWillUnmount();
},
/**
* @override
*/
destroy: function () {
this._super.apply(this, arguments);
this.renderer.destroy();
},
/**
* @override
* */
@@ -1,10 +1,15 @@
odoo.define("base.abstract_controller_tests", function (require) {
"use strict";
const { xml } = owl.tags;
var testUtils = require("web.test_utils");
var createView = testUtils.createView;
var BasicView = require("web.BasicView");
var BasicRenderer = require("web.BasicRenderer");
const AbstractRenderer = require('web.AbstractRendererOwl');
const ControllerAdapter = require('web.ControllerAdapter');
const RendererWrapper = require('web.RendererWrapper');
function getHtmlRenderer(html) {
return BasicRenderer.extend({
@@ -14,6 +19,21 @@ function getHtmlRenderer(html) {
}
});
}
function getOwlView(owlRenderer, viewType) {
viewType = viewType || "test";
return BasicView.extend({
viewType: viewType,
config: _.extend({}, BasicView.prototype.config, {
Renderer: owlRenderer,
Controller: ControllerAdapter.extend({})
}),
getRenderer() {
return new RendererWrapper(null, {}, this.config.Renderer);
}
});
}
function getHtmlView(html, viewType) {
viewType = viewType || "test";
return BasicView.extend({
@@ -78,5 +98,28 @@ QUnit.module("Views", {
view.destroy();
}
);
QUnit.test('OWL Renderer correctly destroyed', async function (assert) {
assert.expect(2);
class Renderer extends AbstractRenderer {
__destroy() {
assert.step("destroy");
super.__destroy();
}
}
Renderer.template = xml`<div>Test</div>`;
var view = await createView({
View: getOwlView(Renderer, "test"),
data: this.data,
model: "test_model",
arch: "<test/>",
});
view.destroy();
assert.verifySteps(["destroy"]);
});
});
});