aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_json/test_default.py18
-rw-r--r--Lib/test/test_json/test_fail.py21
-rw-r--r--Lib/test/test_json/test_recursion.py18
3 files changed, 48 insertions, 9 deletions
diff --git a/Lib/test/test_json/test_default.py b/Lib/test/test_json/test_default.py
index 3ce16684a08..811880a15c8 100644
--- a/Lib/test/test_json/test_default.py
+++ b/Lib/test/test_json/test_default.py
@@ -8,6 +8,24 @@ class TestDefault:
self.dumps(type, default=repr),
self.dumps(repr(type)))
+ def test_bad_default(self):
+ def default(obj):
+ if obj is NotImplemented:
+ raise ValueError
+ if obj is ...:
+ return NotImplemented
+ if obj is type:
+ return collections
+ return [...]
+
+ with self.assertRaises(ValueError) as cm:
+ self.dumps(type, default=default)
+ self.assertEqual(cm.exception.__notes__,
+ ['when serializing ellipsis object',
+ 'when serializing list item 0',
+ 'when serializing module object',
+ 'when serializing type object'])
+
def test_ordereddict(self):
od = collections.OrderedDict(a=1, b=2, c=3, d=4)
od.move_to_end('b')
diff --git a/Lib/test/test_json/test_fail.py b/Lib/test/test_json/test_fail.py
index a74240f1107..7c1696cc66d 100644
--- a/Lib/test/test_json/test_fail.py
+++ b/Lib/test/test_json/test_fail.py
@@ -100,8 +100,27 @@ class TestFail:
def test_not_serializable(self):
import sys
with self.assertRaisesRegex(TypeError,
- 'Object of type module is not JSON serializable'):
+ 'Object of type module is not JSON serializable') as cm:
self.dumps(sys)
+ self.assertFalse(hasattr(cm.exception, '__notes__'))
+
+ with self.assertRaises(TypeError) as cm:
+ self.dumps([1, [2, 3, sys]])
+ self.assertEqual(cm.exception.__notes__,
+ ['when serializing list item 2',
+ 'when serializing list item 1'])
+
+ with self.assertRaises(TypeError) as cm:
+ self.dumps((1, (2, 3, sys)))
+ self.assertEqual(cm.exception.__notes__,
+ ['when serializing tuple item 2',
+ 'when serializing tuple item 1'])
+
+ with self.assertRaises(TypeError) as cm:
+ self.dumps({'a': {'b': sys}})
+ self.assertEqual(cm.exception.__notes__,
+ ["when serializing dict item 'b'",
+ "when serializing dict item 'a'"])
def test_truncated_input(self):
test_cases = [
diff --git a/Lib/test/test_json/test_recursion.py b/Lib/test/test_json/test_recursion.py
index 164ff2013eb..290207e9c15 100644
--- a/Lib/test/test_json/test_recursion.py
+++ b/Lib/test/test_json/test_recursion.py
@@ -12,8 +12,8 @@ class TestRecursion:
x.append(x)
try:
self.dumps(x)
- except ValueError:
- pass
+ except ValueError as exc:
+ self.assertEqual(exc.__notes__, ["when serializing list item 0"])
else:
self.fail("didn't raise ValueError on list recursion")
x = []
@@ -21,8 +21,8 @@ class TestRecursion:
x.append(y)
try:
self.dumps(x)
- except ValueError:
- pass
+ except ValueError as exc:
+ self.assertEqual(exc.__notes__, ["when serializing list item 0"]*2)
else:
self.fail("didn't raise ValueError on alternating list recursion")
y = []
@@ -35,8 +35,8 @@ class TestRecursion:
x["test"] = x
try:
self.dumps(x)
- except ValueError:
- pass
+ except ValueError as exc:
+ self.assertEqual(exc.__notes__, ["when serializing dict item 'test'"])
else:
self.fail("didn't raise ValueError on dict recursion")
x = {}
@@ -60,8 +60,10 @@ class TestRecursion:
enc.recurse = True
try:
enc.encode(JSONTestObject)
- except ValueError:
- pass
+ except ValueError as exc:
+ self.assertEqual(exc.__notes__,
+ ["when serializing list item 0",
+ "when serializing type object"])
else:
self.fail("didn't raise ValueError on default recursion")