this repo has no description
1# Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com)
2import types
3import unittest
4
5
6class NewClassTests(unittest.TestCase):
7 def test_new_class_with_name_sets_name(self):
8 result = types.new_class("foo")
9 self.assertIsInstance(result, type)
10 self.assertEqual(result.__name__, "foo")
11
12 def test_new_class_with_non_str_name_raises_type_error(self):
13 with self.assertRaises(TypeError):
14 types.new_class(1, (object,), {})
15
16 def test_new_class_with_non_tuple_bases_raises_type_error(self):
17 with self.assertRaises(TypeError):
18 types.new_class("X", [object], {})
19
20 def test_new_class_with_non_dict_type_dict_raises_type_error(self):
21 with self.assertRaises(TypeError):
22 types.new_class("X", (object,), 1)
23
24 def test_new_class_returns_type_instance(self):
25 result = types.new_class("X", (object,), {})
26 self.assertIsInstance(result, type)
27 self.assertEqual(result.__bases__, (object,))
28
29 def test_new_class_returns_with_static___new__(self):
30 class TestClass(object):
31 def __new__(cls):
32 return super().__new__(cls)
33
34 self.assertIs(type(TestClass.__dict__["__new__"]), staticmethod)
35
36
37class ResolveBasesTests(unittest.TestCase):
38 def test_resolve_bases_with_empty_returns_input(self):
39 bases = []
40 self.assertIs(types.resolve_bases(bases), bases)
41
42 def test_resolve_bases_with_iterable_of_types_returns_input(self):
43 class C:
44 pass
45
46 bases = [C, tuple, object]
47 self.assertIs(types.resolve_bases(bases), bases)
48
49 def test_resolve_bases_skips_items_without_dunder_mro_entries(self):
50 class C:
51 pass
52
53 bases = [tuple, C(), object]
54 result = types.resolve_bases(bases)
55 self.assertIs(result, bases)
56
57 def test_resolve_bases_with_non_tuple_dunder_mro_entries_raises_type_error(self):
58 class C:
59 def __mro_entries__(self, bases):
60 return [1, 2, 3]
61
62 bases = [tuple, C(), object]
63 with self.assertRaises(TypeError) as context:
64 types.resolve_bases(bases)
65 self.assertEqual(str(context.exception), "__mro_entries__ must return a tuple")
66
67 def test_resolve_bases_inserts_result_of_calling_dunder_mro_entries(self):
68 class C:
69 def __mro_entries__(self, bases):
70 return (1, 2, 3)
71
72 result = types.resolve_bases([tuple, C(), object])
73 self.assertIs(type(result), tuple)
74 self.assertEqual(result, (tuple, 1, 2, 3, object))
75
76
77if __name__ == "__main__":
78 unittest.main()