[Checkins] SVN: van.testing/trunk/ Fixup testbrowser support a bit

Brian Sutherland jinty at web.de
Fri Apr 3 04:35:27 EDT 2009


Log message for revision 98819:
  Fixup testbrowser support a bit

Changed:
  U   van.testing/trunk/CHANGES.txt
  U   van.testing/trunk/buildout.cfg
  U   van.testing/trunk/van/testing/layer.py
  A   van.testing/trunk/van/testing/testbrowser.txt
  U   van.testing/trunk/van/testing/tests.py

-=-
Modified: van.testing/trunk/CHANGES.txt
===================================================================
--- van.testing/trunk/CHANGES.txt	2009-04-03 08:05:56 UTC (rev 98818)
+++ van.testing/trunk/CHANGES.txt	2009-04-03 08:35:27 UTC (rev 98819)
@@ -6,6 +6,8 @@
 
 - Allow users to specify the domain and port of the wsgi_intercept_layer by
   adding those attributes to the class.
+- Fix testbrowser support a bit so that it performs more like
+  zope.testbrowser.testing.Browser.
 
 2.0.0 (2009-04-01)
 ------------------

Modified: van.testing/trunk/buildout.cfg
===================================================================
--- van.testing/trunk/buildout.cfg	2009-04-03 08:05:56 UTC (rev 98818)
+++ van.testing/trunk/buildout.cfg	2009-04-03 08:35:27 UTC (rev 98819)
@@ -15,3 +15,5 @@
 [test]
 recipe = zc.recipe.testrunner
 eggs = van.testing
+       zope.testbrowser
+defaults = ['-m', 'van.testing']

Modified: van.testing/trunk/van/testing/layer.py
===================================================================
--- van.testing/trunk/van/testing/layer.py	2009-04-03 08:05:56 UTC (rev 98818)
+++ van.testing/trunk/van/testing/layer.py	2009-04-03 08:35:27 UTC (rev 98819)
@@ -104,10 +104,14 @@
     def __call__(self, environ, start_response):
         if environ.get('HTTP_X_ZOPE_HANDLE_ERRORS') == 'False':
             environ['wsgi.handleErrors'] = False
+        if 'HTTP_X_ZOPE_HANDLE_ERRORS' in environ:
+            del environ['HTTP_X_ZOPE_HANDLE_ERRORS']
         def my_start_response(status, headers, exc_info=None):
+            # Behave like zope.testbrowser.testing:
+            # sort response headers and insert status code in first place.
             headers = sorted(headers)
             headers.insert(0, ('Status', status))
-            return start_response(status, sorted(headers), exc_info=exc_info)
+            return start_response(status, headers, exc_info=exc_info)
         return self.application(environ, my_start_response)
 
 

Added: van.testing/trunk/van/testing/testbrowser.txt
===================================================================
--- van.testing/trunk/van/testing/testbrowser.txt	                        (rev 0)
+++ van.testing/trunk/van/testing/testbrowser.txt	2009-04-03 08:35:27 UTC (rev 98819)
@@ -0,0 +1,29 @@
+Using zope.testbrowser
+======================
+
+We can use the zope.testbrowser from wsgi_intercept:
+
+    >>> from wsgi_intercept.zope_testbrowser import WSGI_Browser as Browser
+    >>> browser = Browser()
+
+    >>> browser.open("http://localhost/")
+
+As we expect with the normal testbrowser, headers are sorted with the status first:
+
+    >>> print browser.headers
+    Status: 200 OK
+    Content-length: 586
+    Content-type: text/plain
+    X-Powered-By: WSGI
+    <BLANKLINE>
+
+XXX: the <BLANKLINE> above is a deviation from what happens with the testing
+     testbrowser, how to fix?
+
+Regression: Handle Errors header does not appear in wsgi environ
+----------------------------------------------------------------
+
+    >>> browser.handleErrors = False
+    >>> browser.open("http://localhost/")
+    >>> 'HTTP_X_ZOPE_HANDLE_ERRORS' in browser.contents.upper()
+    False


Property changes on: van.testing/trunk/van/testing/testbrowser.txt
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: van.testing/trunk/van/testing/tests.py
===================================================================
--- van.testing/trunk/van/testing/tests.py	2009-04-03 08:05:56 UTC (rev 98818)
+++ van.testing/trunk/van/testing/tests.py	2009-04-03 08:35:27 UTC (rev 98819)
@@ -19,14 +19,24 @@
 from zope.component import getUtility
 from zope.interface import Interface
 
+try:
+    import zope.testbrowser
+    have_testbrowser = True
+except:
+    have_testbrowser = False
+
 MARKER = 'MARKER'
 _HERE = os.path.dirname(__file__)
 
 def simple_app(environ, start_response):
     """Simplest possible application object"""
-    start_response('200 OK', [('Content-type','text/plain')])
     marker = getUtility(Interface, name=u"test")
-    return [pformat(environ), "\nMarker: %s" % marker]
+    response = pformat(environ) + "\nMarker: %s" % marker
+    start_response('200 OK', [('Content-type', 'text/plain'),
+                              ('X-Powered-By', 'WSGI'),
+                              ('Content-length', len(response)),
+                              ])
+    return [response]
 
 class ZCMLLayer:
     zcml = os.path.join(_HERE, 'ftesting.zcml')
@@ -39,9 +49,11 @@
 wsgi_intercept_layer(FunctionalLayer)
 
 def test_suite():
-    ftest = doctest.DocFileSuite('README.txt')
-    ftest.layer = FunctionalLayer
+    ftests = unittest.TestSuite([doctest.DocFileSuite('README.txt')])
+    ftests.layer = FunctionalLayer
+    if have_testbrowser:
+        ftests.addTest(doctest.DocFileSuite('testbrowser.txt'))
     return unittest.TestSuite([
-            ftest,
+        ftests,
             doctest.DocTestSuite('van.testing.layer'),
             ])



More information about the Checkins mailing list