Bowe Strickland
2018-10-27 6e49871feaa1a60549206cf5512c9fb7f3d5fd56
commit | author | age
eb9fbf 1 import unittest
0c29cf 2 from pyramid.compat import text_, native_
MM 3
eb9fbf 4
CM 5 class UrlEncodeTests(unittest.TestCase):
6f43b6 6     def _callFUT(self, query, doseq=False, **kw):
b60bdb 7         from pyramid.encode import urlencode
0c29cf 8
6f43b6 9         return urlencode(query, doseq, **kw)
eb9fbf 10
CM 11     def test_ascii_only(self):
0c29cf 12         result = self._callFUT([('a', 1), ('b', 2)])
eb9fbf 13         self.assertEqual(result, 'a=1&b=2')
CM 14
15     def test_unicode_key(self):
a84e17 16         la = text_(b'LaPe\xc3\xb1a', 'utf-8')
0c29cf 17         result = self._callFUT([(la, 1), ('b', 2)])
eb9fbf 18         self.assertEqual(result, 'LaPe%C3%B1a=1&b=2')
CM 19
20     def test_unicode_val_single(self):
a84e17 21         la = text_(b'LaPe\xc3\xb1a', 'utf-8')
0c29cf 22         result = self._callFUT([('a', la), ('b', 2)])
eb9fbf 23         self.assertEqual(result, 'a=LaPe%C3%B1a&b=2')
CM 24
25     def test_unicode_val_multiple(self):
a84e17 26         la = [text_(b'LaPe\xc3\xb1a', 'utf-8')] * 2
0c29cf 27         result = self._callFUT([('a', la), ('b', 2)], doseq=True)
eb9fbf 28         self.assertEqual(result, 'a=LaPe%C3%B1a&a=LaPe%C3%B1a&b=2')
CM 29
004e64 30     def test_int_val_multiple(self):
CM 31         s = [1, 2]
32         result = self._callFUT([('a', s)], doseq=True)
33         self.assertEqual(result, 'a=1&a=2')
a84e17 34
CM 35     def test_with_spaces(self):
36         result = self._callFUT([('a', '123 456')], doseq=True)
37         self.assertEqual(result, 'a=123+456')
004e64 38
eb9fbf 39     def test_dict(self):
0c29cf 40         result = self._callFUT({'a': 1})
eb9fbf 41         self.assertEqual(result, 'a=1')
CM 42
af5fa0 43     def test_None_value(self):
MM 44         result = self._callFUT([('a', None)])
15afe5 45         self.assertEqual(result, 'a=')
af5fa0 46
MM 47     def test_None_value_with_prefix(self):
48         result = self._callFUT([('a', '1'), ('b', None)])
15afe5 49         self.assertEqual(result, 'a=1&b=')
CM 50
51     def test_None_value_with_prefix_values(self):
52         result = self._callFUT([('a', '1'), ('b', None), ('c', None)])
53         self.assertEqual(result, 'a=1&b=&c=')
af5fa0 54
6f43b6 55     def test_quote_via(self):
MM 56         def my_quoter(value):
57             return 'xxx' + value
0c29cf 58
MM 59         result = self._callFUT(
60             [('a', '1'), ('b', None), ('c', None)], quote_via=my_quoter
61         )
6f43b6 62         self.assertEqual(result, 'xxxa=xxx1&xxxb=&xxxc=')
0c29cf 63
6f43b6 64
eb9fbf 65 class URLQuoteTests(unittest.TestCase):
CM 66     def _callFUT(self, val, safe=''):
b60bdb 67         from pyramid.encode import url_quote
0c29cf 68
eb9fbf 69         return url_quote(val, safe)
CM 70
a84e17 71     def test_it_bytes(self):
CM 72         la = b'La/Pe\xc3\xb1a'
eb9fbf 73         result = self._callFUT(la)
CM 74         self.assertEqual(result, 'La%2FPe%C3%B1a')
0c29cf 75
a84e17 76     def test_it_native(self):
CM 77         la = native_(b'La/Pe\xc3\xb1a', 'utf-8')
78         result = self._callFUT(la)
79         self.assertEqual(result, 'La%2FPe%C3%B1a')
80
eb9fbf 81     def test_it_with_safe(self):
a84e17 82         la = b'La/Pe\xc3\xb1a'
eb9fbf 83         result = self._callFUT(la, '/')
CM 84         self.assertEqual(result, 'La/Pe%C3%B1a')
9eb793 85
CM 86     def test_it_with_nonstr_nonbinary(self):
87         la = None
88         result = self._callFUT(la, '/')
89         self.assertEqual(result, 'None')