Package cherrypy :: Package test :: Module test_tutorials
[hide private]
[frames] | no frames]

Source Code for Module cherrypy.test.test_tutorials

  1  from cherrypy.test import test 
  2  test.prefer_parent_path() 
  3   
  4  import sys 
  5   
  6  import cherrypy 
  7  from cherrypy.test import helper 
  8   
  9   
10 -def setup_server():
11 12 conf = cherrypy.config.copy() 13 14 def load_tut_module(name): 15 """Import or reload tutorial module as needed.""" 16 cherrypy.config.reset() 17 cherrypy.config.update(conf) 18 19 target = "cherrypy.tutorial." + name 20 if target in sys.modules: 21 module = reload(sys.modules[target]) 22 else: 23 module = __import__(target, globals(), locals(), ['']) 24 # The above import will probably mount a new app at "". 25 app = cherrypy.tree.apps[""] 26 27 app.root.load_tut_module = load_tut_module 28 app.root.sessions = sessions 29 app.root.traceback_setting = traceback_setting 30 31 helper.sync_apps()
32 load_tut_module.exposed = True 33 34 def sessions(): 35 cherrypy.config.update({"tools.sessions.on": True}) 36 sessions.exposed = True 37 38 def traceback_setting(): 39 return repr(cherrypy.request.show_tracebacks) 40 traceback_setting.exposed = True 41 42 class Dummy: 43 pass 44 root = Dummy() 45 root.load_tut_module = load_tut_module 46 cherrypy.tree.mount(root) 47 48
49 -class TutorialTest(helper.CPWebCase):
50
51 - def test01HelloWorld(self):
52 self.getPage("/load_tut_module/tut01_helloworld") 53 self.getPage("/") 54 self.assertBody('Hello world!')
55
56 - def test02ExposeMethods(self):
57 self.getPage("/load_tut_module/tut02_expose_methods") 58 self.getPage("/showMessage") 59 self.assertBody('Hello world!')
60
61 - def test03GetAndPost(self):
62 self.getPage("/load_tut_module/tut03_get_and_post") 63 64 # Try different GET queries 65 self.getPage("/greetUser?name=Bob") 66 self.assertBody("Hey Bob, what's up?") 67 68 self.getPage("/greetUser") 69 self.assertBody('Please enter your name <a href="./">here</a>.') 70 71 self.getPage("/greetUser?name=") 72 self.assertBody('No, really, enter your name <a href="./">here</a>.') 73 74 # Try the same with POST 75 self.getPage("/greetUser", method="POST", body="name=Bob") 76 self.assertBody("Hey Bob, what's up?") 77 78 self.getPage("/greetUser", method="POST", body="name=") 79 self.assertBody('No, really, enter your name <a href="./">here</a>.')
80
81 - def test04ComplexSite(self):
82 self.getPage("/load_tut_module/tut04_complex_site") 83 msg = ''' 84 <p>Here are some extra useful links:</p> 85 86 <ul> 87 <li><a href="http://del.icio.us">del.icio.us</a></li> 88 <li><a href="http://www.mornography.de">Hendrik's weblog</a></li> 89 </ul> 90 91 <p>[<a href="../">Return to links page</a>]</p>''' 92 self.getPage("/links/extra/") 93 self.assertBody(msg)
94
95 - def test05DerivedObjects(self):
96 self.getPage("/load_tut_module/tut05_derived_objects") 97 msg = ''' 98 <html> 99 <head> 100 <title>Another Page</title> 101 <head> 102 <body> 103 <h2>Another Page</h2> 104 105 <p> 106 And this is the amazing second page! 107 </p> 108 109 </body> 110 </html> 111 ''' 112 self.getPage("/another/") 113 self.assertBody(msg)
114
115 - def test06DefaultMethod(self):
116 self.getPage("/load_tut_module/tut06_default_method") 117 self.getPage('/hendrik') 118 self.assertBody('Hendrik Mans, CherryPy co-developer & crazy German ' 119 '(<a href="./">back</a>)')
120
121 - def test07Sessions(self):
122 self.getPage("/load_tut_module/tut07_sessions") 123 self.getPage("/sessions") 124 125 self.getPage('/') 126 self.assertBody("\n During your current session, you've viewed this" 127 "\n page 1 times! Your life is a patio of fun!" 128 "\n ") 129 130 self.getPage('/', self.cookies) 131 self.assertBody("\n During your current session, you've viewed this" 132 "\n page 2 times! Your life is a patio of fun!" 133 "\n ")
134
135 - def test08GeneratorsAndYield(self):
136 self.getPage("/load_tut_module/tut08_generators_and_yield") 137 self.getPage('/') 138 self.assertBody('<html><body><h2>Generators rule!</h2>' 139 '<h3>List of users:</h3>' 140 'Remi<br/>Carlos<br/>Hendrik<br/>Lorenzo Lamas<br/>' 141 '</body></html>')
142
143 - def test09Files(self):
144 self.getPage("/load_tut_module/tut09_files") 145 146 # Test upload 147 filesize = 5 148 h = [("Content-type", "multipart/form-data; boundary=x"), 149 ("Content-Length", str(105 + filesize))] 150 b = """--x 151 Content-Disposition: form-data; name="myFile"; filename="hello.txt" 152 Content-Type: text/plain 153 154 %s 155 --x-- 156 """ % ("a" * filesize) 157 self.getPage('/upload', h, "POST", b) 158 self.assertBody('''<html> 159 <body> 160 myFile length: %d<br /> 161 myFile filename: hello.txt<br /> 162 myFile mime-type: text/plain 163 </body> 164 </html>''' % filesize) 165 166 # Test download 167 self.getPage('/download') 168 self.assertStatus("200 OK") 169 self.assertHeader("Content-Type", "application/x-download") 170 self.assertHeader("Content-Disposition", 171 # Make sure the filename is quoted. 172 'attachment; filename="pdf_file.pdf"') 173 self.assertEqual(len(self.body), 85698)
174
175 - def test10HTTPErrors(self):
176 self.getPage("/load_tut_module/tut10_http_errors") 177 178 self.getPage("/") 179 self.assertInBody("""<a href="toggleTracebacks">""") 180 self.assertInBody("""<a href="/doesNotExist">""") 181 self.assertInBody("""<a href="/error?code=403">""") 182 self.assertInBody("""<a href="/error?code=500">""") 183 self.assertInBody("""<a href="/messageArg">""") 184 185 self.getPage("/traceback_setting") 186 setting = self.body 187 self.getPage("/toggleTracebacks") 188 self.assertStatus((302, 303)) 189 self.getPage("/traceback_setting") 190 self.assertBody(str(not eval(setting))) 191 192 self.getPage("/error?code=500") 193 self.assertStatus(500) 194 self.assertInBody("The server encountered an unexpected condition " 195 "which prevented it from fulfilling the request.") 196 197 self.getPage("/error?code=403") 198 self.assertStatus(403) 199 self.assertInBody("<h2>You can't do that!</h2>") 200 201 self.getPage("/messageArg") 202 self.assertStatus(500) 203 self.assertInBody("If you construct an HTTPError with a 'message'")
204 205 206 if __name__ == "__main__": 207 conf = {'server.socket_host': '127.0.0.1', 208 'server.socket_port': 8080, 209 'server.thread_pool': 10, 210 'environment': "test_suite", 211 } 212 cherrypy.config.update(conf) 213 setup_server() 214 helper.testmain() 215