+++ /dev/null
-import copy_reg\r
-import unittest\r
-\r
-from test import test_support\r
-from test.pickletester import ExtensionSaver\r
-\r
-class C:\r
- pass\r
-\r
-\r
-class WithoutSlots(object):\r
- pass\r
-\r
-class WithWeakref(object):\r
- __slots__ = ('__weakref__',)\r
-\r
-class WithPrivate(object):\r
- __slots__ = ('__spam',)\r
-\r
-class WithSingleString(object):\r
- __slots__ = 'spam'\r
-\r
-class WithInherited(WithSingleString):\r
- __slots__ = ('eggs',)\r
-\r
-\r
-class CopyRegTestCase(unittest.TestCase):\r
-\r
- def test_class(self):\r
- self.assertRaises(TypeError, copy_reg.pickle,\r
- C, None, None)\r
-\r
- def test_noncallable_reduce(self):\r
- self.assertRaises(TypeError, copy_reg.pickle,\r
- type(1), "not a callable")\r
-\r
- def test_noncallable_constructor(self):\r
- self.assertRaises(TypeError, copy_reg.pickle,\r
- type(1), int, "not a callable")\r
-\r
- def test_bool(self):\r
- import copy\r
- self.assertEqual(True, copy.copy(True))\r
-\r
- def test_extension_registry(self):\r
- mod, func, code = 'junk1 ', ' junk2', 0xabcd\r
- e = ExtensionSaver(code)\r
- try:\r
- # Shouldn't be in registry now.\r
- self.assertRaises(ValueError, copy_reg.remove_extension,\r
- mod, func, code)\r
- copy_reg.add_extension(mod, func, code)\r
- # Should be in the registry.\r
- self.assertTrue(copy_reg._extension_registry[mod, func] == code)\r
- self.assertTrue(copy_reg._inverted_registry[code] == (mod, func))\r
- # Shouldn't be in the cache.\r
- self.assertNotIn(code, copy_reg._extension_cache)\r
- # Redundant registration should be OK.\r
- copy_reg.add_extension(mod, func, code) # shouldn't blow up\r
- # Conflicting code.\r
- self.assertRaises(ValueError, copy_reg.add_extension,\r
- mod, func, code + 1)\r
- self.assertRaises(ValueError, copy_reg.remove_extension,\r
- mod, func, code + 1)\r
- # Conflicting module name.\r
- self.assertRaises(ValueError, copy_reg.add_extension,\r
- mod[1:], func, code )\r
- self.assertRaises(ValueError, copy_reg.remove_extension,\r
- mod[1:], func, code )\r
- # Conflicting function name.\r
- self.assertRaises(ValueError, copy_reg.add_extension,\r
- mod, func[1:], code)\r
- self.assertRaises(ValueError, copy_reg.remove_extension,\r
- mod, func[1:], code)\r
- # Can't remove one that isn't registered at all.\r
- if code + 1 not in copy_reg._inverted_registry:\r
- self.assertRaises(ValueError, copy_reg.remove_extension,\r
- mod[1:], func[1:], code + 1)\r
-\r
- finally:\r
- e.restore()\r
-\r
- # Shouldn't be there anymore.\r
- self.assertNotIn((mod, func), copy_reg._extension_registry)\r
- # The code *may* be in copy_reg._extension_registry, though, if\r
- # we happened to pick on a registered code. So don't check for\r
- # that.\r
-\r
- # Check valid codes at the limits.\r
- for code in 1, 0x7fffffff:\r
- e = ExtensionSaver(code)\r
- try:\r
- copy_reg.add_extension(mod, func, code)\r
- copy_reg.remove_extension(mod, func, code)\r
- finally:\r
- e.restore()\r
-\r
- # Ensure invalid codes blow up.\r
- for code in -1, 0, 0x80000000L:\r
- self.assertRaises(ValueError, copy_reg.add_extension,\r
- mod, func, code)\r
-\r
- def test_slotnames(self):\r
- self.assertEqual(copy_reg._slotnames(WithoutSlots), [])\r
- self.assertEqual(copy_reg._slotnames(WithWeakref), [])\r
- expected = ['_WithPrivate__spam']\r
- self.assertEqual(copy_reg._slotnames(WithPrivate), expected)\r
- self.assertEqual(copy_reg._slotnames(WithSingleString), ['spam'])\r
- expected = ['eggs', 'spam']\r
- expected.sort()\r
- result = copy_reg._slotnames(WithInherited)\r
- result.sort()\r
- self.assertEqual(result, expected)\r
-\r
-\r
-def test_main():\r
- test_support.run_unittest(CopyRegTestCase)\r
-\r
-\r
-if __name__ == "__main__":\r
- test_main()\r