]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_copy_reg.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / test / test_copy_reg.py
CommitLineData
4710c53d 1import copy_reg\r
2import unittest\r
3\r
4from test import test_support\r
5from test.pickletester import ExtensionSaver\r
6\r
7class C:\r
8 pass\r
9\r
10\r
11class WithoutSlots(object):\r
12 pass\r
13\r
14class WithWeakref(object):\r
15 __slots__ = ('__weakref__',)\r
16\r
17class WithPrivate(object):\r
18 __slots__ = ('__spam',)\r
19\r
20class WithSingleString(object):\r
21 __slots__ = 'spam'\r
22\r
23class WithInherited(WithSingleString):\r
24 __slots__ = ('eggs',)\r
25\r
26\r
27class CopyRegTestCase(unittest.TestCase):\r
28\r
29 def test_class(self):\r
30 self.assertRaises(TypeError, copy_reg.pickle,\r
31 C, None, None)\r
32\r
33 def test_noncallable_reduce(self):\r
34 self.assertRaises(TypeError, copy_reg.pickle,\r
35 type(1), "not a callable")\r
36\r
37 def test_noncallable_constructor(self):\r
38 self.assertRaises(TypeError, copy_reg.pickle,\r
39 type(1), int, "not a callable")\r
40\r
41 def test_bool(self):\r
42 import copy\r
43 self.assertEqual(True, copy.copy(True))\r
44\r
45 def test_extension_registry(self):\r
46 mod, func, code = 'junk1 ', ' junk2', 0xabcd\r
47 e = ExtensionSaver(code)\r
48 try:\r
49 # Shouldn't be in registry now.\r
50 self.assertRaises(ValueError, copy_reg.remove_extension,\r
51 mod, func, code)\r
52 copy_reg.add_extension(mod, func, code)\r
53 # Should be in the registry.\r
54 self.assertTrue(copy_reg._extension_registry[mod, func] == code)\r
55 self.assertTrue(copy_reg._inverted_registry[code] == (mod, func))\r
56 # Shouldn't be in the cache.\r
57 self.assertNotIn(code, copy_reg._extension_cache)\r
58 # Redundant registration should be OK.\r
59 copy_reg.add_extension(mod, func, code) # shouldn't blow up\r
60 # Conflicting code.\r
61 self.assertRaises(ValueError, copy_reg.add_extension,\r
62 mod, func, code + 1)\r
63 self.assertRaises(ValueError, copy_reg.remove_extension,\r
64 mod, func, code + 1)\r
65 # Conflicting module name.\r
66 self.assertRaises(ValueError, copy_reg.add_extension,\r
67 mod[1:], func, code )\r
68 self.assertRaises(ValueError, copy_reg.remove_extension,\r
69 mod[1:], func, code )\r
70 # Conflicting function name.\r
71 self.assertRaises(ValueError, copy_reg.add_extension,\r
72 mod, func[1:], code)\r
73 self.assertRaises(ValueError, copy_reg.remove_extension,\r
74 mod, func[1:], code)\r
75 # Can't remove one that isn't registered at all.\r
76 if code + 1 not in copy_reg._inverted_registry:\r
77 self.assertRaises(ValueError, copy_reg.remove_extension,\r
78 mod[1:], func[1:], code + 1)\r
79\r
80 finally:\r
81 e.restore()\r
82\r
83 # Shouldn't be there anymore.\r
84 self.assertNotIn((mod, func), copy_reg._extension_registry)\r
85 # The code *may* be in copy_reg._extension_registry, though, if\r
86 # we happened to pick on a registered code. So don't check for\r
87 # that.\r
88\r
89 # Check valid codes at the limits.\r
90 for code in 1, 0x7fffffff:\r
91 e = ExtensionSaver(code)\r
92 try:\r
93 copy_reg.add_extension(mod, func, code)\r
94 copy_reg.remove_extension(mod, func, code)\r
95 finally:\r
96 e.restore()\r
97\r
98 # Ensure invalid codes blow up.\r
99 for code in -1, 0, 0x80000000L:\r
100 self.assertRaises(ValueError, copy_reg.add_extension,\r
101 mod, func, code)\r
102\r
103 def test_slotnames(self):\r
104 self.assertEqual(copy_reg._slotnames(WithoutSlots), [])\r
105 self.assertEqual(copy_reg._slotnames(WithWeakref), [])\r
106 expected = ['_WithPrivate__spam']\r
107 self.assertEqual(copy_reg._slotnames(WithPrivate), expected)\r
108 self.assertEqual(copy_reg._slotnames(WithSingleString), ['spam'])\r
109 expected = ['eggs', 'spam']\r
110 expected.sort()\r
111 result = copy_reg._slotnames(WithInherited)\r
112 result.sort()\r
113 self.assertEqual(result, expected)\r
114\r
115\r
116def test_main():\r
117 test_support.run_unittest(CopyRegTestCase)\r
118\r
119\r
120if __name__ == "__main__":\r
121 test_main()\r