def test_no_quote(self): u = URL(u'/урл/', host=u'сайт.рф', query={'q': u'поиск'}, fragment=u"якорь") self.assertEqual(u.get_readable(), u'http://сайт.рф/урл/?q=поиск#якорь')
def test_cyrillic_path(self): url1 = URL.from_url( u'http://test.ru/тест'.encode('utf-8')) # encoded unicode url2 = URL.from_url(u'http://test.ru/тест') # decoded unicode # should work both without errors self.assertEqual(url1.path, '/%D1%82%D0%B5%D1%81%D1%82') self.assertEqual(url1.path, url2.path)
def test_params_set_args(self): 'Use multidict to set params in url' url = URL('/') self.assertIn(url.qs_set(a=1, b=2), ['/?a=1&b=2', '/?b=2&a=1']) url = url.qs_set([('a', '1'), ('a', '2'), ('b', '3')]) self.assertEqual(url, '/?a=1&a=2&b=3') self.assertEqual(url.qs_set([('a', '1'), ('c', '2')]), '/?b=3&a=1&c=2') self.assertRaises(TypeError, url.qs_set, [('a', 1)], z=0)
def test_param_set(self): 'Set new param in url' u = URL('/path/to/something', query=dict(id=3, page=5, title='title')) self.assertEqual(u, '/path/to/something?title=title&id=3&page=5') u = u.qs_set(page=6) self.assertEqual(u, '/path/to/something?title=title&id=3&page=6') u = u.qs_set(page=7, title='land') self.assertEqual(u, '/path/to/something?id=3&page=7&title=land')
def test_param_delete(self): 'Set new param in url' u = URL('/path/to/something', query=[('id', 3), ('page', 5), ('page', 6)]) self.assertEqual(u, '/path/to/something?id=3&page=5&page=6') u = u.qs_delete('page') self.assertEqual(u, '/path/to/something?id=3') u = u.qs_delete('offset') self.assertEqual(u, '/path/to/something?id=3')
def test_params_set_args(self): 'Use multidict to set params in url' url = URL('/') self.assertEqual(url.qs_set(a=1, b=2), '/?a=1&b=2') url = url.qs_set([('a', '1'), ('a', '2'), ('b', '3')]) self.assertEqual(url, '/?a=1&a=2&b=3') self.assertEqual(url.qs_set([('a', '1'), ('c', '2')]), '/?b=3&a=1&c=2') self.assertRaises(TypeError, url.qs_set, [('a', 1)], z=0)
def test_broken_idna(self): src = u'http://xn--.xn--p1ai/' url = URL.from_url(src.encode('utf-8')) self.assertEqual(url.get_readable(), u'http://xn--.рф/') self.assertEqual(str(url), src) url = URL.from_url(src) self.assertEqual(url.get_readable(), u'http://xn--.рф/')
def test_quotted_path_to_constructor(self): u = URL(u'/%D1%83/', host=u'xn--80aswg.xn--p1ai', query={'q': u'%D0%BF'}, fragment=u"%D1%8F") # We shold not try to unquote the urlqouted values! # Otherwise it is impossible to build a consistent interface self.assertEqual(u, u'http://xn--80aswg.xn--p1ai/%25D1%2583/?q=%25D0%25BF#%25D1%258F') self.assertEqual(u.get_readable(), u'http://сайт.рф/%25D1%2583/?q=%25D0%25BF#%25D1%258F')
def test_param_get(self): 'Get param from url' u = URL('/path/to/something', query=dict(id=3, page=5, title='title')) page = u.qs_get('page') self.assertEqual(page, 5) u = u.qs_set(page=7) page = u.qs_get('page') self.assertEqual(page, 7) not_here = u.qs_get('not_here') self.assertEqual(not_here, None)
def test_param_set(self): 'Set new param in url' u = URL('/path/to/something', query=[('title', 'title'), ('id', 3), ('page', 5)]) self.assertEqual(u, '/path/to/something?title=title&id=3&page=5') if six.PY2: u = u.qs_set(page=long(2)) self.assertEqual(u, '/path/to/something?title=title&id=3&page=2') u = u.qs_set(page=6) self.assertEqual(u, '/path/to/something?title=title&id=3&page=6') u = u.qs_set(page=7, title='land') self.assertIn(u, ['/path/to/something?id=3&page=7&title=land', '/path/to/something?id=3&title=land&page=7'])
def test_from_url_idna(self): src = (u'http://xn--80aswg.xn--p1ai' u'/%D1%83%D1%80%D0%BB/' u'?q=%D0%BF%D0%BE%D0%B8%D1%81%D0%BA' u'#%D1%8F%D0%BA%D0%BE%D1%80%D1%8C') url = URL.from_url(src.encode('utf-8')) self.assertEqual(url.get_readable(), u'http://сайт.рф/урл/?q=поиск#якорь') url = URL.from_url(src) self.assertEqual(url.get_readable(), u'http://сайт.рф/урл/?q=поиск#якорь')
def test_copy_url(self): url_orig = URL.from_url(u"http://test.ru/тест?arg=value#anchor") url_copy = copy.copy(url_orig) self.assertEqual(str(url_orig), str(url_copy)) url_deepcopy = copy.deepcopy(url_orig) self.assertEqual(str(url_orig), str(url_deepcopy))
def test_iri(self): u = URL('/', host=u'example.com') self.assertEqual(u, u'http://example.com/') u = URL(u'/урл/', host=u'сайт.рф', query={'q': u'поиск'}, fragment=u"якорь") self.assertEqual(u, u'http://xn--80aswg.xn--p1ai' u'/%D1%83%D1%80%D0%BB/' u'?q=%D0%BF%D0%BE%D0%B8%D1%81%D0%BA' u'#%D1%8F%D0%BA%D0%BE%D1%80%D1%8C') # Note: you should probably not use unicode in fragment part of URL. # We encode it according to RFC, but different client handle # it in different ways: Chrome allows unicode and does not # encode/decode it at all, while Firefox handles it according RFC self.assertEqual(u.qs_set(a=u'1'), u'http://xn--80aswg.xn--p1ai' u'/%D1%83%D1%80%D0%BB/' u'?q=%D0%BF%D0%BE%D0%B8%D1%81%D0%BA&a=1' u'#%D1%8F%D0%BA%D0%BE%D1%80%D1%8C')
def test_from_url_path(self): url = URL.from_url('/url?a=1&b=2&b=3') self.assertEqual(url.scheme, 'http') self.assertEqual(url.host, '') self.assertEqual(url.port, '') self.assertEqual(url.path, '/url') self.assertEqual(set(url.query.items()), {('a' ,'1'), ('b', '2'), ('b', '3')})
def test_from_url_path(self): url = URL.from_url('/url?a=1&b=2&b=3') self.assertEqual(url.schema, 'http') self.assertEqual(url.host, '') self.assertEqual(url.port, '') self.assertEqual(url.path, '/url') self.assertEqual(url.query.items(), [('a' ,'1'), ('b', '2'), ('b', '3')])
def test_from_url_unicode(self): url = URL.from_url(u'http://сайт.рф/', show_host=False) self.assertEqual(url.schema, 'http') self.assertEqual(url.host, u'сайт.рф') self.assertEqual(url.port, '') self.assertEqual(url.path, '/') self.assertEqual(url.show_host, False)
def test_from_url_unicode(self): url = URL.from_url(u'http://сайт.рф/', show_host=False) self.assertEqual(url.scheme, 'http') self.assertEqual(url.host, u'сайт.рф') self.assertEqual(url.port, '') self.assertEqual(url.path, '/') self.assertEqual(url.show_host, False)
def test_from_url(self): url = URL.from_url('http://example.com/url?a=1&b=2&b=3', show_host=False) self.assertEqual(url.schema, 'http') self.assertEqual(url.host, 'example.com') self.assertEqual(url.port, '') self.assertEqual(url.path, '/url') self.assertEqual(url.query.items(), [('a' ,'1'), ('b', '2'), ('b', '3')]) self.assertEqual(url.show_host, False)
def test_rendering_with_params(self): 'Url with params' u = URL('/path/to/something', query=dict(id=3, page=5, title='title')) self.assertIn(u, ['/path/to/something?title=title&id=3&page=5', '/path/to/something?title=title&page=5&id=3', '/path/to/something?id=3&page=5&title=title', '/path/to/something?id=3&title=title&page=5', '/path/to/something?page=5&id=3&title=title', '/path/to/something?page=5&title=title&id=3',])
def test_from_url(self): url = URL.from_url('http://example.com/url?a=1&b=2&b=3#anchor', show_host=False) self.assertEqual(url.scheme, 'http') self.assertEqual(url.host, 'example.com') self.assertEqual(url.port, '') self.assertEqual(url.path, '/url') self.assertEqual(url.fragment, 'anchor') self.assertEqual(set(url.query.items()), {('a' ,'1'), ('b', '2'), ('b', '3')}) self.assertEqual(url.show_host, False)
def test_quote(self): u = URL(quote('/path/to/+')) self.assertEqual(u, '/path/to/%2B') u = u.qs_set(page=7) self.assertEqual(u, '/path/to/%2B?page=7')
def test_empty_fragment(self): self.assertEqual(URL.from_url('/').fragment, None) self.assertEqual(URL.from_url('/#').fragment, '') self.assertEqual(URL('/', fragment=None), '/') self.assertEqual(URL('/', fragment='') ,'/#')
def test_rendering_without_params(self): 'Url without params' u = URL('/path/to/something') self.assertEqual(u, '/path/to/something') self.assert_(u in repr(u))
def test_from_url_broken_unicode(self): url = URL.from_url('/search%E3%81?q=hello%E3%81#hash%E3%81') self.assertEqual(url.get_readable(), u'/search\N{REPLACEMENT CHARACTER}' u'?q=hello\N{REPLACEMENT CHARACTER}' u'#hash\N{REPLACEMENT CHARACTER}')
def test_parse_cp_1251(self): url_string = u"http://test.com/?query=привет".encode('cp1251') url = URL.from_url(url_string) self.assertEqual(url.host, 'test.com') self.assertEqual(url.query['query'], u'\N{REPLACEMENT CHARACTER}'*6)
def test_cyrillic_path(self): url1 = URL.from_url('http://test.ru/тест') # encoded unicode url2 = URL.from_url(u'http://test.ru/тест') # decoded unicode # should work both without errors self.assertEqual(url1.path, '/%D1%82%D0%B5%D1%81%D1%82') self.assertEqual(url1.path, url2.path)
def test_no_quote(self): u = URL(u'/урл/', host=u'сайт.рф', query={'q': u'поиск'}) self.assertEqual(u.get_readable(), u'http://сайт.рф/урл/?q=поиск')
def test_from_url_idna(self): url = URL.from_url('http://xn--80aswg.xn--p1ai/%D1%83%D1%80%D0%BB/?q=%D0%BF%D0%BE%D0%B8%D1%81%D0%BA') self.assertEqual(url.get_readable(), u'http://сайт.рф/урл/?q=поиск')
def test_param_add_args(self): 'Add param to url' url = URL('/') self.assertIn(url.qs_add([('a', 1), ('c', 3)], a=2, b=2), ['/?a=1&c=3&a=2&b=2', '/?a=1&c=3&b=2&a=2'])
def test_from_url_broken_unicode(self): url = URL.from_url('/search?q=hello%E3%81') self.assertEqual(url.get_readable(), u'/search?q=hello�')
def test_param_add_args(self): 'Add param to url' url = URL('/') self.assertEqual(url.qs_add([('a', 1), ('c', 3)], a=2, b=2), '/?a=1&c=3&a=2&b=2')