[Checkins] SVN: zope.testbrowser/branches/jinty-webtest3/ * Dramatically reduce testing dependencies by moving the zope.app.testing based
Brian Sutherland
jinty at web.de
Sun Jan 30 08:46:23 EST 2011
Log message for revision 120009:
* Dramatically reduce testing dependencies by moving the zope.app.testing based
Browser to zope.app.testing. Leave BBB imports in place and test them.
* Bump version to 4.0.0.
Changed:
U zope.testbrowser/branches/jinty-webtest3/CHANGES.txt
U zope.testbrowser/branches/jinty-webtest3/buildout.cfg
U zope.testbrowser/branches/jinty-webtest3/setup.py
U zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/README.txt
A zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/connection.py
U zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/cookies.txt
D zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/ftests/ftesting.zcml
U zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/testing.py
A zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/tests/test_bbb.py
U zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/tests/test_doctests.py
U zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/webtest.py
D zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/zope-publisher.txt
-=-
Modified: zope.testbrowser/branches/jinty-webtest3/CHANGES.txt
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/CHANGES.txt 2011-01-30 13:30:33 UTC (rev 120008)
+++ zope.testbrowser/branches/jinty-webtest3/CHANGES.txt 2011-01-30 13:46:23 UTC (rev 120009)
@@ -2,7 +2,7 @@
CHANGES
=======
-3.11.2 (unreleased)
+4.0.0 (unreleased)
-------------------
- Integrate with WebTest. ``zope.testbrowser.wsgi.Browser`` is a new
Modified: zope.testbrowser/branches/jinty-webtest3/buildout.cfg
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/buildout.cfg 2011-01-30 13:30:33 UTC (rev 120008)
+++ zope.testbrowser/branches/jinty-webtest3/buildout.cfg 2011-01-30 13:46:23 UTC (rev 120009)
@@ -1,12 +1,17 @@
[buildout]
develop = .
-parts = test interpreter
+parts = test test_bbb interpreter
[test]
recipe = zc.recipe.testrunner
defaults = ['--tests-pattern', '^f?tests$']
-eggs = zope.testbrowser [test, wsgi]
+eggs = zope.testbrowser [test]
+[test_bbb]
+recipe = zc.recipe.testrunner
+defaults = ['--tests-pattern', '^f?tests$']
+eggs = zope.testbrowser [test,test_bbb]
+
[interpreter]
recipe = zc.recipe.egg
eggs = zope.testbrowser
Modified: zope.testbrowser/branches/jinty-webtest3/setup.py
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/setup.py 2011-01-30 13:30:33 UTC (rev 120008)
+++ zope.testbrowser/branches/jinty-webtest3/setup.py 2011-01-30 13:46:23 UTC (rev 120009)
@@ -27,7 +27,7 @@
setup(
name = 'zope.testbrowser',
- version='3.11.2dev',
+ version='4.0.0dev',
url = 'http://pypi.python.org/pypi/zope.testbrowser',
license = 'ZPL 2.1',
description = 'Programmable browser for functional black-box tests',
@@ -57,22 +57,19 @@
],
extras_require = {
'test': [
- 'WebTest',
- 'zope.browserpage',
- 'zope.component',
- 'zope.container',
- 'zope.principalregistry',
- 'zope.publisher',
- 'zope.security',
- 'zope.site',
- 'zope.traversing',
- 'zope.app.appsetup',
- 'zope.app.publication',
- 'zope.app.testing >= 3.8.1',
+ 'zope.testing',
+ 'zope.pagetemplate',
+ 'zope.testbrowser [webtest,wsgi]',
],
+ 'test_bbb': [
+ 'zope.testbrowser [test,zope-functional-testing]',
+ ],
'zope-functional-testing': [
- 'zope.app.testing',
+ 'zope.app.testing >= 3.9.0dev',
],
+ 'webtest': [
+ 'WebTest',
+ ],
'wsgi': [
'wsgi_intercept',
]
Modified: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/README.txt
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/README.txt 2011-01-30 13:30:33 UTC (rev 120008)
+++ zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/README.txt 2011-01-30 13:46:23 UTC (rev 120009)
@@ -59,13 +59,6 @@
Hello world!
...
-There is also a special version of the ``Browser`` class used to do functional
-testing of Zope 3 applications, it can be imported from
-``zope.testbrowser.testing``:
-
- >>> from zope.testbrowser.testing import Browser as TestingBrowser
- >>> browser = TestingBrowser()
-
Bowser Usage
------------
Added: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/connection.py
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/connection.py (rev 0)
+++ zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/connection.py 2011-01-30 13:46:23 UTC (rev 120009)
@@ -0,0 +1,96 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Base classes sometimes useful to implement browsers
+"""
+import cStringIO
+import httplib
+import mechanize
+import socket
+import sys
+import zope.testbrowser.browser
+
+
+class Response(object):
+ """``mechanize`` compatible response object."""
+
+ def __init__(self, content, headers, status, reason):
+ self.content = content
+ self.status = status
+ self.reason = reason
+ self.msg = httplib.HTTPMessage(cStringIO.StringIO(headers), 0)
+ self.content_as_file = cStringIO.StringIO(self.content)
+
+ def read(self, amt=None):
+ return self.content_as_file.read(amt)
+
+ def close(self):
+ """To overcome changes in mechanize and socket in python2.5"""
+ pass
+
+class HTTPHandler(mechanize.HTTPHandler):
+
+ def _connect(self, *args, **kw):
+ raise NotImplementedError("implement")
+
+ def http_request(self, req):
+ # look at data and set content type
+ if req.has_data():
+ data = req.get_data()
+ if isinstance(data, dict):
+ req.add_data(data['body'])
+ req.add_unredirected_header('Content-type',
+ data['content-type'])
+ return mechanize.HTTPHandler.do_request_(self, req)
+
+ https_request = http_request
+
+ def http_open(self, req):
+ """Open an HTTP connection having a ``mechanize`` request."""
+ # Here we connect to the publisher.
+ if sys.version_info > (2, 6) and not hasattr(req, 'timeout'):
+ # Workaround mechanize incompatibility with Python
+ # 2.6. See: LP #280334
+ req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT
+ return self.do_open(self._connect, req)
+
+ https_open = http_open
+
+class MechanizeBrowser(mechanize.Browser):
+ """Special ``mechanize`` browser using the Zope Publisher HTTP handler."""
+
+ default_schemes = ['http']
+ default_others = ['_http_error', '_http_default_error']
+ default_features = ['_redirect', '_cookies', '_referer', '_refresh',
+ '_equiv', '_basicauth', '_digestauth']
+
+
+ def __init__(self, *args, **kws):
+ inherited_handlers = ['_unknown', '_http_error',
+ '_http_default_error', '_basicauth',
+ '_digestauth', '_redirect', '_cookies', '_referer',
+ '_refresh', '_equiv', '_gzip']
+
+ self.handler_classes = {"http": self._http_handler}
+ for name in inherited_handlers:
+ self.handler_classes[name] = mechanize.Browser.handler_classes[name]
+
+ kws['request_class'] = kws.get('request_class',
+ mechanize._request.Request)
+
+ mechanize.Browser.__init__(self, *args, **kws)
+
+ def _http_handler(self, *args, **kw):
+ return NotImplementedError("Try return a sub-class of PublisherHTTPHandler here")
+
+
Property changes on: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/connection.py
___________________________________________________________________
Added: svn:eol-style
+ native
Modified: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/cookies.txt
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/cookies.txt 2011-01-30 13:30:33 UTC (rev 120008)
+++ zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/cookies.txt 2011-01-30 13:46:23 UTC (rev 120009)
@@ -227,7 +227,7 @@
... 'http://localhost/set_cookie.html?name=max&value=min&'
... 'max-age=3000&&comment=silly+billy')
>>> pprint.pprint(browser.cookies.getinfo('max')) # doctest: +ELLIPSIS
- {'comment': 'silly billy',
+ {'comment': '"silly billy"',
'commenturl': None,
'domain': 'localhost.local',
'expires': datetime.datetime(..., tzinfo=<UTC>),
@@ -256,7 +256,7 @@
'port': None,
'secure': False,
'value': 'bar'},
- {'comment': 'silly billy',
+ {'comment': '"silly billy"',
'commenturl': None,
'domain': 'localhost.local',
'expires': datetime.datetime(..., tzinfo=<UTC>),
Deleted: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/ftests/ftesting.zcml
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/ftests/ftesting.zcml 2011-01-30 13:30:33 UTC (rev 120008)
+++ zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/ftests/ftesting.zcml 2011-01-30 13:46:23 UTC (rev 120009)
@@ -1,42 +0,0 @@
-<configure
- xmlns="http://namespaces.zope.org/zope"
- xmlns:browser="http://namespaces.zope.org/browser"
- i18n_domain="zope"
- package="zope.testbrowser"
- >
-
- <!-- This file is used for functional testing setup -->
-
- <include package="zope.browserpage" file="meta.zcml" />
- <include package="zope.component" file="meta.zcml" />
- <include package="zope.security" file="meta.zcml" />
- <include package="zope.app.publication" file="meta.zcml" />
-
- <include package="zope.container" />
- <include package="zope.principalregistry" />
- <include package="zope.publisher" />
- <include package="zope.security" />
- <include package="zope.site" />
- <include package="zope.traversing" />
-
- <include package="zope.app.appsetup" />
- <include package="zope.app.publication" />
-
- <securityPolicy
- component="zope.security.simplepolicies.PermissiveSecurityPolicy" />
-
- <browser:page
- name="echo.html"
- for="*"
- class=".ftests.Echo"
- permission="zope.Public"
- />
-
- <browser:page
- name="echo_one.html"
- for="*"
- class=".ftests.EchoOne"
- permission="zope.Public"
- />
-
-</configure>
Modified: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/testing.py
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/testing.py 2011-01-30 13:30:33 UTC (rev 120008)
+++ zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/testing.py 2011-01-30 13:46:23 UTC (rev 120009)
@@ -11,187 +11,21 @@
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
-"""Zope 3-specific testing code
+"""BBB for Zope 3-specific testing code
"""
-import cStringIO
-import httplib
-import mechanize
-import socket
-import sys
-import zope.testbrowser.browser
-#
-# Base classes sometimes useful to implement browsers
-#
+from zope.testbrowser.connection import Response as PublisherResponse
-class Response(object):
- """``mechanize`` compatible response object."""
+try:
+ import zope.app.testing
+ have_zope_app_testing = True
+except ImportError:
+ have_zope_app_testing = False
- def __init__(self, content, headers, status, reason):
- self.content = content
- self.status = status
- self.reason = reason
- self.msg = httplib.HTTPMessage(cStringIO.StringIO(headers), 0)
- self.content_as_file = cStringIO.StringIO(self.content)
+if have_zope_app_testing:
+ from zope.app.testing.testbrowser import (PublisherConnection,
+ PublisherHTTPHandler,
+ PublisherMechanizeBrowser,
+ Browser)
- def read(self, amt=None):
- return self.content_as_file.read(amt)
-
- def close(self):
- """To overcome changes in mechanize and socket in python2.5"""
- pass
-
-class HTTPHandler(mechanize.HTTPHandler):
-
- def _connect(self, *args, **kw):
- raise NotImplementedError("implement")
-
- def http_request(self, req):
- # look at data and set content type
- if req.has_data():
- data = req.get_data()
- if isinstance(data, dict):
- req.add_data(data['body'])
- req.add_unredirected_header('Content-type',
- data['content-type'])
- return mechanize.HTTPHandler.do_request_(self, req)
-
- https_request = http_request
-
- def http_open(self, req):
- """Open an HTTP connection having a ``mechanize`` request."""
- # Here we connect to the publisher.
- if sys.version_info > (2, 6) and not hasattr(req, 'timeout'):
- # Workaround mechanize incompatibility with Python
- # 2.6. See: LP #280334
- req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT
- return self.do_open(self._connect, req)
-
- https_open = http_open
-
-class MechanizeBrowser(mechanize.Browser):
- """Special ``mechanize`` browser using the Zope Publisher HTTP handler."""
-
- default_schemes = ['http']
- default_others = ['_http_error', '_http_default_error']
- default_features = ['_redirect', '_cookies', '_referer', '_refresh',
- '_equiv', '_basicauth', '_digestauth']
-
-
- def __init__(self, *args, **kws):
- inherited_handlers = ['_unknown', '_http_error',
- '_http_default_error', '_basicauth',
- '_digestauth', '_redirect', '_cookies', '_referer',
- '_refresh', '_equiv', '_gzip']
-
- self.handler_classes = {"http": self._http_handler}
- for name in inherited_handlers:
- self.handler_classes[name] = mechanize.Browser.handler_classes[name]
-
- kws['request_class'] = kws.get('request_class',
- mechanize._request.Request)
-
- mechanize.Browser.__init__(self, *args, **kws)
-
- def _http_handler(self, *args, **kw):
- return NotImplementedError("Try return a sub-class of PublisherHTTPHandler here")
-
-#
-# Zope Publisher Browser implementation
-#
-
-PublisherResponse = Response # BBB
-
-class PublisherConnection(object):
- """A ``mechanize`` compatible connection object."""
-
- def __init__(self, host, timeout=None):
- from zope.app.testing.functional import HTTPCaller
- self.caller = HTTPCaller()
- self.host = host
-
- def set_debuglevel(self, level):
- pass
-
- def _quote(self, url):
- # the publisher expects to be able to split on whitespace, so we have
- # to make sure there is none in the URL
- return url.replace(' ', '%20')
-
- def request(self, method, url, body=None, headers=None):
- """Send a request to the publisher.
-
- The response will be stored in ``self.response``.
- """
- if body is None:
- body = ''
-
- if url == '':
- url = '/'
-
- url = self._quote(url)
- # Extract the handle_error option header
- if sys.version_info >= (2,5):
- handle_errors_key = 'X-Zope-Handle-Errors'
- else:
- handle_errors_key = 'X-zope-handle-errors'
- handle_errors_header = headers.get(handle_errors_key, True)
- if handle_errors_key in headers:
- del headers[handle_errors_key]
- # Translate string to boolean.
- handle_errors = {'False': False}.get(handle_errors_header, True)
-
- # Construct the headers.
- header_chunks = []
- if headers is not None:
- for header in headers.items():
- header_chunks.append('%s: %s' % header)
- headers = '\n'.join(header_chunks) + '\n'
- else:
- headers = ''
-
- # Construct the full HTTP request string, since that is what the
- # ``HTTPCaller`` wants.
- request_string = (method + ' ' + url + ' HTTP/1.1\n'
- + headers + '\n' + body)
- self.response = self.caller(request_string, handle_errors)
-
- def getresponse(self):
- """Return a ``mechanize`` compatible response.
-
- The goal of ths method is to convert the Zope Publisher's reseponse to
- a ``mechanize`` compatible response, which is also understood by
- mechanize.
- """
- real_response = self.response._response
- status = real_response.getStatus()
- reason = real_response._reason # XXX add a getReason method
-
- headers = real_response.getHeaders()
- headers.sort()
- headers.insert(0, ('Status', real_response.getStatusString()))
- headers = '\r\n'.join('%s: %s' % h for h in headers)
- content = real_response.consumeBody()
- return Response(content, headers, status, reason)
-
-
-class PublisherHTTPHandler(HTTPHandler):
- """Special HTTP handler to use the Zope Publisher."""
-
- def _connect(self, *args, **kw):
- return PublisherConnection(*args, **kw)
-
-
-class PublisherMechanizeBrowser(MechanizeBrowser):
- """Special ``mechanize`` browser using the Zope Publisher HTTP handler."""
-
- def _http_handler(self, *args, **kw):
- return PublisherHTTPHandler(*args, **kw)
-
-
-class Browser(zope.testbrowser.browser.Browser):
- """A Zope `testbrowser` Browser that uses the Zope Publisher."""
-
- def __init__(self, url=None):
- mech_browser = PublisherMechanizeBrowser()
- super(Browser, self).__init__(url=url, mech_browser=mech_browser)
+del have_zope_app_testing
Added: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/tests/test_bbb.py
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/tests/test_bbb.py (rev 0)
+++ zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/tests/test_bbb.py 2011-01-30 13:46:23 UTC (rev 120009)
@@ -0,0 +1,32 @@
+##############################################################################
+#
+# Copyright (c) 2011 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+import unittest
+
+class TestZopeAppTesting(unittest.TestCase):
+
+ def test_import(self):
+ from zope.testbrowser.testing import Browser
+ browser = Browser()
+
+def test_suite():
+ suite = unittest.TestSuite()
+ loader = unittest.TestLoader().loadTestsFromTestCase
+
+ try:
+ import zope.app.testing
+ suite.addTest(loader(TestZopeAppTesting))
+ except ImportError:
+ pass
+
+ return suite
Property changes on: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/tests/test_bbb.py
___________________________________________________________________
Added: svn:eol-style
+ native
Modified: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/tests/test_doctests.py
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/tests/test_doctests.py 2011-01-30 13:30:33 UTC (rev 120008)
+++ zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/tests/test_doctests.py 2011-01-30 13:46:23 UTC (rev 120009)
@@ -14,29 +14,16 @@
import doctest
import pkg_resources
import unittest
-import zope.app.testing.functional
import zope.testbrowser.ftests.wsgitestapp
import zope.testbrowser.webtest
-
-TestBrowserLayer = zope.app.testing.functional.ZCMLLayer(
- pkg_resources.resource_filename(
- 'zope.testbrowser', 'ftests/ftesting.zcml'),
- __name__, 'TestBrowserLayer', allow_teardown=True)
-
def make_browser(*args, **kw):
app = zope.testbrowser.ftests.wsgitestapp.WSGITestApplication()
return zope.testbrowser.webtest.Browser(app, *args, **kw)
def test_suite():
flags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS
-
- zope_publisher = zope.app.testing.functional.FunctionalDocFileSuite('zope-publisher.txt',
- optionflags=flags,
- package='zope.testbrowser',
- checker=zope.testbrowser.tests.helper.checker)
- zope_publisher.layer = TestBrowserLayer
suite = doctest.DocFileSuite(
'README.txt',
@@ -52,4 +39,4 @@
package='zope.testbrowser')
wire.level = 2
- return unittest.TestSuite((zope_publisher, suite, wire))
+ return unittest.TestSuite((suite, wire))
Modified: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/webtest.py
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/webtest.py 2011-01-30 13:30:33 UTC (rev 120008)
+++ zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/webtest.py 2011-01-30 13:46:23 UTC (rev 120009)
@@ -26,7 +26,7 @@
from webtest import TestApp
import zope.testbrowser.browser
-import zope.testbrowser.testing
+import zope.testbrowser.connection
class WSGIConnection(object):
"""A ``mechanize`` compatible connection object."""
@@ -111,14 +111,14 @@
headers.insert(0, ('Status', response.status))
headers = '\r\n'.join('%s: %s' % h for h in headers)
content = response.body
- return zope.testbrowser.testing.Response(content, headers, status, reason)
+ return zope.testbrowser.connection.Response(content, headers, status, reason)
-class WSGIHTTPHandler(zope.testbrowser.testing.HTTPHandler):
+class WSGIHTTPHandler(zope.testbrowser.connection.HTTPHandler):
def __init__(self, test_app, *args, **kw):
self._test_app = test_app
- zope.testbrowser.testing.HTTPHandler.__init__(self, *args, **kw)
+ zope.testbrowser.connection.HTTPHandler.__init__(self, *args, **kw)
def _connect(self, *args, **kw):
return WSGIConnection(self._test_app, *args, **kw)
@@ -128,12 +128,12 @@
return self.http_request(req)
-class WSGIMechanizeBrowser(zope.testbrowser.testing.MechanizeBrowser):
+class WSGIMechanizeBrowser(zope.testbrowser.connection.MechanizeBrowser):
"""Special ``mechanize`` browser using the WSGI HTTP handler."""
def __init__(self, test_app, *args, **kw):
self._test_app = test_app
- zope.testbrowser.testing.MechanizeBrowser.__init__(self, *args, **kw)
+ zope.testbrowser.connection.MechanizeBrowser.__init__(self, *args, **kw)
def _http_handler(self, *args, **kw):
return WSGIHTTPHandler(self._test_app, *args, **kw)
Deleted: zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/zope-publisher.txt
===================================================================
--- zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/zope-publisher.txt 2011-01-30 13:30:33 UTC (rev 120008)
+++ zope.testbrowser/branches/jinty-webtest3/src/zope/testbrowser/zope-publisher.txt 2011-01-30 13:46:23 UTC (rev 120009)
@@ -1,81 +0,0 @@
-Zope Publisher Browser Tests
-============================
-
-These tests specifically test the implementation of Browser which uses the Zope
-Publisher via zope.app.testing as the application to test.
-
- >>> from zope.testbrowser.testing import Browser
- >>> browser = Browser()
-
-Error Handling
---------------
-
-handleErrors works as advertised:
-
- >>> browser.handleErrors
- True
- >>> browser.open('http://localhost/invalid')
- Traceback (most recent call last):
- ...
- HTTPError: HTTP Error 404: Not Found
-
-So when we tell the publisher not to handle the errors,
-
- >>> browser.handleErrors = False
- >>> browser.open('http://localhost/invalid')
- Traceback (most recent call last):
- ...
- NotFound: Object: <zope.site.folder.Folder object at ...>,
- name: u'invalid'
-
-Spaces in URLs
---------------
-
-Spaces in URLs don't cause blowups:
-
- >>> browser.open('http://localhost/space here')
- Traceback (most recent call last):
- ...
- NotFound: Object: <zope.site.folder.Folder object at ...>,
- name: u'space here'
-
-Headers
--------
-
-Sending arbitrary headers works:
-
- >>> browser.addHeader('Accept-Language', 'en-US')
- >>> browser.open('http://localhost/echo_one.html?var=HTTP_ACCEPT_LANGUAGE')
- >>> print browser.contents
- 'en-US'
-
-POST
-----
-
-HTTP posts are correctly sent:
-
- >>> browser.post('http://localhost/echo.html', 'x=1&y=2')
- >>> print browser.contents
- CONTENT_LENGTH: 7
- CONTENT_TYPE: application/x-www-form-urlencoded
- HTTP_ACCEPT_LANGUAGE: en-US
- HTTP_CONNECTION: close
- HTTP_HOST: localhost
- HTTP_USER_AGENT: Python-urllib/2.4
- PATH_INFO: /echo.html
- REQUEST_METHOD: POST
- x: 1
- y: 2
- Body: ''
-
-Returned headers
-----------------
-
-Server headers are correctly returned:
-
- >>> print browser.headers
- Status: 200 OK
- Content-Length: 123
- Content-Type: text/plain;charset=utf-8
- X-Content-Type-Warning: guessed from content
- X-Powered-By: Zope (www.zope.org), Python (www.python.org)
More information about the checkins
mailing list