-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdictobj_test.py
89 lines (66 loc) · 2.49 KB
/
dictobj_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from dictobj import *
import unittest
import doctest
class TestDictionaryObject(unittest.TestCase):
def setUp(self):
self.vanilla = DictionaryObject((('a',1),('b',2)))
self.kinky = DictionaryObject({'a':1, 'b':{'c':True, 'd':[1,2]}, 1:'x'})
self.default = DictionaryObject((), None, a=3)
self.mutable = MutableDictionaryObject(a=3, b=4)
self.mutableDefault = MutableDictionaryObject((), None, b=4)
def test_pickle(self):
default = pickle.loads(pickle.dumps(self.default))
self.assertEqual(default, self.default)
mutable = pickle.loads(pickle.dumps(self.mutable))
self.assertEqual(mutable, self.mutable)
mutable.a = 500
self.assertNotEqual(mutable, self.mutable)
def test_copy(self):
m = MutableDictionaryObject(self.default)
self.assertEqual(m, self.default)
m.a = 2
self.assertNotEqual(m, self.default)
def test_len(self):
self.assertEqual(3, len(self.kinky))
def test_default(self):
self.assertEqual(self.default.a, 3)
self.assertEqual(self.default.b, None)
self.assertEqual(self.mutableDefault.a, None)
self.assertEqual(self.mutableDefault.b, 4)
def test_mutable(self):
self.assertEqual(self.mutable.a, 3)
self.assertEqual(self.mutable.b, 4)
self.mutable.c = 5
self.assertEqual(self.mutable.c, 5)
self.assertRaises(AttributeError, getattr, self.mutable, 'd')
def test_mutable_default(self):
self.assertEqual(self.mutableDefault.b, 4)
self.mutableDefault.c = 5
self.assertEqual(self.mutableDefault.c, 5)
self.assertEqual(self.mutableDefault.a, None)
def test_iter(self):
keys = set([1,'a','b'])
for i,k in enumerate(self.kinky):
self.assertTrue(k in keys)
def test_getattr(self):
self.assertEqual(self.kinky.a, 1)
self.assertEqual(self.kinky.b, DictionaryObject({'c':True, 'd':[1,2]}))
def test_getitem(self):
self.assertEqual(self.kinky['a'], 1)
self.assertEqual(self.kinky['b'], DictionaryObject({'c':True, 'd':[1,2]}))
self.assertEqual(self.kinky[1], 'x')
def test_exception(self):
self.assertRaises(AttributeError, setattr, self.kinky, 'c', 3)
def test_setitem(self):
self.mutable.x = 500
self.assertEqual(self.mutable.x, 500)
self.mutable['y'] = 100
self.assertEqual(self.mutable.y, 100)
def load_tests(loader, tests, pattern):
import dictobj
suite = unittest.TestSuite()
suite.addTests(tests)
suite.addTest(doctest.DocTestSuite(dictobj))
return suite
if '__main__' == __name__:
unittest.main()