1from json.tests import PyTest, CTest
2
3
4def default_iterable(obj):
5    return list(obj)
6
7class TestCheckCircular(object):
8    def test_circular_dict(self):
9        dct = {}
10        dct['a'] = dct
11        self.assertRaises(ValueError, self.dumps, dct)
12
13    def test_circular_list(self):
14        lst = []
15        lst.append(lst)
16        self.assertRaises(ValueError, self.dumps, lst)
17
18    def test_circular_composite(self):
19        dct2 = {}
20        dct2['a'] = []
21        dct2['a'].append(dct2)
22        self.assertRaises(ValueError, self.dumps, dct2)
23
24    def test_circular_default(self):
25        self.dumps([set()], default=default_iterable)
26        self.assertRaises(TypeError, self.dumps, [set()])
27
28    def test_circular_off_default(self):
29        self.dumps([set()], default=default_iterable, check_circular=False)
30        self.assertRaises(TypeError, self.dumps, [set()], check_circular=False)
31
32
33class TestPyCheckCircular(TestCheckCircular, PyTest): pass
34class TestCCheckCircular(TestCheckCircular, CTest): pass
35