test_tutorials.py (6404B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\test_tutorials.py 2 import sys 3 import cherrypy 4 from cherrypy.test import helper 5 6 class TutorialTest(helper.CPWebCase): 7 8 def setup_server(cls): 9 conf = cherrypy.config.copy() 10 11 def load_tut_module(name): 12 cherrypy.config.reset() 13 cherrypy.config.update(conf) 14 target = 'cherrypy.tutorial.' + name 15 if target in sys.modules: 16 module = reload(sys.modules[target]) 17 else: 18 module = __import__(target, globals(), locals(), ['']) 19 app = cherrypy.tree.apps[''] 20 app.root.load_tut_module = load_tut_module 21 app.root.sessions = sessions 22 app.root.traceback_setting = traceback_setting 23 cls.supervisor.sync_apps() 24 25 load_tut_module.exposed = True 26 27 def sessions(): 28 cherrypy.config.update({'tools.sessions.on': True}) 29 30 sessions.exposed = True 31 32 def traceback_setting(): 33 return repr(cherrypy.request.show_tracebacks) 34 35 traceback_setting.exposed = True 36 37 class Dummy: 38 pass 39 40 root = Dummy() 41 root.load_tut_module = load_tut_module 42 cherrypy.tree.mount(root) 43 44 setup_server = classmethod(setup_server) 45 46 def test01HelloWorld(self): 47 self.getPage('/load_tut_module/tut01_helloworld') 48 self.getPage('/') 49 self.assertBody('Hello world!') 50 51 def test02ExposeMethods(self): 52 self.getPage('/load_tut_module/tut02_expose_methods') 53 self.getPage('/showMessage') 54 self.assertBody('Hello world!') 55 56 def test03GetAndPost(self): 57 self.getPage('/load_tut_module/tut03_get_and_post') 58 self.getPage('/greetUser?name=Bob') 59 self.assertBody("Hey Bob, what's up?") 60 self.getPage('/greetUser') 61 self.assertBody('Please enter your name <a href="./">here</a>.') 62 self.getPage('/greetUser?name=') 63 self.assertBody('No, really, enter your name <a href="./">here</a>.') 64 self.getPage('/greetUser', method='POST', body='name=Bob') 65 self.assertBody("Hey Bob, what's up?") 66 self.getPage('/greetUser', method='POST', body='name=') 67 self.assertBody('No, really, enter your name <a href="./">here</a>.') 68 69 def test04ComplexSite(self): 70 self.getPage('/load_tut_module/tut04_complex_site') 71 msg = '\n <p>Here are some extra useful links:</p>\n \n <ul>\n <li><a href="http://del.icio.us">del.icio.us</a></li>\n <li><a href="http://www.mornography.de">Hendrik\'s weblog</a></li>\n </ul>\n \n <p>[<a href="../">Return to links page</a>]</p>' 72 self.getPage('/links/extra/') 73 self.assertBody(msg) 74 75 def test05DerivedObjects(self): 76 self.getPage('/load_tut_module/tut05_derived_objects') 77 msg = '\n <html>\n <head>\n <title>Another Page</title>\n <head>\n <body>\n <h2>Another Page</h2>\n \n <p>\n And this is the amazing second page!\n </p>\n \n </body>\n </html>\n ' 78 self.getPage('/another/') 79 self.assertBody(msg) 80 81 def test06DefaultMethod(self): 82 self.getPage('/load_tut_module/tut06_default_method') 83 self.getPage('/hendrik') 84 self.assertBody('Hendrik Mans, CherryPy co-developer & crazy German (<a href="./">back</a>)') 85 86 def test07Sessions(self): 87 self.getPage('/load_tut_module/tut07_sessions') 88 self.getPage('/sessions') 89 self.getPage('/') 90 self.assertBody("\n During your current session, you've viewed this\n page 1 times! Your life is a patio of fun!\n ") 91 self.getPage('/', self.cookies) 92 self.assertBody("\n During your current session, you've viewed this\n page 2 times! Your life is a patio of fun!\n ") 93 94 def test08GeneratorsAndYield(self): 95 self.getPage('/load_tut_module/tut08_generators_and_yield') 96 self.getPage('/') 97 self.assertBody('<html><body><h2>Generators rule!</h2><h3>List of users:</h3>Remi<br/>Carlos<br/>Hendrik<br/>Lorenzo Lamas<br/></body></html>') 98 99 def test09Files(self): 100 self.getPage('/load_tut_module/tut09_files') 101 filesize = 5 102 h = [('Content-type', 'multipart/form-data; boundary=x'), ('Content-Length', str(105 + filesize))] 103 b = '--x\n' + 'Content-Disposition: form-data; name="myFile"; filename="hello.txt"\r\n' + 'Content-Type: text/plain\r\n' + '\r\n' + 'a' * filesize + '\n' + '--x--\n' 104 self.getPage('/upload', h, 'POST', b) 105 self.assertBody('<html>\n <body>\n myFile length: %d<br />\n myFile filename: hello.txt<br />\n myFile mime-type: text/plain\n </body>\n </html>' % filesize) 106 self.getPage('/download') 107 self.assertStatus('200 OK') 108 self.assertHeader('Content-Type', 'application/x-download') 109 self.assertHeader('Content-Disposition', 'attachment; filename="pdf_file.pdf"') 110 self.assertEqual(len(self.body), 85698) 111 112 def test10HTTPErrors(self): 113 self.getPage('/load_tut_module/tut10_http_errors') 114 self.getPage('/') 115 self.assertInBody('<a href="toggleTracebacks">') 116 self.assertInBody('<a href="/doesNotExist">') 117 self.assertInBody('<a href="/error?code=403">') 118 self.assertInBody('<a href="/error?code=500">') 119 self.assertInBody('<a href="/messageArg">') 120 self.getPage('/traceback_setting') 121 setting = self.body 122 self.getPage('/toggleTracebacks') 123 self.assertStatus((302, 303)) 124 self.getPage('/traceback_setting') 125 self.assertBody(str(not eval(setting))) 126 self.getPage('/error?code=500') 127 self.assertStatus(500) 128 self.assertInBody('The server encountered an unexpected condition which prevented it from fulfilling the request.') 129 self.getPage('/error?code=403') 130 self.assertStatus(403) 131 self.assertInBody("<h2>You can't do that!</h2>") 132 self.getPage('/messageArg') 133 self.assertStatus(500) 134 self.assertInBody("If you construct an HTTPError with a 'message'")