mirror of
https://github.com/Tygs/0bin.git
synced 2023-08-10 21:13:00 +03:00
Porting zerobin to python 3
This commit is contained in:
126
libs/cherrypy/test/test_wsgiapps.py
Normal file
126
libs/cherrypy/test/test_wsgiapps.py
Normal file
@ -0,0 +1,126 @@
|
||||
import sys
|
||||
|
||||
from cherrypy._cpcompat import ntob
|
||||
from cherrypy.test import helper
|
||||
|
||||
|
||||
class WSGIGraftTests(helper.CPWebCase):
|
||||
|
||||
def setup_server():
|
||||
import os
|
||||
curdir = os.path.join(os.getcwd(), os.path.dirname(__file__))
|
||||
|
||||
import cherrypy
|
||||
|
||||
def test_app(environ, start_response):
|
||||
status = '200 OK'
|
||||
response_headers = [('Content-type', 'text/plain')]
|
||||
start_response(status, response_headers)
|
||||
output = ['Hello, world!\n',
|
||||
'This is a wsgi app running within CherryPy!\n\n']
|
||||
keys = list(environ.keys())
|
||||
keys.sort()
|
||||
for k in keys:
|
||||
output.append('%s: %s\n' % (k, environ[k]))
|
||||
return [ntob(x, 'utf-8') for x in output]
|
||||
|
||||
def test_empty_string_app(environ, start_response):
|
||||
status = '200 OK'
|
||||
response_headers = [('Content-type', 'text/plain')]
|
||||
start_response(status, response_headers)
|
||||
return [
|
||||
ntob('Hello'), ntob(''), ntob(' '), ntob(''), ntob('world')
|
||||
]
|
||||
|
||||
class WSGIResponse(object):
|
||||
|
||||
def __init__(self, appresults):
|
||||
self.appresults = appresults
|
||||
self.iter = iter(appresults)
|
||||
|
||||
def __iter__(self):
|
||||
return self
|
||||
|
||||
if sys.version_info >= (3, 0):
|
||||
def __next__(self):
|
||||
return next(self.iter)
|
||||
else:
|
||||
def next(self):
|
||||
return self.iter.next()
|
||||
|
||||
def close(self):
|
||||
if hasattr(self.appresults, "close"):
|
||||
self.appresults.close()
|
||||
|
||||
class ReversingMiddleware(object):
|
||||
|
||||
def __init__(self, app):
|
||||
self.app = app
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
results = app(environ, start_response)
|
||||
|
||||
class Reverser(WSGIResponse):
|
||||
|
||||
if sys.version_info >= (3, 0):
|
||||
def __next__(this):
|
||||
line = list(next(this.iter))
|
||||
line.reverse()
|
||||
return bytes(line)
|
||||
else:
|
||||
def next(this):
|
||||
line = list(this.iter.next())
|
||||
line.reverse()
|
||||
return "".join(line)
|
||||
|
||||
return Reverser(results)
|
||||
|
||||
class Root:
|
||||
|
||||
def index(self):
|
||||
return ntob("I'm a regular CherryPy page handler!")
|
||||
index.exposed = True
|
||||
|
||||
cherrypy.tree.mount(Root())
|
||||
|
||||
cherrypy.tree.graft(test_app, '/hosted/app1')
|
||||
cherrypy.tree.graft(test_empty_string_app, '/hosted/app3')
|
||||
|
||||
# Set script_name explicitly to None to signal CP that it should
|
||||
# be pulled from the WSGI environ each time.
|
||||
app = cherrypy.Application(Root(), script_name=None)
|
||||
cherrypy.tree.graft(ReversingMiddleware(app), '/hosted/app2')
|
||||
setup_server = staticmethod(setup_server)
|
||||
|
||||
wsgi_output = '''Hello, world!
|
||||
This is a wsgi app running within CherryPy!'''
|
||||
|
||||
def test_01_standard_app(self):
|
||||
self.getPage("/")
|
||||
self.assertBody("I'm a regular CherryPy page handler!")
|
||||
|
||||
def test_04_pure_wsgi(self):
|
||||
import cherrypy
|
||||
if not cherrypy.server.using_wsgi:
|
||||
return self.skip("skipped (not using WSGI)... ")
|
||||
self.getPage("/hosted/app1")
|
||||
self.assertHeader("Content-Type", "text/plain")
|
||||
self.assertInBody(self.wsgi_output)
|
||||
|
||||
def test_05_wrapped_cp_app(self):
|
||||
import cherrypy
|
||||
if not cherrypy.server.using_wsgi:
|
||||
return self.skip("skipped (not using WSGI)... ")
|
||||
self.getPage("/hosted/app2/")
|
||||
body = list("I'm a regular CherryPy page handler!")
|
||||
body.reverse()
|
||||
body = "".join(body)
|
||||
self.assertInBody(body)
|
||||
|
||||
def test_06_empty_string_app(self):
|
||||
import cherrypy
|
||||
if not cherrypy.server.using_wsgi:
|
||||
return self.skip("skipped (not using WSGI)... ")
|
||||
self.getPage("/hosted/app3")
|
||||
self.assertHeader("Content-Type", "text/plain")
|
||||
self.assertInBody('Hello world')
|
Reference in New Issue
Block a user