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