[Checkins] SVN: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/ - fix test wiring

Benji York benji at zope.com
Tue Sep 11 05:16:21 EDT 2007


Log message for revision 79559:
  - fix test wiring
  - add nicer error message for when MozRepl isn't running
  - change timeout to be browser attribute (need to start working on an
    interface for the "real" testbrowser and reconsile that interface with the
    others)
  - finally add good page load detection
  

Changed:
  U   zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.js
  U   zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.py
  U   zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/screen-shots.txt
  U   zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/tests.py

-=-
Modified: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.js
===================================================================
--- zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.js	2007-09-11 03:45:30 UTC (rev 79558)
+++ zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.js	2007-09-11 09:16:20 UTC (rev 79559)
@@ -134,3 +134,8 @@
     file.initWithPath(out_path);
     persist.saveURI(source, null, null, null, null, file);
 }
+
+
+tb_page_loaded = false;
+document.getElementById("appcontent"
+    ).addEventListener("load", function() { tb_page_loaded = true; }, true);

Modified: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.py
===================================================================
--- zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.py	2007-09-11 03:45:30 UTC (rev 79558)
+++ zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.py	2007-09-11 09:16:20 UTC (rev 79559)
@@ -3,6 +3,7 @@
 import os.path
 import re
 import simplejson
+import socket
 import telnetlib
 import time
 import zope.interface
@@ -15,6 +16,7 @@
 
     raiseHttpErrors = True
     _counter = 0
+    timeout = 60
 
     def __init__(self, url=None, host='localhost', port=4242):
         self.timer = zope.testbrowser.browser.PystoneTimer()
@@ -27,7 +29,12 @@
     def init_repl(self, host, port):
         dir = os.path.dirname(__file__)
         js_path = os.path.join(dir, 'real.js')
-        self.telnet = telnetlib.Telnet(host, port)
+        try:
+            self.telnet = telnetlib.Telnet(host, port)
+        except socket.error, e:
+            raise RuntimeError('Error connecting to Firefox at %s:%s.'
+                ' Is MozRepl running?' % (host, port))
+
         self.telnet.write(open(js_path, 'rt').read())
 
     def execute(self, js):
@@ -49,10 +56,9 @@
         for line in lines:
             self.execute(line)
 
-    def expect(self, res, timeout=60):
-        i, match, text = self.telnet.expect([PROMPT], timeout)
+    def expect(self, res):
+        i, match, text = self.telnet.expect([PROMPT], self.timeout)
         if match is None:
-            import pdb;pdb.set_trace()
             raise RuntimeError('unexpected result from MozRepl')
         return i, match, text
 
@@ -63,23 +69,21 @@
     def url(self):
         return self.execute('content.location')
 
-    def _primePageLoadWait(self):
-        # save the current document element to compare against later
-        self.execute('tb_prev_document = content.document.documentElement;')
+    def waitForPageLoad(self):
+        start = time.time()
+        while self.execute('tb_page_loaded') == 'false':
+            time.sleep(0.001)
+            if time.time() - start > self.timeout:
+                raise RuntimeError('timed out waiting for page load')
 
-    def _waitForPageLoad(self):
-        # wait for the page to load
-        while self.execute('content.document.documentElement'
-            '.isSameNode(tb_prev_document)') == 'true':
-                time.sleep(0.001)
+        self.execute('tb_page_loaded = false;')
 
     def open(self, url, data=None):
         assert data is None
         self.start_timer()
         try:
-            self._primePageLoadWait()
             self.execute('content.location = ' + simplejson.dumps(url))
-            self._waitForPageLoad()
+            self.waitForPageLoad()
         finally:
             self.stop_timer()
             self._changed()
@@ -128,16 +132,16 @@
 
     def reload(self):
         self.start_timer()
-        self._primePageLoadWait()
         self.execute('content.document.location = content.document.location')
-        self._waitForPageLoad()
+        self.waitForPageLoad()
         self.stop_timer()
 
     def goBack(self, count=1):
         self.start_timer()
-        self._primePageLoadWait()
         self.execute('content.back()')
-        self._waitForPageLoad()
+        # Our method of knowing when the page finishes loading doesn't work
+        # for "back", so for now just sleep a little, and hope it is enough.
+        time.sleep(1)
         self.stop_timer()
         self._changed()
 

Modified: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/screen-shots.txt
===================================================================
--- zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/screen-shots.txt	2007-09-11 03:45:30 UTC (rev 79558)
+++ zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/screen-shots.txt	2007-09-11 09:16:20 UTC (rev 79559)
@@ -1,6 +1,4 @@
     >>> from zope.testbrowser.real import Browser
     >>> browser = Browser()
     >>> browser.open('http://slashdot.org')
-    >>> import time
-    >>> time.sleep(3)
     >>> browser.execute('tb_take_screen_shot("/tmp/1.png")')

Modified: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/tests.py
===================================================================
--- zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/tests.py	2007-09-11 03:45:30 UTC (rev 79558)
+++ zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/tests.py	2007-09-11 09:16:20 UTC (rev 79559)
@@ -391,14 +391,14 @@
     wire = doctest.DocFileSuite('over_the_wire.txt', optionflags=flags)
     wire.level = 2
 
-    wire = doctest.DocFileSuite('real.txt', optionflags=flags)
-    wire.level = 3
+    real = doctest.DocFileSuite('real.txt', optionflags=flags)
+    real.level = 3
 
-    wire = doctest.DocFileSuite('screen-shots.txt', optionflags=flags)
-    wire.level = 3
+    screen_shots = doctest.DocFileSuite('screen-shots.txt', optionflags=flags)
+    screen_shots.level = 3
 
     this_file = doctest.DocTestSuite(checker=checker)
-    return unittest.TestSuite((this_file, readme, wire))
+    return unittest.TestSuite((this_file, readme, wire, real, screen_shots))
 
 if __name__ == '__main__':
     unittest.main(defaultTest='test_suite')



More information about the Checkins mailing list