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

Source Code for Module cherrypy.test.test_tutorials

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