From 8fd5fb82a7d6dcb130e9786729da0fe52a196994 Mon Sep 17 00:00:00 2001 From: ddm Date: Mon, 23 Dec 2013 14:54:25 +0100 Subject: [PATCH] [IMP] Added simple DOM UI test as example bzr revid: ddm@openerp.com-20131223135425-9hxb4nmvdr0rrb3t --- addons/website/static/src/js/website.tour.js | 6 +++ addons/website/tests/test_ui.py | 21 +++++----- addons/website/tests/ui_suite/banner_tour.js | 17 -------- addons/website/tests/ui_suite/dom_test.js | 41 +++++++++++++++++++ .../{sample_test.js => dummy_test.js} | 0 5 files changed, 58 insertions(+), 27 deletions(-) delete mode 100644 addons/website/tests/ui_suite/banner_tour.js create mode 100644 addons/website/tests/ui_suite/dom_test.js rename addons/website/tests/ui_suite/{sample_test.js => dummy_test.js} (100%) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index ea3c7bcf5b5..a22a31a6857 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -287,6 +287,12 @@ tour.start(); } }); + document.addEventListener('ui-tests:ready', function() { + alert("TOTO_DOM"); + }, false); + if (document.dispatchEvent) { + document.dispatchEvent(new Event('ui-tests:ready', { bubbles: true, cancelable: false })); + } return this._super(); }, registerTour: function (tour) { diff --git a/addons/website/tests/test_ui.py b/addons/website/tests/test_ui.py index 5657080cf8d..6c1380032e0 100644 --- a/addons/website/tests/test_ui.py +++ b/addons/website/tests/test_ui.py @@ -43,7 +43,7 @@ class WebsiteUiTest(unittest.TestCase): class WebsiteUiSuite(unittest.TestSuite): # timeout is in seconds - def __init__(self, testfile, timeout=5): + def __init__(self, testfile, timeout=20): self.testfile = testfile self.timeout = timeout self._test = None @@ -93,7 +93,7 @@ class WebsiteUiSuite(unittest.TestSuite): proc_stdout = LineReader(phantom.stdout.fileno()) readable = [proc_stdout] try: - while readable and last_check_time < self.start_time + self.timeout: + while phantom.poll() is None and readable and last_check_time < self.start_time + self.timeout: ready, _, _ = select.select(readable, [], [], 0.1) if not ready: last_check_time = time.time() @@ -104,18 +104,19 @@ class WebsiteUiSuite(unittest.TestSuite): # got EOF on this stream readable.remove(stream) break; - for line in lines: - self.process(line, result) + else: + self.process(lines[0], result) # the runner expects only one output line # any subsequent line is ignored - break + readable.remove(stream) + if last_check_time >= (self.start_time + self.timeout): result.addError(self._test, "Timeout after %s s" % (last_check_time - self.start_time )) - result.stopTest(self._test) finally: # kill phantomjs if phantom.exit() wasn't called in the test if phantom.poll() is None: phantom.terminate() + result.stopTest(self._test) def process(self, line, result): # Test protocol @@ -134,11 +135,11 @@ class WebsiteUiSuite(unittest.TestSuite): message = args.get('message', "") result.addFailure(self._test, message) else: - result.addError(self._test, "Unexpected message: %s" % line) + result.addError(self._test, 'Unexpected message: "%s"' % line) except ValueError: - result.addError(self._test, "Unexpected message: %s" % line) + result.addError(self._test, 'Unexpected message: "%s"' % line) def load_tests(loader, base, _): - base.addTest(WebsiteUiSuite('sample_test.js')) - base.addTest(WebsiteUiSuite('banner_tour.js')) + base.addTest(WebsiteUiSuite('dummy_test.js')) + base.addTest(WebsiteUiSuite('dom_test.js')) return base \ No newline at end of file diff --git a/addons/website/tests/ui_suite/banner_tour.js b/addons/website/tests/ui_suite/banner_tour.js deleted file mode 100644 index 686f86e446e..00000000000 --- a/addons/website/tests/ui_suite/banner_tour.js +++ /dev/null @@ -1,17 +0,0 @@ -var options = JSON.parse(phantom.args); -var page = require('webpage').create(); -var url = 'http://localhost:'+options.port; -page.open(url, function (status) { - if (status !== 'success') { - console.log('{ "event": "failure", "message": "'+url+' failed to load"}'); - phantom.exit(); - } else { - page.evaluate(function() { - $(document).on("tour:ready", function () { - openerp.website.TestConsole.test('banner').run(true) - console.log('{ "event": "success" }'); - phantom.exit(); - }); - }); - } -}); \ No newline at end of file diff --git a/addons/website/tests/ui_suite/dom_test.js b/addons/website/tests/ui_suite/dom_test.js new file mode 100644 index 00000000000..85f9341fab9 --- /dev/null +++ b/addons/website/tests/ui_suite/dom_test.js @@ -0,0 +1,41 @@ +var options = JSON.parse(phantom.args); +var url = 'http://localhost:'+options.port; + +var page = require('webpage').create(); + +page.onError = function(message, trace) { + console.log('{ "event": "error", "message": "'+message+'"}'); +}; + +function waitFor(ready, timeout) { + var maxtimeOutMillis = timeout ? timeout*1000 : 10000; + var start = new Date().getTime(); + var condition = ready(); + var interval = setInterval(function() { + if ((new Date().getTime() - start < maxtimeOutMillis) && !condition ) { + alert("TOTO") + condition = ready(); + } else { + if(!condition) { + console.log('{ "event": "error", "message": "Timeout after'+maxtimeOutMillis+' ms" }'); + phantom.exit(1); + } else { + clearInterval(interval); + console.log('{ "event": "success" }'); + } + } + }, 100); +}; + +page.open(url, function (status) { + if (status !== 'success') { + console.log('{ "event": "failure", "message": "'+url+' failed to load"}'); + phantom.exit(1); + } else { + waitFor(function () { + return page.evaluate(function () { + return window.openerp && window.openerp.website; + }); + }, 5); + } +}); \ No newline at end of file diff --git a/addons/website/tests/ui_suite/sample_test.js b/addons/website/tests/ui_suite/dummy_test.js similarity index 100% rename from addons/website/tests/ui_suite/sample_test.js rename to addons/website/tests/ui_suite/dummy_test.js