Submit
Path:
~
/
/
lib64
/
python2.7
/
site-packages
/
simplejson
/
tests
/
File Content:
test_scanstring.py
import sys from unittest import TestCase import simplejson as json import simplejson.decoder from simplejson.compat import b, PY3 class TestScanString(TestCase): # The bytes type is intentionally not used in most of these tests # under Python 3 because the decoder immediately coerces to str before # calling scanstring. In Python 2 we are testing the code paths # for both unicode and str. # # The reason this is done is because Python 3 would require # entirely different code paths for parsing bytes and str. # def test_py_scanstring(self): self._test_scanstring(simplejson.decoder.py_scanstring) def test_c_scanstring(self): if not simplejson.decoder.c_scanstring: return self._test_scanstring(simplejson.decoder.c_scanstring) def _test_scanstring(self, scanstring): if sys.maxunicode == 65535: self.assertEqual( scanstring(u'"z\U0001d120x"', 1, None, True), (u'z\U0001d120x', 6)) else: self.assertEqual( scanstring(u'"z\U0001d120x"', 1, None, True), (u'z\U0001d120x', 5)) self.assertEqual( scanstring('"\\u007b"', 1, None, True), (u'{', 8)) self.assertEqual( scanstring('"A JSON payload should be an object or array, not a string."', 1, None, True), (u'A JSON payload should be an object or array, not a string.', 60)) self.assertEqual( scanstring('["Unclosed array"', 2, None, True), (u'Unclosed array', 17)) self.assertEqual( scanstring('["extra comma",]', 2, None, True), (u'extra comma', 14)) self.assertEqual( scanstring('["double extra comma",,]', 2, None, True), (u'double extra comma', 21)) self.assertEqual( scanstring('["Comma after the close"],', 2, None, True), (u'Comma after the close', 24)) self.assertEqual( scanstring('["Extra close"]]', 2, None, True), (u'Extra close', 14)) self.assertEqual( scanstring('{"Extra comma": true,}', 2, None, True), (u'Extra comma', 14)) self.assertEqual( scanstring('{"Extra value after close": true} "misplaced quoted value"', 2, None, True), (u'Extra value after close', 26)) self.assertEqual( scanstring('{"Illegal expression": 1 + 2}', 2, None, True), (u'Illegal expression', 21)) self.assertEqual( scanstring('{"Illegal invocation": alert()}', 2, None, True), (u'Illegal invocation', 21)) self.assertEqual( scanstring('{"Numbers cannot have leading zeroes": 013}', 2, None, True), (u'Numbers cannot have leading zeroes', 37)) self.assertEqual( scanstring('{"Numbers cannot be hex": 0x14}', 2, None, True), (u'Numbers cannot be hex', 24)) self.assertEqual( scanstring('[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]', 21, None, True), (u'Too deep', 30)) self.assertEqual( scanstring('{"Missing colon" null}', 2, None, True), (u'Missing colon', 16)) self.assertEqual( scanstring('{"Double colon":: null}', 2, None, True), (u'Double colon', 15)) self.assertEqual( scanstring('{"Comma instead of colon", null}', 2, None, True), (u'Comma instead of colon', 25)) self.assertEqual( scanstring('["Colon instead of comma": false]', 2, None, True), (u'Colon instead of comma', 25)) self.assertEqual( scanstring('["Bad value", truth]', 2, None, True), (u'Bad value', 12)) for c in map(chr, range(0x00, 0x1f)): self.assertEqual( scanstring(c + '"', 0, None, False), (c, 2)) self.assertRaises( ValueError, scanstring, c + '"', 0, None, True) self.assertRaises(ValueError, scanstring, '', 0, None, True) self.assertRaises(ValueError, scanstring, 'a', 0, None, True) self.assertRaises(ValueError, scanstring, '\\', 0, None, True) self.assertRaises(ValueError, scanstring, '\\u', 0, None, True) self.assertRaises(ValueError, scanstring, '\\u0', 0, None, True) self.assertRaises(ValueError, scanstring, '\\u01', 0, None, True) self.assertRaises(ValueError, scanstring, '\\u012', 0, None, True) self.assertRaises(ValueError, scanstring, '\\u0123', 0, None, True) if sys.maxunicode > 65535: self.assertRaises(ValueError, scanstring, '\\ud834\\u"', 0, None, True) self.assertRaises(ValueError, scanstring, '\\ud834\\x0123"', 0, None, True) def test_issue3623(self): self.assertRaises(ValueError, json.decoder.scanstring, "xxx", 1, "xxx") self.assertRaises(UnicodeDecodeError, json.encoder.encode_basestring_ascii, b("xx\xff")) def test_overflow(self): # Python 2.5 does not have maxsize, Python 3 does not have maxint maxsize = getattr(sys, 'maxsize', getattr(sys, 'maxint', None)) assert maxsize is not None self.assertRaises(OverflowError, json.decoder.scanstring, "xxx", maxsize + 1) def test_surrogates(self): scanstring = json.decoder.scanstring def assertScan(given, expect, test_utf8=True): givens = [given] if not PY3 and test_utf8: givens.append(given.encode('utf8')) for given in givens: (res, count) = scanstring(given, 1, None, True) self.assertEqual(len(given), count) self.assertEqual(res, expect) assertScan( u'"z\\ud834\\u0079x"', u'z\ud834yx') assertScan( u'"z\\ud834\\udd20x"', u'z\U0001d120x') assertScan( u'"z\\ud834\\ud834\\udd20x"', u'z\ud834\U0001d120x') assertScan( u'"z\\ud834x"', u'z\ud834x') assertScan( u'"z\\udd20x"', u'z\udd20x') assertScan( u'"z\ud834x"', u'z\ud834x') # It may look strange to join strings together, but Python is drunk. # https://gist.github.com/etrepum/5538443 assertScan( u'"z\\ud834\udd20x12345"', u''.join([u'z\ud834', u'\udd20x12345'])) assertScan( u'"z\ud834\\udd20x"', u''.join([u'z\ud834', u'\udd20x'])) # these have different behavior given UTF8 input, because the surrogate # pair may be joined (in maxunicode > 65535 builds) assertScan( u''.join([u'"z\ud834', u'\udd20x"']), u''.join([u'z\ud834', u'\udd20x']), test_utf8=False) self.assertRaises(ValueError, scanstring, u'"z\\ud83x"', 1, None, True) self.assertRaises(ValueError, scanstring, u'"z\\ud834\\udd2x"', 1, None, True)
Edit
Rename
Chmod
Delete
FILE
FOLDER
Name
Size
Permission
Action
__init__.py
1979 bytes
0644
__init__.pyc
3309 bytes
0644
__init__.pyo
3309 bytes
0644
test_bigint_as_string.py
2238 bytes
0644
test_bigint_as_string.pyc
2638 bytes
0644
test_bigint_as_string.pyo
2638 bytes
0644
test_bitsize_int_as_string.py
2297 bytes
0644
test_bitsize_int_as_string.pyc
3029 bytes
0644
test_bitsize_int_as_string.pyo
3029 bytes
0644
test_check_circular.py
917 bytes
0644
test_check_circular.pyc
2161 bytes
0644
test_check_circular.pyo
2161 bytes
0644
test_decimal.py
2544 bytes
0644
test_decimal.pyc
3521 bytes
0644
test_decimal.pyo
3521 bytes
0644
test_decode.py
4021 bytes
0644
test_decode.pyc
5884 bytes
0644
test_decode.pyo
5884 bytes
0644
test_default.py
221 bytes
0644
test_default.pyc
751 bytes
0644
test_default.pyo
751 bytes
0644
test_dump.py
4999 bytes
0644
test_dump.pyc
6562 bytes
0644
test_dump.pyo
6562 bytes
0644
test_encode_basestring_ascii.py
2337 bytes
0644
test_encode_basestring_ascii.pyc
3587 bytes
0644
test_encode_basestring_ascii.pyo
3587 bytes
0644
test_encode_for_html.py
1022 bytes
0644
test_encode_for_html.pyc
1864 bytes
0644
test_encode_for_html.pyo
1864 bytes
0644
test_errors.py
1549 bytes
0644
test_errors.pyc
2508 bytes
0644
test_errors.pyo
2508 bytes
0644
test_fail.py
6346 bytes
0644
test_fail.pyc
5397 bytes
0644
test_fail.pyo
5397 bytes
0644
test_float.py
1430 bytes
0644
test_float.pyc
2557 bytes
0644
test_float.pyo
2557 bytes
0644
test_for_json.py
2767 bytes
0644
test_for_json.pyc
5853 bytes
0644
test_for_json.pyo
5853 bytes
0644
test_indent.py
2568 bytes
0644
test_indent.pyc
2995 bytes
0644
test_indent.pyo
2995 bytes
0644
test_item_sort_key.py
1376 bytes
0644
test_item_sort_key.pyc
2597 bytes
0644
test_item_sort_key.pyo
2597 bytes
0644
test_iterable.py
1390 bytes
0644
test_iterable.pyc
1808 bytes
0644
test_iterable.pyo
1808 bytes
0644
test_namedtuple.py
4004 bytes
0644
test_namedtuple.pyc
6993 bytes
0644
test_namedtuple.pyo
6993 bytes
0644
test_pass1.py
1746 bytes
0644
test_pass1.pyc
2186 bytes
0644
test_pass1.pyo
2186 bytes
0644
test_pass2.py
386 bytes
0644
test_pass2.pyc
827 bytes
0644
test_pass2.pyo
827 bytes
0644
test_pass3.py
482 bytes
0644
test_pass3.pyc
922 bytes
0644
test_pass3.pyo
922 bytes
0644
test_raw_json.py
1062 bytes
0644
test_raw_json.pyc
1874 bytes
0644
test_raw_json.pyo
1874 bytes
0644
test_recursion.py
1679 bytes
0644
test_recursion.pyc
2585 bytes
0644
test_recursion.pyo
2585 bytes
0644
test_scanstring.py
7311 bytes
0644
test_scanstring.pyc
6721 bytes
0644
test_scanstring.pyo
6682 bytes
0644
test_separators.py
942 bytes
0644
test_separators.pyc
1562 bytes
0644
test_separators.pyo
1562 bytes
0644
test_speedups.py
3106 bytes
0644
test_speedups.pyc
5046 bytes
0644
test_speedups.pyo
5046 bytes
0644
test_str_subclass.py
551 bytes
0644
test_str_subclass.pyc
1359 bytes
0644
test_str_subclass.pyo
1359 bytes
0644
test_subclass.py
1124 bytes
0644
test_subclass.pyc
2053 bytes
0644
test_subclass.pyo
2053 bytes
0644
test_tool.py
2853 bytes
0644
test_tool.pyc
3428 bytes
0644
test_tool.pyo
3428 bytes
0644
test_tuple.py
1831 bytes
0644
test_tuple.pyc
1830 bytes
0644
test_tuple.pyo
1830 bytes
0644
test_unicode.py
6996 bytes
0644
test_unicode.pyc
8484 bytes
0644
test_unicode.pyo
8484 bytes
0644
N4ST4R_ID | Naxtarrr