Merge lp:~openerp-dev/openobject-server/trunk-r9215-fix-chm into lp:openobject-server

Proposed by Christophe Simonis (OpenERP)
Status: Merged
Merged at revision: 5148
Proposed branch: lp:~openerp-dev/openobject-server/trunk-r9215-fix-chm
Merge into: lp:openobject-server
Diff against target: 181 lines (+40/-32)
4 files modified
openerp/http.py (+1/-1)
openerp/modules/loading.py (+7/-1)
openerp/modules/module.py (+18/-18)
openerp/tests/phantomtest.js (+14/-12)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/trunk-r9215-fix-chm
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+212615@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openerp/http.py'
--- openerp/http.py 2014-03-24 16:12:57 +0000
+++ openerp/http.py 2014-03-25 13:51:01 +0000
@@ -287,7 +287,7 @@
287 def checked_call(___dbname, *a, **kw):287 def checked_call(___dbname, *a, **kw):
288 # The decorator can call us more than once if there is an database error. In this288 # The decorator can call us more than once if there is an database error. In this
289 # case, the request cursor is unusable. Rollback transaction to create a new one.289 # case, the request cursor is unusable. Rollback transaction to create a new one.
290 if self._cr:290 if self._cr and not openerp.tools.config['test_enable']:
291 self._cr.rollback()291 self._cr.rollback()
292 return self.endpoint(*a, **kw)292 return self.endpoint(*a, **kw)
293293
294294
=== modified file 'openerp/modules/loading.py'
--- openerp/modules/loading.py 2014-03-17 15:18:10 +0000
+++ openerp/modules/loading.py 2014-03-25 13:51:01 +0000
@@ -42,6 +42,7 @@
42from openerp.tools.translate import _42from openerp.tools.translate import _
43from openerp.modules.module import initialize_sys_path, \43from openerp.modules.module import initialize_sys_path, \
44 load_openerp_module, init_module_models, adapt_version44 load_openerp_module, init_module_models, adapt_version
45from module import runs_post_install
4546
46_logger = logging.getLogger(__name__)47_logger = logging.getLogger(__name__)
47_test_logger = logging.getLogger('openerp.tests')48_test_logger = logging.getLogger('openerp.tests')
@@ -425,8 +426,13 @@
425 for model in registry.models.values():426 for model in registry.models.values():
426 model._register_hook(cr)427 model._register_hook(cr)
427428
429 # STEP 9: Run the post-install tests
430 cr.commit()
431 if openerp.tools.config['test_enable']:
432 cr.execute("SELECT name FROM ir_module_module WHERE state='installed'")
433 for module_name in cr.fetchall():
434 report.record_result(openerp.modules.module.run_unit_tests(module_name[0], cr.dbname, position=runs_post_install))
428 finally:435 finally:
429 cr.close()436 cr.close()
430437
431
432# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:438# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
433439
=== modified file 'openerp/modules/module.py'
--- openerp/modules/module.py 2014-03-17 02:13:17 +0000
+++ openerp/modules/module.py 2014-03-25 13:51:01 +0000
@@ -356,7 +356,23 @@
356356
357current_test = None357current_test = None
358358
359def run_unit_tests(module_name, dbname):359def runs_at(test, hook, default):
360 # by default, tests do not run post install
361 test_runs = getattr(test, hook, default)
362
363 # for a test suite, we're done
364 if not isinstance(test, unittest.TestCase):
365 return test_runs
366
367 # otherwise check the current test method to see it's been set to a
368 # different state
369 method = getattr(test, test._testMethodName)
370 return getattr(method, hook, test_runs)
371
372runs_at_install = functools.partial(runs_at, hook='at_install', default=True)
373runs_post_install = functools.partial(runs_at, hook='post_install', default=False)
374
375def run_unit_tests(module_name, dbname, position=runs_at_install):
360 """376 """
361 :returns: ``True`` if all of ``module_name``'s tests succeeded, ``False``377 :returns: ``True`` if all of ``module_name``'s tests succeeded, ``False``
362 if any of them failed.378 if any of them failed.
@@ -368,7 +384,7 @@
368 r = True384 r = True
369 for m in mods:385 for m in mods:
370 tests = unwrap_suite(unittest2.TestLoader().loadTestsFromModule(m))386 tests = unwrap_suite(unittest2.TestLoader().loadTestsFromModule(m))
371 suite = unittest2.TestSuite(itertools.ifilter(runs_at_install, tests))387 suite = unittest2.TestSuite(itertools.ifilter(position, tests))
372 _logger.info('running %s tests.', m.__name__)388 _logger.info('running %s tests.', m.__name__)
373389
374 result = unittest2.TextTestRunner(verbosity=2, stream=TestStream(m.__name__)).run(suite)390 result = unittest2.TextTestRunner(verbosity=2, stream=TestStream(m.__name__)).run(suite)
@@ -380,22 +396,6 @@
380 current_test = None396 current_test = None
381 return r397 return r
382398
383def runs_at(test, hook, default):
384 # by default, tests do not run post install
385 test_runs = getattr(test, hook, default)
386
387 # for a test suite, we're done
388 if not isinstance(test, unittest.TestCase):
389 return test_runs
390
391 # otherwise check the current test method to see it's been set to a
392 # different state
393 method = getattr(test, test._testMethodName)
394 return getattr(method, hook, test_runs)
395
396runs_at_install = functools.partial(runs_at, hook='at_install', default=True)
397runs_post_install = functools.partial(runs_at, hook='post_install', default=False)
398
399def unwrap_suite(test):399def unwrap_suite(test):
400 """400 """
401 Attempts to unpack testsuites (holding suites or cases) in order to401 Attempts to unpack testsuites (holding suites or cases) in order to
402402
=== modified file 'openerp/tests/phantomtest.js'
--- openerp/tests/phantomtest.js 2014-03-16 16:06:34 +0000
+++ openerp/tests/phantomtest.js 2014-03-25 13:51:01 +0000
@@ -6,7 +6,8 @@
66
7 (function waitLoop() {7 (function waitLoop() {
8 if(new Date - start > timeout) {8 if(new Date - start > timeout) {
9 error(timeoutMessageCallback ? timeoutMessageCallback() : "Timeout after "+timeout+" ms");9 console.log('error', timeoutMessageCallback ? timeoutMessageCallback() : "Timeout after "+timeout+" ms");
10 phantom.exit(1);
10 } else if (ready()) {11 } else if (ready()) {
11 callback();12 callback();
12 } else {13 } else {
@@ -15,10 +16,6 @@
15 }());16 }());
16}17}
1718
18function error(message) {
19 console.log('error', message);
20 phantom.exit(1);
21}
22function PhantomTest() {19function PhantomTest() {
23 var self = this;20 var self = this;
24 this.options = JSON.parse(phantom.args[phantom.args.length-1]);21 this.options = JSON.parse(phantom.args[phantom.args.length-1]);
@@ -49,10 +46,12 @@
49 }));46 }));
50 msg.push('(leaf frame on top)')47 msg.push('(leaf frame on top)')
51 }48 }
52 error(JSON.stringify(msg.join('\n')));49 console.log('error', JSON.stringify(msg.join('\n')));
50 phantom.exit(1);
53 };51 };
54 this.page.onAlert = function(message) {52 this.page.onAlert = function(message) {
55 error(message);53 console.log('error', message);
54 phantom.exit(1);
56 };55 };
57 this.page.onConsoleMessage = function(message) {56 this.page.onConsoleMessage = function(message) {
58 console.log(message);57 console.log(message);
@@ -78,7 +77,8 @@
78 if(!found) {77 if(!found) {
79 console.log('Injecting', src, 'needed for', need);78 console.log('Injecting', src, 'needed for', need);
80 if(!self.page.injectJs(src)) {79 if(!self.page.injectJs(src)) {
81 error("Cannot inject " + src);80 console.log('error', "Cannot inject " + src);
81 phantom.exit(1);
82 }82 }
83 }83 }
84 }84 }
@@ -88,8 +88,9 @@
88 self.page.evaluate(function () {88 self.page.evaluate(function () {
89 var message = ("Timeout\nhref: " + window.location.href89 var message = ("Timeout\nhref: " + window.location.href
90 + "\nreferrer: " + document.referrer90 + "\nreferrer: " + document.referrer
91 + "\n\n" + document.body.innerHTML).replace(/[^a-z0-9\s~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, "*");91 + "\n\n" + (document.body && document.body.innerHTML)).replace(/[^a-z0-9\s~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, "*");
92 error(message);92 console.log('error', message);
93 phantom.exit(1);
93 });94 });
94 }, self.timeout);95 }, self.timeout);
9596
@@ -108,7 +109,8 @@
108 var url = self.origin + url_path;109 var url = self.origin + url_path;
109 self.page.open(url, function(status) {110 self.page.open(url, function(status) {
110 if (status !== 'success') {111 if (status !== 'success') {
111 error("failed to load " + url)112 console.log('error', "failed to load " + url);
113 phantom.exit(1);
112 } else {114 } else {
113 console.log('loaded', url, status);115 console.log('loaded', url, status);
114 // process ready116 // process ready
@@ -119,7 +121,7 @@
119 try {121 try {
120 console.log("page.evaluate eval expr:", ready);122 console.log("page.evaluate eval expr:", ready);
121 r = !!eval(ready);123 r = !!eval(ready);
122 } catch(ex) { 124 } catch(ex) {
123 }125 }
124 console.log("page.evaluate eval result:", r);126 console.log("page.evaluate eval result:", r);
125 return r;127 return r;