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

Reply via email to