1 from cherrypy.test import test
2 test.prefer_parent_path()
3
4 import cherrypy
5 from cherrypy import tools
6
7
9 class Root:
10 def index(self):
11 yield "Hello, world"
12 index.exposed = True
13 h = [("Content-Language", "en-GB"), ('Content-Type', 'text/plain')]
14 tools.response_headers(headers=h)(index)
15
16 def other(self):
17 return "salut"
18 other.exposed = True
19 other._cp_config = {
20 'tools.response_headers.on': True,
21 'tools.response_headers.headers': [("Content-Language", "fr"),
22 ('Content-Type', 'text/plain')],
23 }
24
25
26 class Accept:
27 _cp_config = {'tools.accept.on': True}
28
29 def index(self):
30 return '<a href="feed">Atom feed</a>'
31 index.exposed = True
32
33
34
35 def feed(self):
36 return """<?xml version="1.0" encoding="utf-8"?>
37 <feed xmlns="http://www.w3.org/2005/Atom">
38 <title>Unknown Blog</title>
39 </feed>"""
40 feed.exposed = True
41 feed._cp_config = {'tools.accept.media': 'application/atom+xml'}
42
43 def select(self):
44
45 mtype = tools.accept.callable(['text/html', 'text/plain'])
46 if mtype == 'text/html':
47 return "<h2>Page Title</h2>"
48 else:
49 return "PAGE TITLE"
50 select.exposed = True
51
52 class Referer:
53 def accept(self):
54 return "Accepted!"
55 accept.exposed = True
56 reject = accept
57
58 conf = {'/referer': {'tools.referer.on': True,
59 'tools.referer.pattern': r'http://[^/]*thisdomain\.com',
60 },
61 '/referer/reject': {'tools.referer.accept': False,
62 'tools.referer.accept_missing': True,
63 },
64 }
65
66 root = Root()
67 root.referer = Referer()
68 root.accept = Accept()
69 cherrypy.tree.mount(root, config=conf)
70 cherrypy.config.update({'environment': 'test_suite'})
71
72
73 from cherrypy.test import helper
74
86
87
107
108
110
143
145
146 self.getPage('/accept/select', [('Accept', 'text/html')])
147 self.assertStatus(200)
148 self.assertBody('<h2>Page Title</h2>')
149 self.getPage('/accept/select', [('Accept', 'text/plain')])
150 self.assertStatus(200)
151 self.assertBody('PAGE TITLE')
152 self.getPage('/accept/select', [('Accept', 'text/plain, text/*;q=0.5')])
153 self.assertStatus(200)
154 self.assertBody('PAGE TITLE')
155
156
157
158 self.getPage('/accept/select', [('Accept', 'text/*')])
159 self.assertStatus(200)
160 self.assertBody('<h2>Page Title</h2>')
161 self.getPage('/accept/select', [('Accept', '*/*')])
162 self.assertStatus(200)
163 self.assertBody('<h2>Page Title</h2>')
164
165
166 self.getPage('/accept/select', [('Accept', 'application/xml')])
167 self.assertErrorPage(406,
168 "Your client sent this Accept header: application/xml. "
169 "But this resource only emits these media types: "
170 "text/html, text/plain.")
171
172
173
174 if __name__ == "__main__":
175 setup_server()
176 helper.testmain()
177