flectra.define('web.abstract_view_tests', function (require) { "use strict"; var AbstractView = require('web.AbstractView'); var ajax = require('web.ajax'); var testUtils = require('web.test_utils'); var createAsyncView = testUtils.createAsyncView; QUnit.module('Views', { beforeEach: function () { this.data = { fake_model: { fields: {}, record: [], }, }; }, }, function () { QUnit.module('AbstractView'); QUnit.test('lazy loading of js libs (in parallel)', function (assert) { var done = assert.async(); assert.expect(6); var def = $.Deferred(); var loadJS = ajax.loadJS; ajax.loadJS = function (url) { assert.step(url); return def.then(function () { assert.step(url + ' loaded'); }); }; var View = AbstractView.extend({ jsLibs: [['a', 'b']], }); createAsyncView({ View: View, arch: '', data: this.data, model: 'fake_model', }).then(function (view) { assert.verifySteps(['a', 'b', 'a loaded', 'b loaded'], "should wait for both libs to be loaded"); ajax.loadJS = loadJS; view.destroy(); done(); }); assert.verifySteps(['a', 'b'], "both libs should be loaded in parallel"); def.resolve(); }); QUnit.test('lazy loading of js libs (sequentially)', function (assert) { var done = assert.async(); assert.expect(10); var defs = { a: $.Deferred(), b: $.Deferred(), c: $.Deferred(), }; var loadJS = ajax.loadJS; ajax.loadJS = function (url) { assert.step(url); return defs[url].then(function () { assert.step(url + ' loaded'); }); }; var View = AbstractView.extend({ jsLibs: [ ['a', 'b'], 'c', ], }); createAsyncView({ View: View, arch: '', data: this.data, model: 'fake_model', }).then(function (view) { assert.verifySteps(['a', 'b', 'b loaded', 'a loaded', 'c', 'c loaded'], "should for all libs to be loaded"); ajax.loadJS = loadJS; view.destroy(); done(); }); assert.verifySteps(['a', 'b'], "libs 'a' and 'b' should be loaded in parallel"); defs.b.resolve(); assert.verifySteps(['a', 'b', 'b loaded'], "should wait for 'a' and 'b' to be loaded before loading 'c'"); defs.a.resolve(); assert.verifySteps(['a', 'b', 'b loaded', 'a loaded', 'c'], "should load 'c' when 'a' and 'b' are loaded"); defs.c.resolve(); }); }); });