diff options
Diffstat (limited to 'simplejson/tests/test_speedups.py')
-rw-r--r-- | simplejson/tests/test_speedups.py | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/simplejson/tests/test_speedups.py b/simplejson/tests/test_speedups.py index 0a2b63b..25e76dc 100644 --- a/simplejson/tests/test_speedups.py +++ b/simplejson/tests/test_speedups.py @@ -2,7 +2,9 @@ import sys import unittest from unittest import TestCase -from simplejson import encoder, scanner +import simplejson +from simplejson import encoder, decoder, scanner +from simplejson.compat import PY3 def has_speedups(): @@ -22,12 +24,31 @@ def skip_if_speedups_missing(func): return wrapper +class BadBool: + def __bool__(self): + 1/0 + __nonzero__ = __bool__ + + class TestDecode(TestCase): @skip_if_speedups_missing def test_make_scanner(self): self.assertRaises(AttributeError, scanner.c_make_scanner, 1) @skip_if_speedups_missing + def test_bad_bool_args(self): + with self.assertRaises(ZeroDivisionError): + decoder.JSONDecoder(strict=BadBool()).decode('""') + with self.assertRaises(ZeroDivisionError): + decoder.JSONDecoder(strict=BadBool()).decode('{}') + if not PY3: + with self.assertRaises(ZeroDivisionError): + decoder.JSONDecoder(strict=BadBool()).decode(u'""') + with self.assertRaises(ZeroDivisionError): + decoder.JSONDecoder(strict=BadBool()).decode(u'{}') + +class TestEncode(TestCase): + @skip_if_speedups_missing def test_make_encoder(self): self.assertRaises( TypeError, @@ -37,3 +58,35 @@ class TestDecode(TestCase): "\x52\xBA\x82\xF2\x27\x4A\x7D\xA0\xCA\x75"), None ) + + @skip_if_speedups_missing + def test_bad_bool_args(self): + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(skipkeys=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(ensure_ascii=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(check_circular=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(allow_nan=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(sort_keys=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(use_decimal=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(namedtuple_as_object=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(tuple_as_array=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(bigint_as_string=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(for_json=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(ignore_nan=BadBool()).encode({}) + with self.assertRaises(ZeroDivisionError): + encoder.JSONEncoder(iterable_as_array=BadBool()).encode({}) + + @skip_if_speedups_missing + def test_int_as_string_bitcount_overflow(self): + with self.assertRaises((TypeError, OverflowError)): + encoder.JSONEncoder(int_as_string_bitcount=2**32+31).encode(0) |