Changeset 471
- Timestamp:
- 07/14/05 21:06:43
- Files:
-
- trunk/cherrypy/test/helper.py (modified) (2 diffs)
- trunk/cherrypy/test/test_baseurl_filter.py (modified) (1 diff)
- trunk/cherrypy/test/test_cache_filter.py (modified) (1 diff)
- trunk/cherrypy/test/test_combinedfilters.py (modified) (1 diff)
- trunk/cherrypy/test/test_core.py (modified) (8 diffs)
- trunk/cherrypy/test/test_decodingencoding_filter.py (modified) (1 diff)
- trunk/cherrypy/test/test_gzip_filter.py (modified) (2 diffs)
- trunk/cherrypy/test/test_logdebuginfo_filter.py (modified) (1 diff)
- trunk/cherrypy/test/test_objectmapping.py (modified) (1 diff)
- trunk/cherrypy/test/test_session_filter.py (modified) (2 diffs)
- trunk/cherrypy/test/test_static_filter.py (modified) (1 diff)
- trunk/cherrypy/test/test_tutorials.py (modified) (7 diffs)
- trunk/cherrypy/test/test_virtualhost_filter.py (modified) (1 diff)
- trunk/cherrypy/test/webtest.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/test/helper.py
r470 r471 82 82 class CPWebCase(webtest.WebCase): 83 83 84 def _getRequest(self, url, headers, method, body): 85 # Like getPage, but for serverless requests. 86 requestLine = "%s %s HTTP/1.0" % (method.upper(), url) 87 headers = webtest.cleanHeaders(headers, method, body) 88 89 found = False 90 for k, v in headers: 91 if k.lower() == 'host': 92 found = True 93 break 94 if not found: 95 headers.append(("Host", "%s:%s" % (HOST, PORT))) 96 97 if body is not None: 98 body = StringIO.StringIO(body) 99 100 webtest.ServerError.on = False 101 cherrypy.server.request(HOST, HOST, requestLine, headers, body, "http") 102 self.status = cherrypy.response.status 103 self.headers = cherrypy.response.headers 104 self.body = "".join([chunk for chunk in cherrypy.response.body]) 105 if webtest.ServerError.on: 106 raise webtest.ServerError 107 84 108 def getPage(self, url, headers=None, method="GET", body=None): 85 109 # Install a custom error handler, so errors in the server will: … … 88 112 cherrypy.root._cpOnError = onerror 89 113 90 resp = cherrypy.response91 114 if cherrypy._httpserver is None: 92 requestLine = "%s %s HTTP/1.0" % (method.upper(), url) 93 headers = webtest.cleanHeaders(headers, method, body) 94 95 found = False 96 for k, v in headers: 97 if k.lower() == 'host': 98 found = True 99 break 100 if not found: 101 headers.append(("Host", "%s:%s" % (HOST, PORT))) 102 103 if body is not None: 104 body = StringIO.StringIO(body) 105 106 webtest.ServerError.on = False 107 cherrypy.server.request(HOST, HOST, requestLine, headers, body, "http") 108 resp.body = "".join([chunk for chunk in resp.body]) 109 if webtest.ServerError.on: 110 raise webtest.ServerError 115 self._getRequest(url, headers, method, body) 111 116 else: 112 result = webtest.WebCase.getPage(self, url, headers, method, body) 113 resp.status, resp.headers, resp.body = result 114 # We want both .headerMap and .headers to be available. 115 resp.headerMap = dict(resp.headers) 116 117 webtest.WebCase.getPage(self, url, headers, method, body) trunk/cherrypy/test/test_baseurl_filter.py
r467 r471 53 53 def testBaseUrlFilter(self): 54 54 self.getPage("/") 55 self.assertEqual(cherrypy.response.headerMap['Location'], 56 "http://www.mydomain.com/dummy") 55 self.assertHeader('Location', "http://www.mydomain.com/dummy") 57 56 58 57 trunk/cherrypy/test/test_cache_filter.py
r467 r471 59 59 for trial in xrange(2): 60 60 self.getPage("/") 61 self.assert Equal(cherrypy.response.body,'visit #1')61 self.assertBody('visit #1') 62 62 63 63 if __name__ == '__main__': trunk/cherrypy/test/test_combinedfilters.py
r467 r471 63 63 64 64 self.getPage("/", headers=[("Accept-Encoding", "gzip")]) 65 self.assert _(zbuf.getvalue()[:3] in cherrypy.response.body)65 self.assertInBody(zbuf.getvalue()[:3]) 66 66 67 67 trunk/cherrypy/test/test_core.py
r470 r471 257 257 def testParams(self): 258 258 self.getPage("/params/?thing=a") 259 self.assert Equal(cherrypy.response.body,'a')259 self.assertBody('a') 260 260 261 261 self.getPage("/params/?thing=a&thing=b&thing=c") 262 self.assert Equal(cherrypy.response.body,'abc')262 self.assertBody('abc') 263 263 264 264 def testStatus(self): 265 265 self.getPage("/status/") 266 self.assert Equal(cherrypy.response.body,'normal')267 self.assert Equal(cherrypy.response.status,'200 OK')266 self.assertBody('normal') 267 self.assertStatus('200 OK') 268 268 269 269 self.getPage("/status/blank") 270 self.assert Equal(cherrypy.response.body,'')271 self.assert Equal(cherrypy.response.status,'200 OK')270 self.assertBody('') 271 self.assertStatus('200 OK') 272 272 273 273 self.getPage("/status/illegal") 274 self.assert Equal(cherrypy.response.body,'oops')275 self.assert Equal(cherrypy.response.status,'500 Internal error')274 self.assertBody('oops') 275 self.assertStatus('500 Internal error') 276 276 277 277 self.getPage("/status/unknown") 278 self.assert Equal(cherrypy.response.body,'funky')279 self.assert Equal(cherrypy.response.status,'431 My custom error')278 self.assertBody('funky') 279 self.assertStatus('431 My custom error') 280 280 281 281 self.getPage("/status/bad") 282 self.assert Equal(cherrypy.response.body,'hello')283 self.assert Equal(cherrypy.response.status,'500 Internal error')282 self.assertBody('hello') 283 self.assertStatus('500 Internal error') 284 284 285 285 def testRedirect(self): 286 286 self.getPage("/redirect/") 287 self.assert Equal(cherrypy.response.body,'child')288 self.assert Equal(cherrypy.response.status,'200 OK')287 self.assertBody('child') 288 self.assertStatus('200 OK') 289 289 290 290 self.getPage("/redirect?id=3") 291 self.assert_( cherrypy.response.status in ('302 Found', '303 See Other'))292 self.assert _("<a href='http://127.0.0.1:8000/redirect/?id=3'>http://127.0.0.1:8000/redirect/?id=3</a>"293 in cherrypy.response.body)291 self.assert_(self.status in ('302 Found', '303 See Other')) 292 self.assertInBody("<a href='http://127.0.0.1:8000/redirect/?id=3'>" 293 "http://127.0.0.1:8000/redirect/?id=3</a>") 294 294 295 295 self.getPage("/redirect/by_code?code=300") 296 self.assert _("<a href='somewhere else'>somewhere else</a>" in cherrypy.response.body)297 self.assert Equal(cherrypy.response.status,'300 Multiple Choices')296 self.assertInBody("<a href='somewhere else'>somewhere else</a>") 297 self.assertStatus('300 Multiple Choices') 298 298 299 299 self.getPage("/redirect/by_code?code=301") 300 self.assert _("<a href='somewhere else'>somewhere else</a>" in cherrypy.response.body)301 self.assert Equal(cherrypy.response.status,'301 Moved Permanently')300 self.assertInBody("<a href='somewhere else'>somewhere else</a>") 301 self.assertStatus('301 Moved Permanently') 302 302 303 303 self.getPage("/redirect/by_code?code=302") 304 self.assert _("<a href='somewhere else'>somewhere else</a>" in cherrypy.response.body)305 self.assert Equal(cherrypy.response.status,'302 Found')304 self.assertInBody("<a href='somewhere else'>somewhere else</a>") 305 self.assertStatus('302 Found') 306 306 307 307 self.getPage("/redirect/by_code?code=303") 308 self.assert _("<a href='somewhere else'>somewhere else</a>" in cherrypy.response.body)309 self.assert Equal(cherrypy.response.status,'303 See Other')308 self.assertInBody("<a href='somewhere else'>somewhere else</a>") 309 self.assertStatus('303 See Other') 310 310 311 311 self.getPage("/redirect/by_code?code=307") 312 self.assert _("<a href='somewhere else'>somewhere else</a>" in cherrypy.response.body)313 self.assert Equal(cherrypy.response.status,'307 Temporary Redirect')312 self.assertInBody("<a href='somewhere else'>somewhere else</a>") 313 self.assertStatus('307 Temporary Redirect') 314 314 315 315 self.getPage("/redirect/nomodify") 316 self.assert Equal(cherrypy.response.body,'')317 self.assert Equal(cherrypy.response.status,'304 Not modified')316 self.assertBody('') 317 self.assertStatus('304 Not modified') 318 318 319 319 self.getPage("/redirect/proxy") 320 self.assert Equal(cherrypy.response.body,'')321 self.assert Equal(cherrypy.response.status,'305 Use Proxy')320 self.assertBody('') 321 self.assertStatus('305 Use Proxy') 322 322 323 323 # InternalRedirect 324 324 self.getPage("/redirect/internal") 325 self.assert Equal(cherrypy.response.body,'hello')326 self.assert Equal(cherrypy.response.status,'200 OK')325 self.assertBody('hello') 326 self.assertStatus('200 OK') 327 327 328 328 self.getPage("/redirect/internal2?user_id=Sir-not-appearing-in-this-film") 329 self.assert Equal(cherrypy.response.body,'0 images for Sir-not-appearing-in-this-film')330 self.assert Equal(cherrypy.response.status,'200 OK')329 self.assertBody('0 images for Sir-not-appearing-in-this-film') 330 self.assertStatus('200 OK') 331 331 332 332 self.getPage("/redirect/internal2?user_id=parrot") 333 self.assert Equal(cherrypy.response.body,'0 images for slug')334 self.assert Equal(cherrypy.response.status,'200 OK')333 self.assertBody('0 images for slug') 334 self.assertStatus('200 OK') 335 335 336 336 self.getPage("/redirect/internal2?user_id=terrier") 337 self.assert Equal(cherrypy.response.body,'0 images for fish')338 self.assert Equal(cherrypy.response.status,'200 OK')337 self.assertBody('0 images for fish') 338 self.assertStatus('200 OK') 339 339 340 340 def testFlatten(self): … … 343 343 "/flatten/as_refyield"]: 344 344 self.getPage(url) 345 self.assert Equal(cherrypy.response.body,'content')345 self.assertBody('content') 346 346 347 347 def testErrorHandling(self): 348 348 self.getPage("/error/missing") 349 self.assert _("NotFound" in cherrypy.response.body)349 self.assertInBody("NotFound") 350 350 351 351 helper.webtest.ignored_exceptions.append(ValueError) … … 353 353 valerr = '\n raise ValueError\nValueError\n' 354 354 self.getPage("/error/page_method") 355 self.assert_( cherrypy.response.body.endswith(valerr))355 self.assert_(self.body.endswith(valerr)) 356 356 357 357 self.getPage("/error/page_yield") 358 self.assert_( cherrypy.response.body.endswith(valerr))358 self.assert_(self.body.endswith(valerr)) 359 359 360 360 if cherrypy._httpserver is None: … … 364 364 # Because this error is raised after the response body has 365 365 # started, the status should not change to an error status. 366 self.assert Equal(cherrypy.response.status,"200 OK")367 self.assert Equal(cherrypy.response.body,"helloUnrecoverable error in the server.")366 self.assertStatus("200 OK") 367 self.assertBody("helloUnrecoverable error in the server.") 368 368 finally: 369 369 helper.webtest.ignored_exceptions.pop() … … 371 371 def testHeaderCaseSensitivity(self): 372 372 self.getPage("/headers/") 373 self.assert Equal(cherrypy.response.body,"double header test")374 hnames = [name.title() for name, val in cherrypy.response.headers]373 self.assertBody("double header test") 374 hnames = [name.title() for name, val in self.headers] 375 375 hnames.sort() 376 376 self.assertEqual(hnames, ['Content-Length', 'Content-Type', 'Date', 'Expires', … … 387 387 m = "" 388 388 389 self.assert Equal(cherrypy.response.body,m)389 self.assertBody(m) 390 390 391 391 # Request a PUT method with a form-urlencoded body 392 392 self.getPage("/method/parameterized", method="PUT", 393 393 body="data=on+top+of+other+things") 394 self.assert Equal(cherrypy.response.body,"on top of other things")394 self.assertBody("on top of other things") 395 395 396 396 # Request a PUT method with a file body … … 400 400 self.getPage("/method/request_body", headers=h, method="PUT", 401 401 body="one thing on top of another") 402 self.assert Equal(cherrypy.response.body,"one thing on top of another")402 self.assertBody("one thing on top of another") 403 403 404 404 # Request a disallowed method 405 405 self.getPage("/method/", method="LINK") 406 self.assert Equal(cherrypy.response.status,"405 Method Not Allowed")406 self.assertStatus("405 Method Not Allowed") 407 407 408 408 # Request an unknown method 409 409 self.getPage("/method/", method="SEARCH") 410 self.assert Equal(cherrypy.response.status,"501 Not Implemented")410 self.assertStatus("501 Not Implemented") 411 411 412 412 def testFavicon(self): … … 419 419 420 420 self.getPage("/favicon.ico") 421 self.assert Equal(cherrypy.response.body,data)421 self.assertBody(data) 422 422 423 423 self.getPage("/redirect/favicon.ico") 424 self.assert Equal(cherrypy.response.body,data)424 self.assertBody(data) 425 425 426 426 def testCookies(self): 427 427 self.getPage("/cookies/single?name=First", 428 428 [('Cookie', 'First=Dinsdale;')]) 429 self.assert _(('Set-Cookie', 'First=Dinsdale;') in cherrypy.response.headers)429 self.assertHeader('Set-Cookie', 'First=Dinsdale;') 430 430 431 431 self.getPage("/cookies/multiple?names=First&names=Last", 432 432 [('Cookie', 'First=Dinsdale; Last=Piranha;'), 433 433 ]) 434 self.assert _(('Set-Cookie', 'First=Dinsdale;') in cherrypy.response.headers)435 self.assert _(('Set-Cookie', 'Last=Piranha;') in cherrypy.response.headers)434 self.assertHeader('Set-Cookie', 'First=Dinsdale;') 435 self.assertHeader('Set-Cookie', 'Last=Piranha;') 436 436 437 437 trunk/cherrypy/test/test_decodingencoding_filter.py
r467 r471 57 57 def testDecodingEncodingFilter(self): 58 58 self.getPage('/?param=%s' % europoundUtf8) 59 self.assert Equal(cherrypy.response.body,europoundUtf8)59 self.assertBody(europoundUtf8) 60 60 61 61 trunk/cherrypy/test/test_gzip_filter.py
r467 r471 68 68 69 69 self.getPage('/', headers=[("Accept-Encoding", "gzip")]) 70 self.assert _(zbuf.getvalue()[:3] in cherrypy.response.body)70 self.assertInBody(zbuf.getvalue()[:3]) 71 71 72 72 # Test for ticket #147 … … 74 74 try: 75 75 self.getPage('/noshow', headers=[("Accept-Encoding", "gzip")]) 76 self.assert_('Content-Encoding' not in cherrypy.response.headerMap)77 self.assert_( cherrypy.response.body.endswith("IndexError\n"))76 self.assert_('Content-Encoding' not in dict(self.headers)) 77 self.assert_(self.body.endswith("IndexError\n")) 78 78 finally: 79 79 helper.webtest.ignored_exceptions.pop() trunk/cherrypy/test/test_logdebuginfo_filter.py
r467 r471 58 58 def testLogDebugInfoFilter(self): 59 59 self.getPage('/') 60 self.assert _('Build time' in cherrypy.response.body)61 self.assert _('Page size' in cherrypy.response.body)60 self.assertInBody('Build time') 61 self.assertInBody('Page size') 62 62 # not compatible with the sessionFilter 63 #self.assert _('Session data size' in cherrypy.response.body)63 #self.assertInBody('Session data size') 64 64 65 65 trunk/cherrypy/test/test_objectmapping.py
r467 r471 109 109 def testObjectMapping(self): 110 110 self.getPage('/') 111 self.assert Equal(cherrypy.response.body,'world')111 self.assertBody('world') 112 112 113 113 self.getPage("/dir1/myMethod") 114 self.assert Equal(cherrypy.response.body,"myMethod from dir1, object Path is:'/dir1/myMethod'")114 self.assertBody("myMethod from dir1, object Path is:'/dir1/myMethod'") 115 115 116 116 self.getPage("/this/method/does/not/exist") 117 self.assert Equal(cherrypy.response.body,"default:('this', 'method', 'does', 'not', 'exist')")117 self.assertBody("default:('this', 'method', 'does', 'not', 'exist')") 118 118 119 119 self.getPage("/extra/too/much") 120 self.assert Equal(cherrypy.response.body,"default:('extra', 'too', 'much')")120 self.assertBody("default:('extra', 'too', 'much')") 121 121 122 122 self.getPage("/other") 123 self.assert Equal(cherrypy.response.body,'other')123 self.assertBody('other') 124 124 125 125 self.getPage("/notExposed") 126 self.assert Equal(cherrypy.response.body,"default:('notExposed',)")126 self.assertBody("default:('notExposed',)") 127 127 128 128 self.getPage("/dir1/dir2/") 129 self.assert Equal(cherrypy.response.body,'index for dir2, path is:/dir1/dir2/')129 self.assertBody('index for dir2, path is:/dir1/dir2/') 130 130 131 131 self.getPage("/dir1/dir2") 132 self.assert_( cherrypy.response.status in ('302 Found', '303 See Other'))133 self.assert Equal(cherrypy.response.headerMap['Location'],134 'http://%s:%s/dir1/dir2/'% (helper.HOST, helper.PORT))132 self.assert_(self.status in ('302 Found', '303 See Other')) 133 self.assertHeader('Location', 'http://%s:%s/dir1/dir2/' 134 % (helper.HOST, helper.PORT)) 135 135 136 136 self.getPage("/dir1/dir2/dir3/dir4/index") 137 self.assertEqual(cherrypy.response.body, 138 "default for dir1, param is:('dir2', 'dir3', 'dir4', 'index')") 137 self.assertBody("default for dir1, param is:('dir2', 'dir3', 'dir4', 'index')") 139 138 140 139 self.getPage("/redirect") 141 self.assert Equal(cherrypy.response.status,'302 Found')142 self.assert Equal(cherrypy.response.headerMap['Location'],143 'http://%s:%s/dir1/'% (helper.HOST, helper.PORT))140 self.assertStatus('302 Found') 141 self.assertHeader('Location', 'http://%s:%s/dir1/' 142 % (helper.HOST, helper.PORT)) 144 143 145 144 trunk/cherrypy/test/test_session_filter.py
r470 r471 140 140 def doSession(self, threaded = False): 141 141 self.getPage(self.sessionPath) 142 self.assert Equal(cherrypy.response.body,'1')142 self.assertBody('1') 143 143 144 144 h = [] 145 145 for k, v in cherrypy.response.headers: 146 146 if k == 'Set-Cookie': 147 print ">>", v148 147 h.append(('Cookie', v)) 149 148 getPageArgs = (self.sessionPath, h) … … 164 163 pass 165 164 webtest.ignore_all = False 166 for k, v in cherrypy.response.headers:167 if k.lower() == 'set-cookie':168 print ">", v169 165 170 self.assert Equal(cherrypy.response.body,str(3))166 self.assertBody(str(3)) 171 167 172 168 def doThreadSafety(self): trunk/cherrypy/test/test_static_filter.py
r467 r471 58 58 def testStaticFilter(self): 59 59 self.getPage("/static/index.html") 60 self.assert Equal(cherrypy.response.headerMap['Content-Type'], 'text/html')61 self.assert Equal(cherrypy.response.body,'Hello, world\r\n')60 self.assertHeader('Content-Type', 'text/html') 61 self.assertBody('Hello, world\r\n') 62 62 63 63 self.getPage("/style.css") 64 self.assert Equal(cherrypy.response.headerMap['Content-Type'], 'text/css')64 self.assertHeader('Content-Type', 'text/css') 65 65 # Note: The body should be exactly 'Dummy stylesheet\n', but 66 66 # unfortunately some tools such as WinZip sometimes turn \n 67 67 # into \r\n on Windows when extracting the CherryPy tarball so 68 68 # we just check the content 69 self.assert_( cherrypy.response.body.startswith('Dummy stylesheet'))69 self.assert_(self.body.startswith('Dummy stylesheet')) 70 70 71 71 if __name__ == "__main__": trunk/cherrypy/test/test_tutorials.py
r467 r471 60 60 load_tut_module("tut01_helloworld") 61 61 self.getPage("/") 62 self.assert Equal(cherrypy.response.body,'Hello world!')62 self.assertBody('Hello world!') 63 63 64 64 def test02ExposeMethods(self): 65 65 load_tut_module("tut02_expose_methods") 66 66 self.getPage("/showMessage") 67 self.assert Equal(cherrypy.response.body,'Hello world!')67 self.assertBody('Hello world!') 68 68 69 69 def test03GetAndPost(self): … … 72 72 # Try different GET queries 73 73 self.getPage("/greetUser?name=Bob") 74 self.assert Equal(cherrypy.response.body,"Hey Bob, what's up?")74 self.assertBody("Hey Bob, what's up?") 75 75 76 76 self.getPage("/greetUser") 77 self.assertEqual(cherrypy.response.body, 78 'Please enter your name <a href="./">here</a>.') 77 self.assertBody('Please enter your name <a href="./">here</a>.') 79 78 80 79 self.getPage("/greetUser?name=") 81 self.assertEqual(cherrypy.response.body, 82 'No, really, enter your name <a href="./">here</a>.') 80 self.assertBody('No, really, enter your name <a href="./">here</a>.') 83 81 84 82 # Try the same with POST 85 83 self.getPage("/greetUser", method="POST", body="name=Bob") 86 self.assert Equal(cherrypy.response.body,"Hey Bob, what's up?")84 self.assertBody("Hey Bob, what's up?") 87 85 88 86 self.getPage("/greetUser", method="POST", body="name=") 89 self.assertEqual(cherrypy.response.body, 90 'No, really, enter your name <a href="./">here</a>.') 87 self.assertBody('No, really, enter your name <a href="./">here</a>.') 91 88 92 89 def test04ComplexSite(self): … … 102 99 <p>[<a href="../">Return to links page</a>]</p>''' 103 100 self.getPage("/links/extra/") 104 self.assert Equal(cherrypy.response.body,msg)101 self.assertBody(msg) 105 102 106 103 def test05DerivedObjects(self): … … 122 119 ''' 123 120 self.getPage("/another/") 124 self.assert Equal(cherrypy.response.body,msg)121 self.assertBody(msg) 125 122 126 123 def test06DefaultMethod(self): 127 124 load_tut_module("tut06_default_method") 128 125 self.getPage('/hendrik') 129 self.assertEqual(cherrypy.response.body, 130 'Hendrik Mans, CherryPy co-developer & crazy German ' 126 self.assertBody('Hendrik Mans, CherryPy co-developer & crazy German ' 131 127 '(<a href="./">back</a>)') 132 128 def test07Sessions(self): … … 135 131 136 132 self.getPage('/') 137 self.assertEqual(cherrypy.response.body, 138 "\n During your current session, you've viewed this" 133 self.assertBody("\n During your current session, you've viewed this" 139 134 "\n page 1 times! Your life is a patio of fun!" 140 135 "\n ") 141 136 142 self.getPage('/', [('Cookie', dict(cherrypy.response.headers)['Set-Cookie'])]) 143 self.assertEqual(cherrypy.response.body, 144 "\n During your current session, you've viewed this" 137 self.getPage('/', [('Cookie', dict(self.headers)['Set-Cookie'])]) 138 self.assertBody("\n During your current session, you've viewed this" 145 139 "\n page 2 times! Your life is a patio of fun!" 146 140 "\n ") … … 151 145 152 146 self.getPage('/') 153 self.assert _("viewed this page 1 times" in cherrypy.response.body)147 self.assertInBody("viewed this page 1 times") 154 148 155 self.getPage('/', [('Cookie', dict( cherrypy.response.headers)['Set-Cookie'])])156 self.assert _("viewed this page 2 times" in cherrypy.response.body)149 self.getPage('/', [('Cookie', dict(self.headers)['Set-Cookie'])]) 150 self.assertInBody("viewed this page 2 times") 157 151 158 152 def test09GeneratorsAndYield(self): 159 153 load_tut_module("tut09_generators_and_yield") 160 154 self.getPage('/') 161 self.assertEqual(cherrypy.response.body, 162 '<html><body><h2>Generators rule!</h2>' 155 self.assertBody('<html><body><h2>Generators rule!</h2>' 163 156 '<h3>List of users:</h3>' 164 157 'Remi<br/>Carlos<br/>Hendrik<br/>Lorenzo Lamas<br/>' … … 178 171 """ 179 172 self.getPage('/upload', h, "POST", b) 180 self.assert Equal(cherrypy.response.body,'''173 self.assertBody(''' 181 174 <html><body> 182 175 myFile length: 5<br /> trunk/cherrypy/test/test_virtualhost_filter.py
r467 r471 53 53 def testVirtualHostFilter(self): 54 54 self.getPage("/") 55 self.assert Equal(cherrypy.response.body,'Hello, world')55 self.assertBody('Hello, world') 56 56 57 57 trunk/cherrypy/test/webtest.py
r470 r471 153 153 154 154 result = openURL(url, headers, method, body, self.HOST, self.PORT) 155 self.status, self.headers, self.body = result 155 156 156 157 if ServerError.on: 157 158 raise ServerError 158 159 return result 160 161 def assertStatus(self, status, msg=None): 162 """Fail if self.status != status.""" 163 if not self.status == status: 164 raise self.failureException, \ 165 (msg or 'Status (%s) != %s' % (`self.status`, `status`)) 166 167 def assertHeader(self, key, value=None, msg=None): 168 """Fail if (key, [value]) not in self.headers.""" 169 lowkey = key.lower() 170 for k, v in self.headers: 171 if k.lower() == lowkey: 172 if value is None or value == v: 173 return 174 175 if value is None: 176 raise self.failureException, msg or '%s not in headers' % `key` 177 else: 178 raise self.failureException, \ 179 (msg or '%s:%s not in headers' % (`key`, `value`)) 180 181 def assertBody(self, value, msg=None): 182 """Fail if value != self.body.""" 183 if value != self.body: 184 if msg is None: 185 msg = 'expected body:\n%s\n\nactual body:\n%s' % (`value`, `self.body`) 186 raise self.failureException, msg 187 188 def assertInBody(self, value, msg=None): 189 """Fail if value not in self.body.""" 190 if value not in self.body: 191 raise self.failureException, msg or '%s not in body' % `value` 192 193 def assertNotInBody(self, value, msg=None): 194 """Fail if value in self.body.""" 195 if value in self.body: 196 raise self.failureException, msg or '%s found in body' % `value` 197 159 198 160 199

