Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/cherrypy/test/test_tutorials.py
diff options
context:
space:
mode:
Diffstat (limited to 'cherrypy/test/test_tutorials.py')
-rwxr-xr-xcherrypy/test/test_tutorials.py201
1 files changed, 201 insertions, 0 deletions
diff --git a/cherrypy/test/test_tutorials.py b/cherrypy/test/test_tutorials.py
new file mode 100755
index 0000000..aab2786
--- /dev/null
+++ b/cherrypy/test/test_tutorials.py
@@ -0,0 +1,201 @@
+import sys
+
+import cherrypy
+from cherrypy.test import helper
+
+
+class TutorialTest(helper.CPWebCase):
+
+ def setup_server(cls):
+
+ conf = cherrypy.config.copy()
+
+ def load_tut_module(name):
+ """Import or reload tutorial module as needed."""
+ cherrypy.config.reset()
+ cherrypy.config.update(conf)
+
+ target = "cherrypy.tutorial." + name
+ if target in sys.modules:
+ module = reload(sys.modules[target])
+ else:
+ module = __import__(target, globals(), locals(), [''])
+ # The above import will probably mount a new app at "".
+ app = cherrypy.tree.apps[""]
+
+ app.root.load_tut_module = load_tut_module
+ app.root.sessions = sessions
+ app.root.traceback_setting = traceback_setting
+
+ cls.supervisor.sync_apps()
+ load_tut_module.exposed = True
+
+ def sessions():
+ cherrypy.config.update({"tools.sessions.on": True})
+ sessions.exposed = True
+
+ def traceback_setting():
+ return repr(cherrypy.request.show_tracebacks)
+ traceback_setting.exposed = True
+
+ class Dummy:
+ pass
+ root = Dummy()
+ root.load_tut_module = load_tut_module
+ cherrypy.tree.mount(root)
+ setup_server = classmethod(setup_server)
+
+
+ def test01HelloWorld(self):
+ self.getPage("/load_tut_module/tut01_helloworld")
+ self.getPage("/")
+ self.assertBody('Hello world!')
+
+ def test02ExposeMethods(self):
+ self.getPage("/load_tut_module/tut02_expose_methods")
+ self.getPage("/showMessage")
+ self.assertBody('Hello world!')
+
+ def test03GetAndPost(self):
+ self.getPage("/load_tut_module/tut03_get_and_post")
+
+ # Try different GET queries
+ self.getPage("/greetUser?name=Bob")
+ self.assertBody("Hey Bob, what's up?")
+
+ self.getPage("/greetUser")
+ self.assertBody('Please enter your name <a href="./">here</a>.')
+
+ self.getPage("/greetUser?name=")
+ self.assertBody('No, really, enter your name <a href="./">here</a>.')
+
+ # Try the same with POST
+ self.getPage("/greetUser", method="POST", body="name=Bob")
+ self.assertBody("Hey Bob, what's up?")
+
+ self.getPage("/greetUser", method="POST", body="name=")
+ self.assertBody('No, really, enter your name <a href="./">here</a>.')
+
+ def test04ComplexSite(self):
+ self.getPage("/load_tut_module/tut04_complex_site")
+ msg = '''
+ <p>Here are some extra useful links:</p>
+
+ <ul>
+ <li><a href="http://del.icio.us">del.icio.us</a></li>
+ <li><a href="http://www.mornography.de">Hendrik's weblog</a></li>
+ </ul>
+
+ <p>[<a href="../">Return to links page</a>]</p>'''
+ self.getPage("/links/extra/")
+ self.assertBody(msg)
+
+ def test05DerivedObjects(self):
+ self.getPage("/load_tut_module/tut05_derived_objects")
+ msg = '''
+ <html>
+ <head>
+ <title>Another Page</title>
+ <head>
+ <body>
+ <h2>Another Page</h2>
+
+ <p>
+ And this is the amazing second page!
+ </p>
+
+ </body>
+ </html>
+ '''
+ self.getPage("/another/")
+ self.assertBody(msg)
+
+ def test06DefaultMethod(self):
+ self.getPage("/load_tut_module/tut06_default_method")
+ self.getPage('/hendrik')
+ self.assertBody('Hendrik Mans, CherryPy co-developer & crazy German '
+ '(<a href="./">back</a>)')
+
+ def test07Sessions(self):
+ self.getPage("/load_tut_module/tut07_sessions")
+ self.getPage("/sessions")
+
+ self.getPage('/')
+ self.assertBody("\n During your current session, you've viewed this"
+ "\n page 1 times! Your life is a patio of fun!"
+ "\n ")
+
+ self.getPage('/', self.cookies)
+ self.assertBody("\n During your current session, you've viewed this"
+ "\n page 2 times! Your life is a patio of fun!"
+ "\n ")
+
+ def test08GeneratorsAndYield(self):
+ self.getPage("/load_tut_module/tut08_generators_and_yield")
+ self.getPage('/')
+ self.assertBody('<html><body><h2>Generators rule!</h2>'
+ '<h3>List of users:</h3>'
+ 'Remi<br/>Carlos<br/>Hendrik<br/>Lorenzo Lamas<br/>'
+ '</body></html>')
+
+ def test09Files(self):
+ self.getPage("/load_tut_module/tut09_files")
+
+ # Test upload
+ filesize = 5
+ h = [("Content-type", "multipart/form-data; boundary=x"),
+ ("Content-Length", str(105 + filesize))]
+ 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'
+ self.getPage('/upload', h, "POST", b)
+ self.assertBody('''<html>
+ <body>
+ myFile length: %d<br />
+ myFile filename: hello.txt<br />
+ myFile mime-type: text/plain
+ </body>
+ </html>''' % filesize)
+
+ # Test download
+ self.getPage('/download')
+ self.assertStatus("200 OK")
+ self.assertHeader("Content-Type", "application/x-download")
+ self.assertHeader("Content-Disposition",
+ # Make sure the filename is quoted.
+ 'attachment; filename="pdf_file.pdf"')
+ self.assertEqual(len(self.body), 85698)
+
+ def test10HTTPErrors(self):
+ self.getPage("/load_tut_module/tut10_http_errors")
+
+ self.getPage("/")
+ self.assertInBody("""<a href="toggleTracebacks">""")
+ self.assertInBody("""<a href="/doesNotExist">""")
+ self.assertInBody("""<a href="/error?code=403">""")
+ self.assertInBody("""<a href="/error?code=500">""")
+ self.assertInBody("""<a href="/messageArg">""")
+
+ self.getPage("/traceback_setting")
+ setting = self.body
+ self.getPage("/toggleTracebacks")
+ self.assertStatus((302, 303))
+ self.getPage("/traceback_setting")
+ self.assertBody(str(not eval(setting)))
+
+ self.getPage("/error?code=500")
+ self.assertStatus(500)
+ self.assertInBody("The server encountered an unexpected condition "
+ "which prevented it from fulfilling the request.")
+
+ self.getPage("/error?code=403")
+ self.assertStatus(403)
+ self.assertInBody("<h2>You can't do that!</h2>")
+
+ self.getPage("/messageArg")
+ self.assertStatus(500)
+ self.assertInBody("If you construct an HTTPError with a 'message'")
+