summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/views/form_benchmarks.js
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2020-07-10 16:54:22 +0000
committerAaron Bohy <aab@odoo.com>2020-07-16 07:03:05 +0000
commit12cc5fd0ccd7ae2981d07a59d5ccc6451b3d0d52 (patch)
tree8f6da61d301c1a1c6caa66a2313831cf0af494cb /addons/web/static/tests/views/form_benchmarks.js
parent6f47bfd91677a2ad58e11d67418cc76ab566609c (diff)
[IMP] web: benchmark: revive benchmark suite
The benchmark suite has been broken for a while, by several refactorings (e.g. use of native Promise). This commit makes it work again. We do not use it much, but maybe we should as it can be useful to track changes (mostly in view renderers) that impact performances.
Diffstat (limited to 'addons/web/static/tests/views/form_benchmarks.js')
-rw-r--r--addons/web/static/tests/views/form_benchmarks.js168
1 files changed, 86 insertions, 82 deletions
diff --git a/addons/web/static/tests/views/form_benchmarks.js b/addons/web/static/tests/views/form_benchmarks.js
index efd12741d66..b65e8a4ccce 100644
--- a/addons/web/static/tests/views/form_benchmarks.js
+++ b/addons/web/static/tests/views/form_benchmarks.js
@@ -1,94 +1,98 @@
odoo.define('web.form_benchmarks', function (require) {
-"use strict";
+ "use strict";
-var FormView = require('web.FormView');
-var testUtils = require('web.test_utils');
+ const FormView = require('web.FormView');
+ const testUtils = require('web.test_utils');
-var createView = testUtils.createView;
+ const { createView } = testUtils;
-QUnit.module('Form View', {
- beforeEach: function () {
- this.data = {
- foo: {
- fields: {
- many2many: { string: "bar", type: "many2many", relation: 'bar'},
+ QUnit.module('Form View', {
+ beforeEach: function () {
+ this.data = {
+ foo: {
+ fields: {
+ foo: {string: "Foo", type: "char"},
+ many2many: { string: "bar", type: "many2many", relation: 'bar'},
+ },
+ records: [
+ { id: 1, foo: "bar", many2many: []},
+ ],
+ onchanges: {}
},
- records: [
- { id: 1, many2many: []},
- ],
- onchanges: {}
- },
- bar: {
- fields: {
- char: {string: "char", type: "char"},
- many2many: { string: "pokemon", type: "many2many", relation: 'pokemon'},
+ bar: {
+ fields: {
+ char: {string: "char", type: "char"},
+ many2many: { string: "pokemon", type: "many2many", relation: 'pokemon'},
+ },
+ records: [],
+ onchanges: {}
},
- records: [],
- onchanges: {}
- },
- pokemon: {
- fields: {
- name: {string: "Name", type: "char"},
+ pokemon: {
+ fields: {
+ name: {string: "Name", type: "char"},
+ },
+ records: [],
+ onchanges: {}
},
- records: [],
- onchanges: {}
- },
- };
- this.arch = null;
- this.run = function (assert, done, cb) {
- var data = this.data;
- var arch = this.arch;
- new Benchmark.Suite({})
- .add('form', function () {
- var list = createView({
- View: FormView,
- model: 'foo',
- data: data,
- arch: arch,
- res_id: 1,
- });
- if (cb) {
- cb(list);
- }
- list.destroy();
- })
- .on('cycle', function(event) {
- assert.ok(true, String(event.target));
- })
- .on('complete', done)
- .run({ 'async': true });
- };
- }
-}, function () {
- QUnit.test('x2many with 250 rows, 2 fields (with many2many_tags, and modifiers), onchanges, and edition', function (assert) {
- var done = assert.async();
- assert.expect(1);
+ };
+ this.arch = null;
+ this.run = function (assert, viewParams, cb) {
+ const data = this.data;
+ const arch = this.arch;
+ return new Promise(resolve => {
+ new Benchmark.Suite({})
+ .add('form', {
+ defer: true,
+ fn: async (deferred) => {
+ const form = await createView(Object.assign({
+ View: FormView,
+ model: 'foo',
+ data,
+ arch,
+ }, viewParams));
+ if (cb) {
+ await cb(form);
+ }
+ form.destroy();
+ deferred.resolve();
+ },
+ })
+ .on('cycle', event => {
+ assert.ok(true, String(event.target));
+ })
+ .on('complete', resolve)
+ .run({ async: true });
+ });
+ };
+ }
+ }, function () {
+ QUnit.test('x2many with 250 rows, 2 fields (with many2many_tags, and modifiers), onchanges, and edition', function (assert) {
+ assert.expect(1);
- this.data.foo.onchanges.many2many = function (obj) {
- obj.many2many = [5].concat(obj.many2many);
- };
- for (var i = 2; i < 500; i) {
- this.data.bar.records.push({
- id: i,
- char: "automated data",
+ this.data.foo.onchanges.many2many = function (obj) {
+ obj.many2many = [5].concat(obj.many2many);
+ };
+ for (let i = 2; i < 500; i++) {
+ this.data.bar.records.push({
+ id: i,
+ char: "automated data",
+ });
+ this.data.foo.records[0].many2many.push(i);
+ }
+ this.arch = `
+ <form>
+ <field name="many2many">
+ <tree editable="top" limit="250">
+ <field name="char"/>
+ <field name="many2many" widget="many2many_tags" attrs="{'readonly': [('char', '==', 'toto')]}"/>
+ </tree>
+ </field>
+ </form>`;
+ return this.run(assert, { res_id: 1 }, async form => {
+ await testUtils.form.clickEdit(form);
+ await testUtils.dom.click(form.$('.o_data_cell:first'));
+ await testUtils.fields.editInput(form.$('input:first'), "tralala");
});
- this.data.foo.records[0].many2many.push(i);
- }
- this.arch =
- '<form string="Partners">' +
- '<field name="many2many">' +
- '<tree editable="top" limit="250">' +
- '<field name="char"/>' +
- '<field name="many2many" widget="many2many_tags" attrs="{\'readonly\': [(\'char\', \'==\', \'toto\')]}"/>' +
- '</tree>' +
- '</field>' +
- '</form>';
- this.run(assert, done, function (form) {
- testUtils.form.clickEdit(form);
- form.$('.o_data_cell:first').click();
- form.$('input:first').val("tralala").trigger('input');
});
});
});
-
-}); \ No newline at end of file