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

test_misc_tools.py (6043B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\test_misc_tools.py
      2 import os
      3 localDir = os.path.dirname(__file__)
      4 logfile = os.path.join(localDir, 'test_misc_tools.log')
      5 import cherrypy
      6 from cherrypy import tools
      7 
      8 def setup_server():
      9 
     10     class Root:
     11 
     12         def index(self):
     13             yield 'Hello, world'
     14 
     15         index.exposed = True
     16         h = [('Content-Language', 'en-GB'), ('Content-Type', 'text/plain')]
     17         tools.response_headers(headers=h)(index)
     18 
     19         def other(self):
     20             return 'salut'
     21 
     22         other.exposed = True
     23         other._cp_config = {'tools.response_headers.on': True,
     24          'tools.response_headers.headers': [('Content-Language', 'fr'), ('Content-Type', 'text/plain')],
     25          'tools.log_hooks.on': True}
     26 
     27     class Accept:
     28         _cp_config = {'tools.accept.on': True}
     29 
     30         def index(self):
     31             return '<a href="feed">Atom feed</a>'
     32 
     33         index.exposed = True
     34 
     35         def feed(self):
     36             return '<?xml version="1.0" encoding="utf-8"?>\n<feed xmlns="http://www.w3.org/2005/Atom">\n    <title>Unknown Blog</title>\n</feed>'
     37 
     38         feed.exposed = True
     39         feed._cp_config = {'tools.accept.media': 'application/atom+xml'}
     40 
     41         def select(self):
     42             mtype = tools.accept.callable(['text/html', 'text/plain'])
     43             if mtype == 'text/html':
     44                 return '<h2>Page Title</h2>'
     45             else:
     46                 return 'PAGE TITLE'
     47 
     48         select.exposed = True
     49 
     50     class Referer:
     51 
     52         def accept(self):
     53             return 'Accepted!'
     54 
     55         accept.exposed = True
     56         reject = accept
     57 
     58     class AutoVary:
     59 
     60         def index(self):
     61             ae = cherrypy.request.headers.get('Accept-Encoding')
     62             cl = cherrypy.request.headers['Host']
     63             hasif = 'If-Modified-Since' in cherrypy.request.headers
     64             has = cherrypy.request.headers.has_key('Range')
     65             mtype = tools.accept.callable(['text/html', 'text/plain'])
     66             return 'Hello, world!'
     67 
     68         index.exposed = True
     69 
     70     conf = {'/referer': {'tools.referer.on': True,
     71                   'tools.referer.pattern': 'http://[^/]*example\\.com'},
     72      '/referer/reject': {'tools.referer.accept': False,
     73                          'tools.referer.accept_missing': True},
     74      '/autovary': {'tools.autovary.on': True}}
     75     root = Root()
     76     root.referer = Referer()
     77     root.accept = Accept()
     78     root.autovary = AutoVary()
     79     cherrypy.tree.mount(root, config=conf)
     80     cherrypy.config.update({'log.error_file': logfile})
     81 
     82 
     83 from cherrypy.test import helper
     84 
     85 class ResponseHeadersTest(helper.CPWebCase):
     86     setup_server = staticmethod(setup_server)
     87 
     88     def testResponseHeadersDecorator(self):
     89         self.getPage('/')
     90         self.assertHeader('Content-Language', 'en-GB')
     91         self.assertHeader('Content-Type', 'text/plain;charset=utf-8')
     92 
     93     def testResponseHeaders(self):
     94         self.getPage('/other')
     95         self.assertHeader('Content-Language', 'fr')
     96         self.assertHeader('Content-Type', 'text/plain;charset=utf-8')
     97 
     98 
     99 class RefererTest(helper.CPWebCase):
    100     setup_server = staticmethod(setup_server)
    101 
    102     def testReferer(self):
    103         self.getPage('/referer/accept')
    104         self.assertErrorPage(403, 'Forbidden Referer header.')
    105         self.getPage('/referer/accept', headers=[('Referer', 'http://www.example.com/')])
    106         self.assertStatus(200)
    107         self.assertBody('Accepted!')
    108         self.getPage('/referer/reject')
    109         self.assertStatus(200)
    110         self.assertBody('Accepted!')
    111         self.getPage('/referer/reject', headers=[('Referer', 'http://www.example.com/')])
    112         self.assertErrorPage(403, 'Forbidden Referer header.')
    113 
    114 
    115 class AcceptTest(helper.CPWebCase):
    116     setup_server = staticmethod(setup_server)
    117 
    118     def test_Accept_Tool(self):
    119         self.getPage('/accept/feed')
    120         self.assertStatus(200)
    121         self.assertInBody('<title>Unknown Blog</title>')
    122         self.getPage('/accept/feed', headers=[('Accept', 'application/atom+xml')])
    123         self.assertStatus(200)
    124         self.assertInBody('<title>Unknown Blog</title>')
    125         self.getPage('/accept/feed', headers=[('Accept', 'application/*')])
    126         self.assertStatus(200)
    127         self.assertInBody('<title>Unknown Blog</title>')
    128         self.getPage('/accept/feed', headers=[('Accept', '*/*')])
    129         self.assertStatus(200)
    130         self.assertInBody('<title>Unknown Blog</title>')
    131         self.getPage('/accept/feed', headers=[('Accept', 'text/html')])
    132         self.assertErrorPage(406, 'Your client sent this Accept header: text/html. But this resource only emits these media types: application/atom+xml.')
    133         self.getPage('/accept/')
    134         self.assertStatus(200)
    135         self.assertBody('<a href="feed">Atom feed</a>')
    136 
    137     def test_accept_selection(self):
    138         self.getPage('/accept/select', [('Accept', 'text/html')])
    139         self.assertStatus(200)
    140         self.assertBody('<h2>Page Title</h2>')
    141         self.getPage('/accept/select', [('Accept', 'text/plain')])
    142         self.assertStatus(200)
    143         self.assertBody('PAGE TITLE')
    144         self.getPage('/accept/select', [('Accept', 'text/plain, text/*;q=0.5')])
    145         self.assertStatus(200)
    146         self.assertBody('PAGE TITLE')
    147         self.getPage('/accept/select', [('Accept', 'text/*')])
    148         self.assertStatus(200)
    149         self.assertBody('<h2>Page Title</h2>')
    150         self.getPage('/accept/select', [('Accept', '*/*')])
    151         self.assertStatus(200)
    152         self.assertBody('<h2>Page Title</h2>')
    153         self.getPage('/accept/select', [('Accept', 'application/xml')])
    154         self.assertErrorPage(406, 'Your client sent this Accept header: application/xml. But this resource only emits these media types: text/html, text/plain.')
    155 
    156 
    157 class AutoVaryTest(helper.CPWebCase):
    158     setup_server = staticmethod(setup_server)
    159 
    160     def testAutoVary(self):
    161         self.getPage('/autovary/')
    162         self.assertHeader('Vary', 'Accept, Accept-Charset, Accept-Encoding, Host, If-Modified-Since, Range')