[Checkins] SVN: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/ - add a local web server so we don't have to depend on network access for

Benji York benji at zope.com
Sat Sep 15 09:36:54 EDT 2007


Log message for revision 79674:
  - add a local web server so we don't have to depend on network access for
    real.txt
  
  I /really/ want to rework the tests so the vast majority can be common between
  the Zope 3 testbrowser, the "over-the-wire" testbrowser, and now the "real"
  testbrowser.  It should be doable while maintaining, or enhancing, the
  "documentation" quality of the doctests.
  

Changed:
  U   zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.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.txt
===================================================================
--- zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.txt	2007-09-15 12:57:59 UTC (rev 79673)
+++ zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.txt	2007-09-15 13:36:53 UTC (rev 79674)
@@ -2,34 +2,35 @@
 
     >>> browser = Browser()
 
-    >>> browser.open('http://images.google.com/ncr')
-    >>> browser.url
-    'http://images.google.com/'
-    >>> browser.open('http://google.com/ncr')
-    >>> browser.url
-    'http://www.google.com/'
+    >>> base_url = 'http://localhost:%s/' % TEST_PORT
+    >>> browser.open(base_url)
+    >>> browser.url == base_url
+    True
 
+    >>> browser.open(base_url + 'simple.html')
+
     >>> browser.isHtml
     True
 
     >>> browser.title
-    'Google'
+    'Simple Page'
 
     >>> browser.contents
     '<head>...</body>'
 
+    >>> url = browser.url
     >>> browser.reload()
-    >>> browser.url
-    'http://www.google.com/'
+    >>> browser.url == url
+    True
+
     >>> browser.goBack()
-    >>> browser.url
-    'http://images.google.com/'
+    >>> browser.url == base_url
+    True
 
-    >>> browser.getLink('Preferences')
-    <Link text='Preferences' url='http://images.google.com/preferences?hl=en'>
+    >>> browser.open(base_url + 'navigate.html')
 
-    >>> browser.getLink(url='http://news.google.com/')
-    <Link text='News' url='http://news.google.com/nwshp?tab=in'>
+    >>> browser.getLink('Link Text')
+    <Link text='Link Text' url='http://localhost:.../navigate.html?message=By+Link+Text'>
 
     >>> browser.getLink(url='http://')
     Traceback (most recent call last):
@@ -37,4 +38,5 @@
     AmbiguityError: url 'http://'
 
     >>> browser.getLink(url='http://', index=3)
-    <Link text='Maps' url='http://maps.google.com/maps?tab=il'>
+    <Link text='By Anchor Name' url='http://localhost:.../navigate.html?message=By+Name'>
+

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-15 12:57:59 UTC (rev 79673)
+++ zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/tests.py	2007-09-15 13:36:53 UTC (rev 79674)
@@ -21,15 +21,36 @@
 from zope.app.testing.functional import FunctionalDocFileSuite
 from zope.testbrowser import browser
 from zope.testing import renormalizing, doctest
+import BaseHTTPServer
 import httplib
 import mechanize
-import os
+import os.path
+import random
 import re
+import string
+import threading
 import unittest
-import unittest
+import urllib
 import urllib2
 
+web_server_base_path = os.path.join(os.path.split(__file__)[0], 'ftests')
 
+class TestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+
+    def do_GET(self):
+        try:
+            f = open(web_server_base_path + self.path)
+        except:
+            self.send_response(500)
+            return
+
+        self.send_response(200)
+        self.send_header('Content-type', 'text/html')
+        self.end_headers()
+        self.wfile.write(f.read())
+        f.close()
+
+
 def set_next_response(body, headers=None, status='200', reason='OK'):
     global next_response_body
     global next_response_headers
@@ -380,8 +401,29 @@
     os.path.join(os.path.split(__file__)[0], 'ftests/ftesting.zcml'),
     __name__, 'TestBrowserLayer', allow_teardown=True)
 
+server_stop = False
+def serve_requests(server):
+    global server_stopped
+    while not server_stop:
+        server.handle_request()
+
+def setUpReadme(test):
+    port = random.randint(20000,30000)
+    test.globs['TEST_PORT'] = str(port)
+    server = BaseHTTPServer.HTTPServer(('localhost', port), TestHandler)
+    thread = threading.Thread(target=serve_requests, args=[server])
+    thread.setDaemon(True)
+    thread.start()
+    test.globs['web_server_thread'] = thread
+
+def tearDownReadme(test):
+    global server_stop
+    server_stop = True
+    # make a request, so the last call to `handle_one_request` will return
+    urllib.urlretrieve('http://localhost:%s/' % test.globs['TEST_PORT'])
+    test.globs['web_server_thread'].join()
+
 def test_suite():
-    from zope.testing import doctest
     flags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS
 
     readme = FunctionalDocFileSuite('README.txt', optionflags=flags,
@@ -391,7 +433,8 @@
     wire = doctest.DocFileSuite('over_the_wire.txt', optionflags=flags)
     wire.level = 2
 
-    real = doctest.DocFileSuite('real.txt', optionflags=flags)
+    real = doctest.DocFileSuite('real.txt', optionflags=flags,
+        checker=checker, setUp=setUpReadme, tearDown=tearDownReadme)
     real.level = 3
 
     screen_shots = doctest.DocFileSuite('screen-shots.txt', optionflags=flags)
@@ -402,4 +445,3 @@
 
 if __name__ == '__main__':
     unittest.main(defaultTest='test_suite')
-



More information about the Checkins mailing list