NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

test_wsgiapps.py (3672B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\test_wsgiapps.py
      2 from cherrypy.test import helper
      3 
      4 class WSGIGraftTests(helper.CPWebCase):
      5 
      6     def setup_server():
      7         import os
      8         curdir = os.path.join(os.getcwd(), os.path.dirname(__file__))
      9         import cherrypy
     10 
     11         def test_app(environ, start_response):
     12             status = '200 OK'
     13             response_headers = [('Content-type', 'text/plain')]
     14             start_response(status, response_headers)
     15             output = ['Hello, world!\n', 'This is a wsgi app running within CherryPy!\n\n']
     16             keys = list(environ.keys())
     17             keys.sort()
     18             for k in keys:
     19                 output.append('%s: %s\n' % (k, environ[k]))
     20 
     21             return output
     22 
     23         def test_empty_string_app(environ, start_response):
     24             status = '200 OK'
     25             response_headers = [('Content-type', 'text/plain')]
     26             start_response(status, response_headers)
     27             return ['Hello',
     28              '',
     29              ' ',
     30              '',
     31              'world']
     32 
     33         class WSGIResponse(object):
     34 
     35             def __init__(self, appresults):
     36                 self.appresults = appresults
     37                 self.iter = iter(appresults)
     38 
     39             def __iter__(self):
     40                 return self
     41 
     42             def next(self):
     43                 return self.iter.next()
     44 
     45             def close(self):
     46                 if hasattr(self.appresults, 'close'):
     47                     self.appresults.close()
     48 
     49         class ReversingMiddleware(object):
     50 
     51             def __init__(self, app):
     52                 self.app = app
     53 
     54             def __call__(self, environ, start_response):
     55                 results = app(environ, start_response)
     56 
     57                 class Reverser(WSGIResponse):
     58 
     59                     def next(this):
     60                         line = list(this.iter.next())
     61                         line.reverse()
     62                         return ''.join(line)
     63 
     64                 return Reverser(results)
     65 
     66         class Root:
     67 
     68             def index(self):
     69                 return "I'm a regular CherryPy page handler!"
     70 
     71             index.exposed = True
     72 
     73         cherrypy.tree.mount(Root())
     74         cherrypy.tree.graft(test_app, '/hosted/app1')
     75         cherrypy.tree.graft(test_empty_string_app, '/hosted/app3')
     76         app = cherrypy.Application(Root(), script_name=None)
     77         cherrypy.tree.graft(ReversingMiddleware(app), '/hosted/app2')
     78 
     79     setup_server = staticmethod(setup_server)
     80     wsgi_output = 'Hello, world!\nThis is a wsgi app running within CherryPy!'
     81 
     82     def test_01_standard_app(self):
     83         self.getPage('/')
     84         self.assertBody("I'm a regular CherryPy page handler!")
     85 
     86     def test_04_pure_wsgi(self):
     87         import cherrypy
     88         if not cherrypy.server.using_wsgi:
     89             return self.skip('skipped (not using WSGI)... ')
     90         self.getPage('/hosted/app1')
     91         self.assertHeader('Content-Type', 'text/plain')
     92         self.assertInBody(self.wsgi_output)
     93 
     94     def test_05_wrapped_cp_app(self):
     95         import cherrypy
     96         if not cherrypy.server.using_wsgi:
     97             return self.skip('skipped (not using WSGI)... ')
     98         self.getPage('/hosted/app2/')
     99         body = list("I'm a regular CherryPy page handler!")
    100         body.reverse()
    101         body = ''.join(body)
    102         self.assertInBody(body)
    103 
    104     def test_06_empty_string_app(self):
    105         import cherrypy
    106         if not cherrypy.server.using_wsgi:
    107             return self.skip('skipped (not using WSGI)... ')
    108         self.getPage('/hosted/app3')
    109         self.assertHeader('Content-Type', 'text/plain')
    110         self.assertInBody('Hello world')