Skip to content

Commit facfd5d

Browse files
committed
Move test_mutate_items_during_encode to test_speedups.py
1 parent a6734fe commit facfd5d

File tree

2 files changed

+30
-33
lines changed

2 files changed

+30
-33
lines changed

Lib/test/test_json/test_dump.py

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -65,39 +65,6 @@ def __lt__(self, o):
6565
d[1337] = "true.dat"
6666
self.assertEqual(self.dumps(d, sort_keys=True), '{"1337": "true.dat"}')
6767

68-
def test_mutate_items_during_encode(self):
69-
c_make_encoder = getattr(self.json.encoder, 'c_make_encoder', None)
70-
if c_make_encoder is None:
71-
self.skipTest("c_make_encoder not available")
72-
73-
cache = []
74-
75-
class BadDict(dict):
76-
def __init__(self):
77-
super().__init__(real=1)
78-
79-
def items(self):
80-
entries = [("boom", object())]
81-
cache.append(entries)
82-
return entries
83-
84-
def encode_str(obj):
85-
if cache:
86-
cache.pop().clear()
87-
return '"x"'
88-
89-
encoder = c_make_encoder(
90-
None, lambda o: "null",
91-
encode_str, None,
92-
": ", ", ", False,
93-
False, True
94-
)
95-
96-
try:
97-
encoder(BadDict(), 0)
98-
except (ValueError, RuntimeError):
99-
pass
100-
10168

10269
class TestPyDump(TestDump, PyTest): pass
10370

Lib/test/test_json/test_speedups.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,33 @@ def test(name):
8080
def test_unsortable_keys(self):
8181
with self.assertRaises(TypeError):
8282
self.json.encoder.JSONEncoder(sort_keys=True).encode({'a': 1, 1: 'a'})
83+
84+
def test_mutate_items_during_encode(self):
85+
c_make_encoder = getattr(self.json.encoder, 'c_make_encoder', None)
86+
if c_make_encoder is None:
87+
self.skipTest("c_make_encoder not available")
88+
89+
cache = []
90+
91+
class BadDict(dict):
92+
def items(self):
93+
entries = [("boom", object())]
94+
cache.append(entries)
95+
return entries
96+
97+
def encode_str(obj):
98+
if cache:
99+
cache.pop().clear()
100+
return '"x"'
101+
102+
encoder = c_make_encoder(
103+
None, lambda o: "null",
104+
encode_str, None,
105+
": ", ", ", False,
106+
False, True
107+
)
108+
109+
try:
110+
encoder(BadDict(real=1), 0)
111+
except (ValueError, RuntimeError):
112+
pass

0 commit comments

Comments
 (0)