]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_typechecks.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / test / test_typechecks.py
CommitLineData
4710c53d 1"""Unit tests for __instancecheck__ and __subclasscheck__."""\r
2\r
3import unittest\r
4from test import test_support\r
5\r
6\r
7class ABC(type):\r
8\r
9 def __instancecheck__(cls, inst):\r
10 """Implement isinstance(inst, cls)."""\r
11 return any(cls.__subclasscheck__(c)\r
12 for c in set([type(inst), inst.__class__]))\r
13\r
14 def __subclasscheck__(cls, sub):\r
15 """Implement issubclass(sub, cls)."""\r
16 candidates = cls.__dict__.get("__subclass__", set()) | set([cls])\r
17 return any(c in candidates for c in sub.mro())\r
18\r
19\r
20class Integer:\r
21\r
22 __metaclass__ = ABC\r
23\r
24 __subclass__ = set([int])\r
25\r
26\r
27class SubInt(Integer):\r
28\r
29 pass\r
30\r
31\r
32class TypeChecksTest(unittest.TestCase):\r
33\r
34 def testIsSubclassInternal(self):\r
35 self.assertEqual(Integer.__subclasscheck__(int), True)\r
36 self.assertEqual(Integer.__subclasscheck__(float), False)\r
37\r
38 def testIsSubclassBuiltin(self):\r
39 self.assertEqual(issubclass(int, Integer), True)\r
40 self.assertEqual(issubclass(int, (Integer,)), True)\r
41 self.assertEqual(issubclass(float, Integer), False)\r
42 self.assertEqual(issubclass(float, (Integer,)), False)\r
43\r
44 def testIsInstanceBuiltin(self):\r
45 self.assertEqual(isinstance(42, Integer), True)\r
46 self.assertEqual(isinstance(42, (Integer,)), True)\r
47 self.assertEqual(isinstance(3.14, Integer), False)\r
48 self.assertEqual(isinstance(3.14, (Integer,)), False)\r
49\r
50 def testIsInstanceActual(self):\r
51 self.assertEqual(isinstance(Integer(), Integer), True)\r
52 self.assertEqual(isinstance(Integer(), (Integer,)), True)\r
53\r
54 def testIsSubclassActual(self):\r
55 self.assertEqual(issubclass(Integer, Integer), True)\r
56 self.assertEqual(issubclass(Integer, (Integer,)), True)\r
57\r
58 def testSubclassBehavior(self):\r
59 self.assertEqual(issubclass(SubInt, Integer), True)\r
60 self.assertEqual(issubclass(SubInt, (Integer,)), True)\r
61 self.assertEqual(issubclass(SubInt, SubInt), True)\r
62 self.assertEqual(issubclass(SubInt, (SubInt,)), True)\r
63 self.assertEqual(issubclass(Integer, SubInt), False)\r
64 self.assertEqual(issubclass(Integer, (SubInt,)), False)\r
65 self.assertEqual(issubclass(int, SubInt), False)\r
66 self.assertEqual(issubclass(int, (SubInt,)), False)\r
67 self.assertEqual(isinstance(SubInt(), Integer), True)\r
68 self.assertEqual(isinstance(SubInt(), (Integer,)), True)\r
69 self.assertEqual(isinstance(SubInt(), SubInt), True)\r
70 self.assertEqual(isinstance(SubInt(), (SubInt,)), True)\r
71 self.assertEqual(isinstance(42, SubInt), False)\r
72 self.assertEqual(isinstance(42, (SubInt,)), False)\r
73\r
74 def test_oldstyle(self):\r
75 # These should just be ignored.\r
76 class X:\r
77 def __instancecheck__(self, inst):\r
78 return True\r
79 def __subclasscheck__(self, cls):\r
80 return True\r
81 class Sub(X): pass\r
82 self.assertNotIsInstance(3, X)\r
83 self.assertIsInstance(X(), X)\r
84 self.assertFalse(issubclass(int, X))\r
85 self.assertTrue(issubclass(Sub, X))\r
86\r
87\r
88def test_main():\r
89 test_support.run_unittest(TypeChecksTest)\r
90\r
91\r
92if __name__ == "__main__":\r
93 unittest.main()\r