this repo has no description
at trunk 78 lines 2.7 kB view raw
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()