[Zope-Checkins]
SVN: Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/
Remove dochttp.py and use the one form zope.app.tests.
Stefan H. Holek
stefan at epy.co.at
Fri Mar 18 05:21:52 EST 2005
Log message for revision 29549:
Remove dochttp.py and use the one form zope.app.tests.
Changed:
U Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/doc/CHANGES.txt
D Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/ztc_doctest/dochttp.py
D Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/ztc_doctest/test_dochttp.py
-=-
Modified: Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/doc/CHANGES.txt
===================================================================
--- Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/doc/CHANGES.txt 2005-03-18 10:20:25 UTC (rev 29548)
+++ Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/doc/CHANGES.txt 2005-03-18 10:21:52 UTC (rev 29549)
@@ -5,6 +5,7 @@
packages anyway.
- Removed warnhook.py, we now use the one from ZODB.tests.
- Removed doctest.py, we now use the one from zope.testing.
+- Removed dochttp.py + test, we now use the one from zope.app.tests.
0.9.6
- Dropped support for Zope 2.5 as it lacks the setSecurityManager() API.
Deleted: Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/ztc_doctest/dochttp.py
===================================================================
--- Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/ztc_doctest/dochttp.py 2005-03-18 10:20:25 UTC (rev 29548)
+++ Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/ztc_doctest/dochttp.py 2005-03-18 10:21:52 UTC (rev 29549)
@@ -1,224 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.0 (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.
-#
-##############################################################################
-"""Convert an http tcpwatch session to a doctest
-
-$Id: dochttp.py,v 1.2 2004/10/21 21:19:09 shh42 Exp $
-"""
-
-import errno
-import optparse
-import os
-import re
-import rfc822
-import sys
-
-usage = """usage: %prog <options> directory
-
-Convert an http tcpwatch recorded sesssion to a doctest file, which is
-written to standard output.
-
-"""
-
-parser = optparse.OptionParser(usage)
-parser.add_option("-p", "--prefix", default="watch",
- help="Prefix for recorded tcpwatch session files")
-parser.add_option("-U", "--skip-url", action="append",
- help="Regular expression for URLs to skip")
-parser.add_option("-E", "--skip-extension", action="append",
- help="URL file-extension to skip")
-parser.add_option("-e", "--extension", action="append",
- help="URL file-extension to include")
-parser.add_option("-I", "--skip-request-header", action="append",
- help="Request header to skip")
-parser.add_option("-O", "--skip-response-header", action="append",
- help="Response header to skip")
-parser.add_option("-r", "--clean-redirects", action="store_true",
- help="Strip content from redirect responses",
- default=False)
-
-default_options = [
- '-e', 'html',
-
- '-I', 'Accept-Charset', '-I', 'Accept-Encoding', '-I', 'Accept-Language',
- '-I', 'Accept', '-I', 'Connection', '-I', 'Host', '-I', 'Keep-Alive',
- '-I', 'User-Agent',
-
- '-O', 'Date', '-O', 'Server', '-O', 'X-Content-Type-Warning',
- '-O', 'X-Powered-By',
-
- ]
-
-def dochttp(args=sys.argv[1:], default=None):
- """Convert a tcpwatch recorded sesssion to a doctest file"""
- if default is None:
- default = default_options
-
- options, args = parser.parse_args(default+args)
- try:
- directory, = args
- except:
- parser.print_help()
- sys.exit(1)
-
- skip_extensions = options.skip_extension or ()
- extensions = [ext for ext in (options.extension or ())
- if ext not in skip_extensions]
- skip_urls = [re.compile(pattern) for pattern in (options.skip_url or ())]
-
- names = [name[:-len(".request")]
- for name in os.listdir(directory)
- if name.startswith(options.prefix) and name.endswith('.request')
- ]
- names.sort()
-
- extre = re.compile("[.](\w+)$")
-
- for name in names:
- requests = Requests(
- open(os.path.join(directory, name + ".request"), 'rb'),
- options.skip_request_header,
- )
- responses = Responses(
- open(os.path.join(directory, name + ".response"), 'rb'),
- options.skip_response_header,
- )
-
- # We use map so as *not* to truncate at shortest input.
- # We want an error if the number of requests and responses
- # is different.
- for request, response in map(None, requests, responses):
- assert (request and response) or not (request or response)
-
- path = request.path
- ext = extre.search(path)
- if ext:
- ext = ext.group(1)
- if extensions:
- if ext not in extensions:
- continue
- else:
- if ext in skip_extensions:
- continue
-
- for skip_url in skip_urls:
- if skip_url.search(request.path):
- break
- else:
- try:
- output_test(request, response, options.clean_redirects)
- except IOError, e:
- if e.errno == errno.EPIPE:
- return
- raise
-
-
-def output_test(request, response, clean_redirects=False):
- print
- print
- print ' >>> print http(r"""'
- print ' ...', '\n ... '.join(request.lines())+'""")'
- if response.code in (301, 302, 303) and clean_redirects:
- if response.headers:
- for i in range(len(response.headers)):
- h, v = response.headers[i]
- if h == "Content-Length":
- response.headers[i] = (h, "...")
- lines = response.header_lines()
- if lines:
- lines.append("...")
- else:
- lines = response.lines()
- print ' ', '\n '.join([line.rstrip() and line or '<BLANKLINE>'
- for line in lines])
-
-class Message:
-
- start = ''
-
- def __init__(self, file, skip_headers):
- start = file.readline().rstrip()
- if start:
- self.start = start
- if start.startswith("HTTP/"):
- # This is a response; extract the response code:
- self.code = int(start.split()[1])
- headers = [split_header(header)
- for header in rfc822.Message(file).headers
- ]
- headers = [
- ('-'.join([s.capitalize() for s in name.split('-')]),
- v.rstrip()
- )
- for (name, v) in headers
- if name.lower() not in skip_headers
- ]
- self.headers = headers
- content_length = int(dict(headers).get('Content-Length', '0'))
- if content_length:
- self.body = file.read(content_length).split('\n')
- else:
- self.body = []
-
- def __nonzero__(self):
- return bool(self.start)
-
- def lines(self):
- output = self.header_lines()
- if output:
- output.extend(self.body)
- return output
-
- def header_lines(self):
- if self.start:
- output = [self.start]
- headers = ["%s: %s" % (name, v) for (name, v) in self.headers]
- headers.sort()
- output.extend(headers)
- output.append('')
- else:
- output = []
- return output
-
-headerre = re.compile('(\S+): (.+)$')
-def split_header(header):
- return headerre.match(header).group(1, 2)
-
-def messages(cls, file, skip_headers):
- skip_headers = [name.lower() for name in (skip_headers or ())]
- while 1:
- message = cls(file, skip_headers)
- if message:
- yield message
- else:
- break
-
-class Request(Message):
-
- path = ''
-
- def __init__(self, file, skip_headers):
- Message.__init__(self, file, skip_headers)
- if self.start:
- self.command, self.path, self.protocol = self.start.split()
-
-def Requests(file, skip_headers):
- return messages(Request, file, skip_headers)
-
-def Responses(file, skip_headers):
- return messages(Message, file, skip_headers)
-
-main = dochttp
-
-if __name__ == '__main__':
- main()
Deleted: Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/ztc_doctest/test_dochttp.py
===================================================================
--- Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/ztc_doctest/test_dochttp.py 2005-03-18 10:20:25 UTC (rev 29548)
+++ Zope/branches/five-integration/lib/python/Testing/ZopeTestCase/ztc_doctest/test_dochttp.py 2005-03-18 10:21:52 UTC (rev 29549)
@@ -1,135 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.0 (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.
-#
-##############################################################################
-"""Test tcpdoc
-
-$Id: test_dochttp.py,v 1.2 2004/10/21 21:19:09 shh42 Exp $
-"""
-import os, sys
-
-if __name__ == '__main__':
- execfile(os.path.join(sys.path[0], 'framework.py'))
-
-import unittest
-from Testing import ZopeTestCase
-from dochttp import dochttp
-
-directory = os.path.join(os.path.split(ZopeTestCase.__file__)[0],
- 'ztc_doctest', 'recorded')
-
-expected = r'''
-
- >>> print http(r"""
- ... GET /@@contents.html HTTP/1.1
- ... """)
- HTTP/1.1 401 Unauthorized
- Content-Length: 89
- Content-Type: text/html;charset=utf-8
- Www-Authenticate: basic realm=zope
- <BLANKLINE>
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
- lang="en">
- <BLANKLINE>
- ...
- <BLANKLINE>
- </html>
- <BLANKLINE>
- <BLANKLINE>
-
-
- >>> print http(r"""
- ... GET /@@contents.html HTTP/1.1
- ... Authorization: Basic bWdyOm1ncnB3
- ... """)
- HTTP/1.1 200 Ok
- Content-Length: 89
- Content-Type: text/html;charset=utf-8
- <BLANKLINE>
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
- lang="en">
- <BLANKLINE>
- ...
- <BLANKLINE>
- </html>
- <BLANKLINE>
- <BLANKLINE>
-
-
- >>> print http(r"""
- ... GET /++etc++site/@@manage HTTP/1.1
- ... Authorization: Basic bWdyOm1ncnB3
- ... Referer: http://localhost:8081/
- ... """)
- HTTP/1.1 303 See Other
- Content-Length: 0
- Content-Type: text/plain;charset=utf-8
- Location: @@tasks.html
- <BLANKLINE>
-
-
- >>> print http(r"""
- ... GET / HTTP/1.1
- ... Authorization: Basic bWdyOm1ncnB3
- ... """)
- HTTP/1.1 200 Ok
- Content-Length: 89
- Content-Type: text/html;charset=utf-8
- <BLANKLINE>
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
- lang="en">
- <BLANKLINE>
- ...
- <BLANKLINE>
- </html>
- <BLANKLINE>
- <BLANKLINE>
-
-
- >>> print http(r"""
- ... GET /++etc++site/@@tasks.html HTTP/1.1
- ... Authorization: Basic bWdyOm1ncnB3
- ... Referer: http://localhost:8081/
- ... """)
- HTTP/1.1 200 Ok
- Content-Length: 89
- Content-Type: text/html;charset=utf-8
- <BLANKLINE>
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
- lang="en">
- <BLANKLINE>
- ...
- <BLANKLINE>
- </html>
- <BLANKLINE>
- <BLANKLINE>
-'''
-
-class Test(unittest.TestCase):
-
- def test_dochttp(self):
- import sys, StringIO
- old = sys.stdout
- sys.stdout = StringIO.StringIO()
- dochttp(['-p', 'test', directory])
- got = sys.stdout.getvalue()
- sys.stdout = old
- self.assert_(got == expected)
-
-def test_suite():
- suite = unittest.TestSuite()
- suite.addTest(unittest.makeSuite(Test))
- return suite
-
-if __name__ == '__main__':
- unittest.main(defaultTest='test_suite')
-
More information about the Zope-Checkins
mailing list