Log message for revision 110345:
  Moved ``testbrowser`` module into the Testing package.
  

Changed:
  U   Zope/trunk/doc/CHANGES.rst
  U   Zope/trunk/src/Products/Five/browser/tests/aqlegacy_ftest.txt
  U   Zope/trunk/src/Products/Five/browser/tests/test_zope3security.py
  U   Zope/trunk/src/Products/Five/component/makesite.txt
  U   Zope/trunk/src/Products/Five/testbrowser.py
  D   Zope/trunk/src/Products/Five/tests/test_testbrowser.py
  U   Zope/trunk/src/Testing/ZopeTestCase/testPlaceless.py
  A   Zope/trunk/src/Testing/testbrowser.py
  A   Zope/trunk/src/Testing/tests/test_testbrowser.py

-=-
Modified: Zope/trunk/doc/CHANGES.rst
===================================================================
--- Zope/trunk/doc/CHANGES.rst  2010-03-30 22:40:52 UTC (rev 110344)
+++ Zope/trunk/doc/CHANGES.rst  2010-03-30 23:05:20 UTC (rev 110345)
@@ -11,6 +11,8 @@
 Restructuring
 +++++++++++++
 
+- Moved ``testbrowser`` module into the Testing package.
+
 - Moved the code handling ZCML loading into the ``Zope2.App`` package. The
   component architecture is now setup before the application object is created
   or any database connections are opened. So far the CA was setup somewhat

Modified: Zope/trunk/src/Products/Five/browser/tests/aqlegacy_ftest.txt
===================================================================
--- Zope/trunk/src/Products/Five/browser/tests/aqlegacy_ftest.txt       
2010-03-30 22:40:52 UTC (rev 110344)
+++ Zope/trunk/src/Products/Five/browser/tests/aqlegacy_ftest.txt       
2010-03-30 23:05:20 UTC (rev 110345)
@@ -9,7 +9,7 @@
   >>> zcml.load_config("configure.zcml", Products.Five)
   >>> zcml.load_config('aqlegacy.zcml', package=Products.Five.browser.tests)
 
-  >>> from Products.Five.testbrowser import Browser
+  >>> from Testing.testbrowser import Browser
   >>> browser = Browser()
   >>> browser.handleErrors = False
 

Modified: Zope/trunk/src/Products/Five/browser/tests/test_zope3security.py
===================================================================
--- Zope/trunk/src/Products/Five/browser/tests/test_zope3security.py    
2010-03-30 22:40:52 UTC (rev 110344)
+++ Zope/trunk/src/Products/Five/browser/tests/test_zope3security.py    
2010-03-30 23:05:20 UTC (rev 110345)
@@ -37,7 +37,7 @@
     zope.security.management.checkPermission().  We see it works as
     expected:
 
-      >>> from Products.Five.testbrowser import Browser
+      >>> from Testing.testbrowser import Browser
       >>> browser = Browser()
       >>> 
browser.open('http://localhost/test_folder_1_/testoid/@@zope3security.html?permission=zope2.View')
       >>> print browser.contents

Modified: Zope/trunk/src/Products/Five/component/makesite.txt
===================================================================
--- Zope/trunk/src/Products/Five/component/makesite.txt 2010-03-30 22:40:52 UTC 
(rev 110344)
+++ Zope/trunk/src/Products/Five/component/makesite.txt 2010-03-30 23:05:20 UTC 
(rev 110345)
@@ -30,7 +30,7 @@
 
 Create the test browser we'll be using:
 
-    >>> from Products.Five.testbrowser import Browser
+    >>> from Testing.testbrowser import Browser
     >>> browser = Browser()
     >>> browser.addHeader('Authorization', 'Basic manager:r00t')
 

Modified: Zope/trunk/src/Products/Five/testbrowser.py
===================================================================
--- Zope/trunk/src/Products/Five/testbrowser.py 2010-03-30 22:40:52 UTC (rev 
110344)
+++ Zope/trunk/src/Products/Five/testbrowser.py 2010-03-30 23:05:20 UTC (rev 
110345)
@@ -1,118 +1,10 @@
-##############################################################################
-#
-# Copyright (c) 2006 Zope Corporation 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.
-#
-##############################################################################
-"""Support for using zope.testbrowser from Zope2.
+# BBB
 
-Mostly just copy and paste from zope.testbrowser.testing.
+from zope.deferredimport import deprecated
 
-$Id$
-"""
-
-import sys
-import socket
-import urllib2
-
-import mechanize
-
-from zope.testbrowser import testing
-from zope.testbrowser import browser
-import zope.publisher.http
-
-
-class PublisherConnection(testing.PublisherConnection):
-
-    def __init__(self, host, timeout=None):
-        from Testing.ZopeTestCase.zopedoctest.functional import http
-        self.caller = http
-        self.host = host
-
-    def getresponse(self):
-        """Return a ``urllib2`` compatible response.
-
-        The goal of ths method is to convert the Zope Publisher's reseponse to
-        a ``urllib2`` compatible response, which is also understood by
-        mechanize.
-        """
-        real_response = self.response._response
-        status = real_response.getStatus()
-        reason = zope.publisher.http.status_reasons[real_response.status]
-        headers = []
-        # Convert header keys to camel case. This is basically a copy
-        # paste from ZPublisher.HTTPResponse
-        for key, val in real_response.headers.items():
-            if key.lower() == key:
-                # only change non-literal header names
-                key = "%s%s" % (key[:1].upper(), key[1:])
-                start = 0
-                l = key.find('-',start)
-                while l >= start:
-                    key = "%s-%s%s" % (key[:l],key[l+1:l+2].upper(),key[l+2:])
-                    start = l + 1
-                    l = key.find('-', start)
-            headers.append((key, val))
-        # get the cookies, breaking them into tuples for sorting
-        cookies = [(c[:10], c[12:]) for c in real_response._cookie_list()]
-        headers.extend(cookies)
-        headers.sort()
-        headers.insert(0, ('Status', "%s %s" % (status, reason)))
-        headers = '\r\n'.join('%s: %s' % h for h in headers)
-        content = real_response.body
-        return testing.PublisherResponse(content, headers, status, reason)
-
-
-class PublisherHTTPHandler(urllib2.HTTPHandler):
-    """Special HTTP handler to use the Zope Publisher."""
-
-    http_request = urllib2.AbstractHTTPHandler.do_request_
-
-    def http_open(self, req):
-        """Open an HTTP connection having a ``urllib2`` 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(PublisherConnection, req)
-
-
-class PublisherMechanizeBrowser(mechanize.Browser):
-    """Special ``mechanize`` browser using the Zope Publisher HTTP handler."""
-
-    default_schemes = ['http']
-    default_others = ['_http_error', '_http_request_upgrade',
-                      '_http_default_error']
-    default_features = ['_redirect', '_cookies', '_referer', '_refresh',
-                        '_equiv', '_basicauth', '_digestauth' ]
-
-    def __init__(self, *args, **kws):
-        inherited_handlers = ['_unknown', '_http_error',
-            '_http_request_upgrade', '_http_default_error', '_basicauth',
-            '_digestauth', '_redirect', '_cookies', '_referer',
-            '_refresh', '_equiv', '_gzip']
-
-        self.handler_classes = {"http": PublisherHTTPHandler}
-        for name in inherited_handlers:
-            self.handler_classes[name] = 
mechanize.Browser.handler_classes[name]
-
-        mechanize.Browser.__init__(self, *args, **kws)
-
-
-class Browser(browser.Browser):
-    """A Zope ``testbrowser` Browser that uses the Zope Publisher."""
-
-    def __init__(self, url=None):
-        mech_browser = PublisherMechanizeBrowser()
-        # override the http handler class
-        mech_browser.handler_classes["http"] = PublisherHTTPHandler
-        super(Browser, self).__init__(url=url, mech_browser=mech_browser)
-
+deprecated("Please import from Testing.testbrowser",
+    PublisherConnection = 'Testing.testbrowser:PublisherConnection',
+    PublisherHTTPHandler = 'Testing.testbrowser:PublisherHTTPHandler',
+    PublisherMechanizeBrowser = 
'Testing.testbrowser:PublisherMechanizeBrowser',
+    Browser = 'Testing.testbrowser:Browser',
+)

Deleted: Zope/trunk/src/Products/Five/tests/test_testbrowser.py
===================================================================
--- Zope/trunk/src/Products/Five/tests/test_testbrowser.py      2010-03-30 
22:40:52 UTC (rev 110344)
+++ Zope/trunk/src/Products/Five/tests/test_testbrowser.py      2010-03-30 
23:05:20 UTC (rev 110345)
@@ -1,83 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004, 2005 Zope Corporation 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.
-#
-##############################################################################
-"""Unit tests for the testbrowser module.
-
-$Id$
-"""
-
-import unittest
-from Testing.ZopeTestCase import FunctionalDocTestSuite
-from OFS.SimpleItem import Item
-
-class CookieStub(Item):
-    """This is a cookie stub."""
-
-    def __call__(self, REQUEST):
-        REQUEST.RESPONSE.setCookie('evil', 'cookie')
-        return 'Stub'
-
-def doctest_cookies():
-    """
-    We want to make sure that our testbrowser correctly understands
-    cookies.  We'll add a stub to ``self.folder`` that sets a cookie.
-
-        >>> from Products.Five.tests.test_testbrowser import CookieStub
-        >>> self.folder._setObject('stub', CookieStub())
-        'stub'
-
-    This response looks alright:
-
-        >>> response = self.publish('/test_folder_1_/stub')
-        >>> print str(response) #doctest: +ELLIPSIS
-        Status: 200 OK
-        ...
-        Set-Cookie: evil="cookie"
-        ...
-
-    Let's try to look at the same folder with testbrowser:
-
-        >>> from Products.Five.testbrowser import Browser
-        >>> browser = Browser()
-        >>> browser.open('http://localhost/test_folder_1_/stub')
-        >>> 'Set-Cookie: evil="cookie"' in str(browser.headers)
-        True
-    """
-
-def doctest_camel_case_headers():
-    """Make sure that the headers come out in camel case.
-
-    Some setup:
-
-        >>> from Products.Five.tests.test_testbrowser import CookieStub
-        >>> self.folder._setObject('stub', CookieStub())
-        'stub'
-
-    The Zope2 response mungs headers so they come out in camel case we should
-    do the same. This is also more consistent with the Zope3 testbrowser tests.
-    We will test a few:
-
-        >>> from Products.Five.testbrowser import Browser
-        >>> browser = Browser()
-        >>> browser.open('http://localhost/test_folder_1_/stub')
-        >>> 'Content-Length: ' in str(browser.headers)
-        True
-        >>> 'Content-Type: ' in str(browser.headers)
-        True
-    """
-
-
-def test_suite():
-    return unittest.TestSuite((
-            FunctionalDocTestSuite(),
-            ))

Modified: Zope/trunk/src/Testing/ZopeTestCase/testPlaceless.py
===================================================================
--- Zope/trunk/src/Testing/ZopeTestCase/testPlaceless.py        2010-03-30 
22:40:52 UTC (rev 110344)
+++ Zope/trunk/src/Testing/ZopeTestCase/testPlaceless.py        2010-03-30 
23:05:20 UTC (rev 110345)
@@ -76,7 +76,6 @@
         tearDown()
 
     def testSimple(self):
-        # SetUp according to Five's adapter test
         setUp()
         setupZCML()
         # Now we have a fixture that should work for adaptation

Copied: Zope/trunk/src/Testing/testbrowser.py (from rev 110303, 
Zope/trunk/src/Products/Five/testbrowser.py)
===================================================================
--- Zope/trunk/src/Testing/testbrowser.py                               (rev 0)
+++ Zope/trunk/src/Testing/testbrowser.py       2010-03-30 23:05:20 UTC (rev 
110345)
@@ -0,0 +1,115 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Corporation 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.
+#
+##############################################################################
+"""Support for using zope.testbrowser from Zope2.
+
+Mostly just copy and paste from zope.testbrowser.testing.
+"""
+
+import sys
+import socket
+import urllib2
+
+import mechanize
+
+from zope.testbrowser import testing
+from zope.testbrowser import browser
+import zope.publisher.http
+
+
+class PublisherConnection(testing.PublisherConnection):
+
+    def __init__(self, host, timeout=None):
+        from Testing.ZopeTestCase.zopedoctest.functional import http
+        self.caller = http
+        self.host = host
+
+    def getresponse(self):
+        """Return a ``urllib2`` compatible response.
+
+        The goal of ths method is to convert the Zope Publisher's reseponse to
+        a ``urllib2`` compatible response, which is also understood by
+        mechanize.
+        """
+        real_response = self.response._response
+        status = real_response.getStatus()
+        reason = zope.publisher.http.status_reasons[real_response.status]
+        headers = []
+        # Convert header keys to camel case. This is basically a copy
+        # paste from ZPublisher.HTTPResponse
+        for key, val in real_response.headers.items():
+            if key.lower() == key:
+                # only change non-literal header names
+                key = "%s%s" % (key[:1].upper(), key[1:])
+                start = 0
+                l = key.find('-',start)
+                while l >= start:
+                    key = "%s-%s%s" % (key[:l],key[l+1:l+2].upper(),key[l+2:])
+                    start = l + 1
+                    l = key.find('-', start)
+            headers.append((key, val))
+        # get the cookies, breaking them into tuples for sorting
+        cookies = [(c[:10], c[12:]) for c in real_response._cookie_list()]
+        headers.extend(cookies)
+        headers.sort()
+        headers.insert(0, ('Status', "%s %s" % (status, reason)))
+        headers = '\r\n'.join('%s: %s' % h for h in headers)
+        content = real_response.body
+        return testing.PublisherResponse(content, headers, status, reason)
+
+
+class PublisherHTTPHandler(urllib2.HTTPHandler):
+    """Special HTTP handler to use the Zope Publisher."""
+
+    http_request = urllib2.AbstractHTTPHandler.do_request_
+
+    def http_open(self, req):
+        """Open an HTTP connection having a ``urllib2`` 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(PublisherConnection, req)
+
+
+class PublisherMechanizeBrowser(mechanize.Browser):
+    """Special ``mechanize`` browser using the Zope Publisher HTTP handler."""
+
+    default_schemes = ['http']
+    default_others = ['_http_error', '_http_request_upgrade',
+                      '_http_default_error']
+    default_features = ['_redirect', '_cookies', '_referer', '_refresh',
+                        '_equiv', '_basicauth', '_digestauth' ]
+
+    def __init__(self, *args, **kws):
+        inherited_handlers = ['_unknown', '_http_error',
+            '_http_request_upgrade', '_http_default_error', '_basicauth',
+            '_digestauth', '_redirect', '_cookies', '_referer',
+            '_refresh', '_equiv', '_gzip']
+
+        self.handler_classes = {"http": PublisherHTTPHandler}
+        for name in inherited_handlers:
+            self.handler_classes[name] = 
mechanize.Browser.handler_classes[name]
+
+        mechanize.Browser.__init__(self, *args, **kws)
+
+
+class Browser(browser.Browser):
+    """A Zope ``testbrowser` Browser that uses the Zope Publisher."""
+
+    def __init__(self, url=None):
+        mech_browser = PublisherMechanizeBrowser()
+        # override the http handler class
+        mech_browser.handler_classes["http"] = PublisherHTTPHandler
+        super(Browser, self).__init__(url=url, mech_browser=mech_browser)

Copied: Zope/trunk/src/Testing/tests/test_testbrowser.py (from rev 110303, 
Zope/trunk/src/Products/Five/tests/test_testbrowser.py)
===================================================================
--- Zope/trunk/src/Testing/tests/test_testbrowser.py                            
(rev 0)
+++ Zope/trunk/src/Testing/tests/test_testbrowser.py    2010-03-30 23:05:20 UTC 
(rev 110345)
@@ -0,0 +1,82 @@
+##############################################################################
+#
+# Copyright (c) 2004, 2005 Zope Corporation 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.
+#
+##############################################################################
+"""Unit tests for the testbrowser module.
+
+$Id$
+"""
+
+import unittest
+from Testing.ZopeTestCase import FunctionalDocTestSuite
+from OFS.SimpleItem import Item
+
+class CookieStub(Item):
+    """This is a cookie stub."""
+
+    def __call__(self, REQUEST):
+        REQUEST.RESPONSE.setCookie('evil', 'cookie')
+        return 'Stub'
+
+def doctest_cookies():
+    """
+    We want to make sure that our testbrowser correctly understands
+    cookies.  We'll add a stub to ``self.folder`` that sets a cookie.
+
+        >>> from Testing.tests.test_testbrowser import CookieStub
+        >>> self.folder._setObject('stub', CookieStub())
+        'stub'
+
+    This response looks alright:
+
+        >>> response = self.publish('/test_folder_1_/stub')
+        >>> print str(response) #doctest: +ELLIPSIS
+        Status: 200 OK
+        ...
+        Set-Cookie: evil="cookie"
+        ...
+
+    Let's try to look at the same folder with testbrowser:
+
+        >>> from Testing.testbrowser import Browser
+        >>> browser = Browser()
+        >>> browser.open('http://localhost/test_folder_1_/stub')
+        >>> 'Set-Cookie: evil="cookie"' in str(browser.headers)
+        True
+    """
+
+def doctest_camel_case_headers():
+    """Make sure that the headers come out in camel case.
+
+    Some setup:
+
+        >>> from Testing.tests.test_testbrowser import CookieStub
+        >>> self.folder._setObject('stub', CookieStub())
+        'stub'
+
+    The Zope2 response mungs headers so they come out in camel case we should
+    do the same. We will test a few:
+
+        >>> from Testing.testbrowser import Browser
+        >>> browser = Browser()
+        >>> browser.open('http://localhost/test_folder_1_/stub')
+        >>> 'Content-Length: ' in str(browser.headers)
+        True
+        >>> 'Content-Type: ' in str(browser.headers)
+        True
+    """
+
+
+def test_suite():
+    return unittest.TestSuite((
+            FunctionalDocTestSuite(),
+            ))

_______________________________________________
Zope-Checkins maillist  -  Zope-Checkins@zope.org
https://mail.zope.org/mailman/listinfo/zope-checkins

Reply via email to