diff --git a/addons/website/tests/test_ui.py b/addons/website/tests/test_ui.py index 76ae3a9b8b2..22c5f9643ad 100644 --- a/addons/website/tests/test_ui.py +++ b/addons/website/tests/test_ui.py @@ -104,9 +104,7 @@ class WebsiteUiSuite(unittest.TestSuite): # EOF readable.remove(stream) else: - self.process(lines[0], result) - # the runner expects only one output line - # any subsequent line is ignored + self.process(lines, result) readable.remove(stream) if last_check_time >= (start_time + self._timeout): result.addError(self._test, "Timeout after %s s" % (last_check_time - start_time )) @@ -116,32 +114,31 @@ class WebsiteUiSuite(unittest.TestSuite): phantom.terminate() result.stopTest(self._test) - def process(self, line, result): + def process(self, lines, result): # Test protocol # ------------- # use console.log in phantomjs to output test results using the following format: # - for a success: { "event": "success" } - # - for a failure: { "event": "failure", "message": "Failure description" } - # - for an error: { "event": "error", "message": "Error description" } - # any other message is treated as an error + # - for an error: { "event": "error", "message": "Short error description" } + # the first line is treated as a JSON message (JSON should be formatted on one line) + # subsequent lines are displayed only if the first line indicated an error + # or if the first line was not a JSON message (still an error) result.startTest(self._test) try: - args = json.loads(line) + args = json.loads(lines[0]) event = args.get('event', None) if event == 'success': result.addSuccess(self._test) - elif event == 'failure': - message = args.get('message', "") - result.addFailure(self._test, message) elif event == 'error': message = args.get('message', "") - result.addError(self._test, message) + result.addError(self._test, message+"\n"+"\n".join(lines[1::])) else: - result.addError(self._test, 'Unexpected JSON: "%s"' % line) + result.addError(self._test, 'Unexpected message: "%s"' % "\n".join(lines)) except ValueError: - result.addError(self._test, 'Unexpected message: "%s"' % line) + result.addError(self._test, 'Unexpected message: "%s"' % "\n".join(lines)) def load_tests(loader, base, _): base.addTest(WebsiteUiSuite('dummy_test.js', {})) + base.addTest(WebsiteUiSuite('simple_dom_test.js', { 'action': 'website.action_website_homepage' })) base.addTest(WebsiteUiSuite('banner_tour_test.js', { 'action': 'website.action_website_homepage' })) return base diff --git a/addons/website/tests/ui_suite/banner_tour_test.js b/addons/website/tests/ui_suite/banner_tour_test.js index 9bade783afc..162e2049e78 100644 --- a/addons/website/tests/ui_suite/banner_tour_test.js +++ b/addons/website/tests/ui_suite/banner_tour_test.js @@ -22,7 +22,6 @@ testRunner.run(function testBannerTour (page) { waitFor(function () { var after = page.evaluate(function () { if ($('button[data-action=edit]').is(":visible")) { - console.error("why?"); return { carousel: $('#wrap [data-snippet-id=carousel]').length, columns: $('#wrap [data-snippet-id=three-columns]').length, @@ -33,6 +32,6 @@ testRunner.run(function testBannerTour (page) { }, function () { console.log('{ "event": "success" }'); phantom.exit(); - }); - }); + }, 15000); + }, 5000); }); \ No newline at end of file diff --git a/addons/website/tests/ui_suite/simple_dom_test.js b/addons/website/tests/ui_suite/simple_dom_test.js new file mode 100644 index 00000000000..e0c19ceef2a --- /dev/null +++ b/addons/website/tests/ui_suite/simple_dom_test.js @@ -0,0 +1,15 @@ +var testRunner = require('./ui_test_runner.js'); + +var waitFor = testRunner.waitFor; + +testRunner.run(function simpleDomTest (page) { + waitFor(function () { + return page.evaluate(function () { + return window.openerp && window.openerp.website + && window.openerp.website.TestConsole; + }); + }, function () { + console.log('{ "event": "success" }'); + phantom.exit(); + }, 20000); +}); \ No newline at end of file diff --git a/addons/website/tests/ui_suite/ui_test_runner.js b/addons/website/tests/ui_suite/ui_test_runner.js index 75febbb4c9d..8cc925fdfba 100644 --- a/addons/website/tests/ui_suite/ui_test_runner.js +++ b/addons/website/tests/ui_suite/ui_test_runner.js @@ -1,14 +1,15 @@ function waitFor(ready, callback, timeout) { - var timeoutMillis = timeout ? Math.round(timeout*1000) : 30000; + timeout = timeout || 10000; var start = new Date().getTime(); var condition = ready(); var interval = setInterval(function() { - if ((new Date().getTime() - start < timeoutMillis) && !condition ) { + if ((new Date().getTime() - start < timeout) && !condition ) { condition = ready(); } else { if(!condition) { - var message = "Timeout after "+timeoutMillis+" ms"; + var message = "Timeout after "+timeout+" ms"; console.log('{ "event": "error", "message": "'+message+'" }'); + console.log("Waiting for...\n"+ready); phantom.exit(1); } else { clearInterval(interval); @@ -38,9 +39,11 @@ function run (test) { }; page.open(url, function (status) { if (status !== 'success') { - console.log('{ "event": "failure", "message": "'+url+' failed to load"}'); + console.log('{ "event": "error", "message": "'+url+' failed to load"}'); phantom.exit(1); } else { + // TODO Remove + console.log('{ "event": "error", "message": "Testing '+url+'"}'); test(page); } });