Xavier (Open ERP) has proposed merging
lp:~openerp-dev/openerp-web/trunk-tests-xmo into lp:openerp-web.
Requested reviews:
OpenERP R&D Web Team (openerp-dev-web)
For more details, see:
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-tests-xmo/+merge/90704
This is a tentative to improve the inner testing environment, to make it easier
to write *unit tests*.
This is not for integration tests (which would be through something like SST),
and they may or may not be runnable out-of-browser (via e.g. phantom.js) in the
fullness of time. For now, the goal is just two things:
1. Make openerp-web's javascript code easier to test
2. Make openerp-web addons javascript code easier to test.
That's it.
Any suggestion as to how to do that is welcome, there currently is a QUnit[0]
instance in the client, accessible via http://$server/web/static/test/test.html
but adding tests to it is kind-of annoying, and testing anything more complex
than pure (in the functional meaning) synchronous function calls is a pain. So
we'd probably need:
* Easy creation and setup of tests
- have dependencies within `web` so not everything has to be loaded for core
tests (and even addons tests)? Web is already kinda-sorta split in modules, but
there's no good way to only a subset of those
- a way to detect tests and add them to some sort of testrunner?
- the "unit" test suite should not rely on any Python (beyond serving the
files themselves, which could be done through e.g. an nginx instance or even
locally on-disk), it should be runnable statically and should not require
restarting the server to add new test modules
* Pre-built "fakes", mostly for network calls:
- rpc
- various DataSet APIs
These should be available in both synchronous and asynchronous versions
(using `setTimeout` or whatever), and tests should easily be runnable with
either, in order to avoid code breaking when switching from a synchronous to an
asynchronous dataset or the other way around.
* Since we use promises extensively, having QUnit shortcuts for asserting stuff
about them would probably be a good idea (e.g. `resolves(someAsyncCall,
[message, ]timeout)` ensures the deferred resulting from the call does not get
rejected, it could probably take optional values which would assert the
resolution parameters)
[0] http://qunitjs.com/
--
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-tests-xmo/+merge/90704
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openerp-web/trunk-tests-xmo.
=== modified file 'addons/web/static/src/js/boot.js'
--- addons/web/static/src/js/boot.js 2011-12-27 19:44:05 +0000
+++ addons/web/static/src/js/boot.js 2012-01-30 14:54:15 +0000
@@ -51,25 +51,27 @@
/**
* @namespace
*/
-openerp.web = function(instance) {
+openerp.web = function(instance, submodules) {
+ if (submodules) {
+ for(var i=0; i<submodules.length; ++i) {
+ openerp.web[submodules[i]](instance);
+ }
+ return instance;
+ }
openerp.web.core(instance);
if (openerp.web.dates) {
openerp.web.dates(instance);
}
- openerp.web.formats(instance);
- openerp.web.chrome(instance);
- openerp.web.data(instance);
- var files = ["views","search","list","form", "page","list_editable","web_mobile","view_tree","data_export","data_import","view_editor"];
- for(var i=0; i<files.length; i++) {
- if(openerp.web[files[i]]) {
- openerp.web[files[i]](instance);
- }
- }
+ openerp.web.init(instance, ['formats','chrome','data','views']);
+ openerp.web.init(instance, ['search','list','form','page','list_editable','view_tree']);
+ openerp.web.init(instance, ['web_mobile','data_export','data_import','view_editor']);
+
instance.log = function() {
if (instance.connection.debug && window.console) {
console.log.apply(console, arguments);
}
- }
+ };
+ return instance;
};
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
=== modified file 'addons/web/static/test/class.js'
--- addons/web/static/test/class.js 2011-09-05 11:03:09 +0000
+++ addons/web/static/test/class.js 2012-01-30 14:54:15 +0000
@@ -2,7 +2,7 @@
var openerp;
module('web-class', {
setup: function () {
- openerp = window.openerp.init();
+ openerp = window.openerp.init([]);
window.openerp.web.core(openerp);
}
});
=== modified file 'addons/web/static/test/form.js'
--- addons/web/static/test/form.js 2011-09-05 11:03:09 +0000
+++ addons/web/static/test/form.js 2012-01-30 14:54:15 +0000
@@ -2,14 +2,8 @@
var openerp;
module("form.widget", {
setup: function () {
- openerp = window.openerp.init(true);
- window.openerp.web.core(openerp);
- window.openerp.web.chrome(openerp);
- // views loader stuff
- window.openerp.web.data(openerp);
- window.openerp.web.views(openerp);
- window.openerp.web.list(openerp);
- window.openerp.web.form(openerp);
+ openerp = window.openerp.web(window.openerp.init([]),
+ ['core','chrome','data','views','list','form']);
}
});
test("compute_domain", function () {
=== modified file 'addons/web/static/test/formats.js'
--- addons/web/static/test/formats.js 2012-01-26 15:28:22 +0000
+++ addons/web/static/test/formats.js 2012-01-30 14:54:15 +0000
@@ -3,9 +3,8 @@
module('server-formats', {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.core(openerp);
- window.openerp.web.dates(openerp);
+ openerp = window.openerp.web(window.openerp.init([]),
+ ['core','dates']);
}
});
test('Parse server datetime', function () {
@@ -40,10 +39,8 @@
module('web-formats', {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.core(openerp);
- window.openerp.web.dates(openerp);
- window.openerp.web.formats(openerp);
+ openerp = window.openerp.web(window.openerp.init([]),
+ ['core','dates','formats']);
}
});
test("format_datetime", function () {
=== modified file 'addons/web/static/test/list-utils.js'
--- addons/web/static/test/list-utils.js 2012-01-12 17:09:17 +0000
+++ addons/web/static/test/list-utils.js 2012-01-30 14:54:15 +0000
@@ -10,8 +10,8 @@
};
module('list-events', {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.list(openerp);
+ openerp = window.openerp.web(window.openerp.init([]),
+ ['core','chrome','views','list']);
}
});
test('Simple event triggering', function () {
@@ -90,8 +90,8 @@
module('list-records', {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.list(openerp);
+ openerp = window.openerp.web(window.openerp.init([]),
+ ['core','chrome','views','list']);
}
});
test('Basic record initialization', function () {
@@ -123,8 +123,8 @@
module('list-collections-degenerate', {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.list(openerp);
+ openerp = window.openerp.web(window.openerp.init([]),
+ ['core','chrome','views','list']);
}
});
test('Fetch from collection', function () {
@@ -245,8 +245,8 @@
module('list-hofs', {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.list(openerp);
+ openerp = window.openerp.web(window.openerp.init([]),
+ ['core','chrome','views','list']);
}
});
test('each, degenerate', function () {
=== modified file 'addons/web/static/test/onchange.js'
--- addons/web/static/test/onchange.js 2011-11-22 12:43:53 +0000
+++ addons/web/static/test/onchange.js 2012-01-30 14:54:15 +0000
@@ -12,14 +12,8 @@
};
module("form.onchange", {
setup: function () {
- openerp = window.openerp.init(true);
- window.openerp.web.core(openerp);
- window.openerp.web.chrome(openerp);
- // views loader stuff
- window.openerp.web.data(openerp);
- window.openerp.web.views(openerp);
- window.openerp.web.list(openerp);
- window.openerp.web.form(openerp);
+ openerp = window.openerp.web(window.openerp.init([]),
+ ['core','chrome','data','views','list','form']);
}
});
test('Parse args-less onchange', function () {
=== modified file 'addons/web/static/test/registry.js'
--- addons/web/static/test/registry.js 2011-09-05 11:03:09 +0000
+++ addons/web/static/test/registry.js 2012-01-30 14:54:15 +0000
@@ -2,8 +2,8 @@
var openerp;
module('Registry', {
setup: function () {
- openerp = window.openerp.init(true);
- window.openerp.web.core(openerp);
+ openerp = window.openerp.web(window.openerp.init([]),
+ ['core','chrome']);
openerp.web.Foo = {};
openerp.web.Bar = {};
}
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp