def test_simple_match(self): '''Check simple case of match''' app = web.match('/first', 'first') | (lambda env, data, nx: Response()) self.assertEqual(web.ask(app, '/first').status_int, 200) self.assertEqual(web.ask(app, '/second'), None)
def test_host10(self): app = web.cases ( web.subdomain(u'bla') | web.match('/', 'bla') | (lambda e,d,n: Response(body='bla') ), web.subdomain(u'localhost') | web.match('/', 'localhost') | (lambda e,d,n: Response(body='localhost')) ) self.assertEqual(web.ask(app, 'http://bla/').body, 'bla') self.assertEqual(web.ask(app, '/').body, 'localhost')
def test_not_found(self): '''Check int converter with handler which accepts params''' def handler(env, data, nx): return Response() app = web.cases( web.match('/first', 'first') | handler, web.match('/second/<int:id>', 'second') | handler) self.assert_(web.ask(app, '/second/42/') is None) self.assert_(web.ask(app, '/second/42s') is None)
def test_int_converter(self): '''Check int converter''' def handler(env, data, nx): self.assertEqual(data.id, 42) return Response() app = web.cases( web.match('/first', 'first') | handler, web.match('/second/<int:id>', 'second') | handler) web.ask(app, '/second/42')
def test_multiple_int_convs(self): '''Check multiple int converters''' def handler(env, data, nx): self.assertEqual(data.id, 42) self.assertEqual(data.param, 23) return Response() app = web.cases( web.match('/first', 'first') | handler, web.match('/second/<int:id>/<int:param>', 'second') | handler) web.ask(app, '/second/42/23')
def test_unicode(self): '''IRI tests''' app = web.subdomain(u'рф') | web.subdomain(u'сайт') | web.match('/', 'site') | (lambda e,d,n: Response() ) encoded = 'http://xn--80aswg.xn--p1ai/' self.assertEqual(web.Reverse.from_handler(app)('site').get_readable(), u'http://сайт.рф/') self.assertEqual(web.Reverse.from_handler(app)('site'), encoded) self.assertNotEqual(web.ask(app, encoded), None)
def test_unicode(self): '''Routing rules with unicode''' # XXX move to urltemplate and reverse tests? app = web.cases( web.prefix(u'/հայերեն') | web.cases( web.match(u'/%', 'percent') | (lambda e,d,n: Response()) ) ) encoded = '/%D5%B0%D5%A1%D5%B5%D5%A5%D6%80%D5%A5%D5%B6/%25' self.assertEqual(web.Reverse.from_handler(app)('percent'), encoded) self.assertEqual(web.Reverse.from_handler(app)('percent').get_readable(), u'/հայերեն/%') self.assertNotEqual(web.ask(app, encoded), None) # ??? # rctx have prefixes, so we need new one self.assertEqual(web.ask(app, encoded).status_int, 200)
def test_prefix_root(self): '''Prefix root''' def handler(env, data, nx): self.assertEqual(env.request.prefixed_path, '/') return Response() app = web.cases( web.match('/', 'index') | handler, web.prefix('/docs') | web.cases( web.match('/', 'docs') | handler, web.match('/item', 'doc') | handler, web.prefix('/tags') | web.cases( web.match('/', 'tags') | handler, web.match('/tag', 'tag') | handler))) self.assertEqual(web.ask(app, '/docs'), None) self.assertEqual(web.ask(app, '/docs/').status_int, 200) self.assertEqual(web.ask(app, '/docs/tags'), None) self.assertEqual(web.ask(app, '/docs/tags/').status_int, 200) self.assertEqual(web.ask(app, '/docs/tags/asdasd'), None)
def test_prefix_leaf(self): '''Simple prefix''' def handler(env, data, nx): self.assertEqual(env.request.prefixed_path, '/item') return Response() app = web.cases( web.match('/', 'index'), web.prefix('/docs') | web.cases( web.match('/', 'docs') | handler, web.match('/item', 'doc') | handler, web.prefix('/tags') | web.cases( web.match('/', 'tags') | handler, web.match('/tag', 'tag') | handler))) self.assertEqual(web.ask(app, '/docs/item').status_int, 200)
def test_subdomain(self): '''Subdomain filter''' def handler(env, data, nx): self.assertEqual(env.request.path, '/') return Response() app = web.subdomain('host') | web.cases( web.subdomain('') | web.match('/', 'index') | handler, web.subdomain('k') | web.cases( web.subdomain('l') | web.cases( web.match('/', 'l') | handler, ), web.subdomain('') | web.match('/', 'k') | handler)) self.assertEqual(web.ask(app, 'http://host/').status_int, 200) self.assertEqual(web.ask(app, 'http://k.host/').status_int, 200) self.assertEqual(web.ask(app, 'http://l.k.host/').status_int, 200) self.assertEqual(web.ask(app, 'http://x.l.k.host/').status_int, 200) self.assert_(web.ask(app, 'http://x.k.host/') is None) self.assert_(web.ask(app, 'http://lk.host/') is None) self.assert_(web.ask(app, 'http://mhost/') is None)