1
|
|
|
from typing import Type |
2
|
|
|
from unittest import TestCase |
3
|
|
|
|
4
|
|
|
from typish._functions import common_ancestor, common_ancestor_of_types |
5
|
|
|
from typish._types import NoneType |
6
|
|
|
|
7
|
|
|
|
8
|
|
|
class A: pass |
9
|
|
|
class B(A): pass |
10
|
|
|
class C(B): pass |
11
|
|
|
class D(C): pass |
12
|
|
|
class E(D): pass |
13
|
|
|
|
14
|
|
|
|
15
|
|
|
class TestCommonAncestor(TestCase): |
16
|
|
|
def test_common_ancestor(self): |
17
|
|
|
self.assertEqual(C, common_ancestor(E(), C(), D(), E())) |
18
|
|
|
self.assertEqual(B, common_ancestor(E(), C(), D(), E(), B())) |
19
|
|
|
self.assertEqual(object, common_ancestor(E(), C(), D(), E(), B(), 42)) |
20
|
|
|
|
21
|
|
|
def test_common_ancestor_of_types(self): |
22
|
|
|
self.assertEqual(C, common_ancestor_of_types(E, C, D, E)) |
23
|
|
|
self.assertEqual(object, common_ancestor_of_types(int, str)) |
24
|
|
|
common_ancestor_of_types(list, tuple) |
25
|
|
|
|
26
|
|
|
def test_common_ancestor_of_typing_types(self): |
27
|
|
|
self.assertEqual(type, common_ancestor_of_types(Type[int], Type[str])) |
28
|
|
|
|
29
|
|
|
def test_common_acestor_of_collections(self): |
30
|
|
|
self.assertEqual(list, common_ancestor([1, 2, 3], ['a', 'b', 'c'])) |
31
|
|
|
|
32
|
|
|
def test_special_args(self): |
33
|
|
|
self.assertEqual(NoneType, common_ancestor(None, None)) |
34
|
|
|
self.assertEqual(int, common_ancestor(42)) |
35
|
|
|
|
36
|
|
|
def test_invalid(self): |
37
|
|
|
with self.assertRaises(TypeError): |
38
|
|
|
common_ancestor() |
39
|
|
|
|