summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/views/list_benchmarks.js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/web/static/tests/views/list_benchmarks.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/web/static/tests/views/list_benchmarks.js')
-rw-r--r--addons/web/static/tests/views/list_benchmarks.js113
1 files changed, 113 insertions, 0 deletions
diff --git a/addons/web/static/tests/views/list_benchmarks.js b/addons/web/static/tests/views/list_benchmarks.js
new file mode 100644
index 00000000..92d70054
--- /dev/null
+++ b/addons/web/static/tests/views/list_benchmarks.js
@@ -0,0 +1,113 @@
+odoo.define('web.list_benchmarks', function (require) {
+ "use strict";
+
+ const ListView = require('web.ListView');
+ const { createView } = require('web.test_utils');
+
+ QUnit.module('List View', {
+ beforeEach: function () {
+ this.data = {
+ foo: {
+ fields: {
+ foo: {string: "Foo", type: "char"},
+ bar: {string: "Bar", type: "boolean"},
+ int_field: {string: "int_field", type: "integer", sortable: true},
+ qux: {string: "my float", type: "float"},
+ },
+ records: [
+ {id: 1, bar: true, foo: "yop", int_field: 10, qux: 0.4},
+ {id: 2, bar: true, foo: "blip", int_field: 9, qux: 13},
+ ]
+ },
+ };
+ this.arch = null;
+ this.run = function (assert, cb) {
+ const data = this.data;
+ const arch = this.arch;
+ return new Promise(resolve => {
+ new Benchmark.Suite({})
+ .add('list', {
+ defer: true,
+ fn: async (deferred) => {
+ const list = await createView({
+ View: ListView,
+ model: 'foo',
+ data,
+ arch,
+ });
+ if (cb) {
+ cb(list);
+ }
+ list.destroy();
+ deferred.resolve();
+ },
+ })
+ .on('cycle', event => {
+ assert.ok(true, String(event.target));
+ })
+ .on('complete', resolve)
+ .run({ async: true });
+ });
+ };
+ }
+ }, function () {
+ QUnit.test('simple readonly list with 2 rows and 2 fields', function (assert) {
+ assert.expect(1);
+
+ this.arch = '<tree><field name="foo"/><field name="int_field"/></tree>';
+ return this.run(assert);
+ });
+
+ QUnit.test('simple readonly list with 200 rows and 2 fields', function (assert) {
+ assert.expect(1);
+
+ for (let i = 2; i < 200; i++) {
+ this.data.foo.records.push({
+ id: i,
+ foo: "automated data",
+ int_field: 10 * i,
+ });
+ }
+ this.arch = '<tree><field name="foo"/><field name="int_field"/></tree>';
+ return this.run(assert);
+ });
+
+ QUnit.test('simple readonly list with 200 rows and 2 fields (with widgets)', function (assert) {
+ assert.expect(1);
+
+ for (let i = 2; i < 200; i++) {
+ this.data.foo.records.push({
+ id: i,
+ foo: "automated data",
+ int_field: 10 * i,
+ });
+ }
+ this.arch = '<tree><field name="foo" widget="char"/><field name="int_field" widget="integer"/></tree>';
+ return this.run(assert);
+ });
+
+ QUnit.test('editable list with 200 rows 4 fields', function (assert) {
+ assert.expect(1);
+
+ for (let i = 2; i < 200; i++) {
+ this.data.foo.records.push({
+ id: i,
+ foo: "automated data",
+ int_field: 10 * i,
+ bar: i % 2 === 0,
+ });
+ }
+ this.arch = `
+ <tree editable="bottom">
+ <field name="foo" attrs="{'readonly': [['bar', '=', True]]}"/>
+ <field name="int_field"/>
+ <field name="bar"/>
+ <field name="qux"/>
+ </tree>`;
+ return this.run(assert, list => {
+ list.$('.o_list_button_add').click();
+ list.$('.o_list_button_discard').click();
+ });
+ });
+ });
+});