tests.functions.test_subclass_of   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 94
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 75
dl 0
loc 94
rs 10
c 0
b 0
f 0
wmc 11

10 Methods

Rating   Name   Duplication   Size   Complexity  
A TestSubclassOf.test_list_subclass_of_tuple() 0 3 1
A TestSubclassOf.test_union_subclass_of() 0 7 2
A TestSubclassOf.test_subclass_of_multiple() 0 5 1
A TestSubclassOf.test_tuple_subclass_of_list() 0 2 1
A TestSubclassOf.test_subclass_of_tuple() 0 12 1
A TestSubclassOf.test_subclass_of() 0 12 1
A TestSubclassOf.test_subclass_of_union() 0 7 1
A TestSubclassOf.test_subclass_of_iterable() 0 8 1
A TestSubclassOf.test_union_subclass_of_union() 0 7 1
A TestSubclassOf.test_subclass_of_literal() 0 5 1
1
import sys
2
from typing import List, Tuple, Union, Optional, Iterable, Any
3
from unittest import TestCase
4
5
from typish import Literal, subclass_of, Unknown, 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
class F(E, str): pass
14
15
16
class TestSubclassOf(TestCase):
17
    def test_subclass_of(self):
18
        self.assertTrue(not subclass_of(int, str))
19
        self.assertTrue(subclass_of(E, A))
20
        self.assertTrue(subclass_of(str, object))
21
        self.assertTrue(subclass_of(list, List))
22
        self.assertTrue(subclass_of(List[int], List[int]))
23
        self.assertTrue(not subclass_of(List[int], List[str]))
24
        self.assertTrue(subclass_of(List[List[List[int]]], List[List[List[int]]]))
25
        self.assertTrue(subclass_of(List[int], List[object]))
26
        self.assertTrue(not subclass_of(List[object], List[int]))
27
        self.assertTrue(subclass_of(List[Unknown], List[int]))
28
        self.assertTrue(not subclass_of('test', str))
29
30
    def test_subclass_of_tuple(self):
31
        self.assertTrue(subclass_of(Tuple[int, int], Tuple[int, ...]))
32
        self.assertTrue(subclass_of(Tuple[int, ...], Tuple[int, ...]))
33
        self.assertTrue(subclass_of(Tuple[int, int], Tuple[object, ...]))
34
        self.assertTrue(subclass_of(Tuple[int, ...], Tuple[object, ...]))
35
        self.assertTrue(subclass_of(Tuple[A, B], Tuple[A, ...]))
36
        self.assertTrue(subclass_of(Tuple[int, int], Tuple[int, int]))
37
        self.assertTrue(subclass_of(Tuple[int, int], Tuple[object, int]))
38
        self.assertTrue(not subclass_of(Tuple[int, int], Tuple[str, int]))
39
        self.assertTrue(not subclass_of(Tuple[int, int], Tuple[int, int, int]))
40
        self.assertTrue(not subclass_of(Tuple[int, int, int], Tuple[int, int]))
41
        self.assertTrue(not subclass_of(Tuple[int, str], Tuple[int, ...]))
42
43
    def test_list_subclass_of_tuple(self):
44
        self.assertTrue(not subclass_of(List[int], Tuple[int, ...]))
45
        self.assertTrue(not subclass_of(List[int], Tuple[int, int]))
46
47
    def test_tuple_subclass_of_list(self):
48
        self.assertTrue(not subclass_of(Tuple[int, ...], List[int]))
49
50
    def test_subclass_of_iterable(self):
51
        self.assertTrue(subclass_of(List[int], Iterable[int]))
52
        self.assertTrue(subclass_of(Tuple[int, int, int], Iterable[int]))
53
        self.assertTrue(subclass_of(Tuple[int, ...], Iterable[int]))
54
        self.assertTrue(subclass_of(Tuple[B, C, D], Iterable[B]))
55
        self.assertTrue(subclass_of(Tuple[B, C, D], Iterable[A]))
56
        self.assertTrue(subclass_of(List[Tuple[int, str]], Iterable[Tuple[int, str]]))
57
        self.assertTrue(subclass_of(Tuple[Tuple[int, str]], Iterable[Tuple[int, str]]))
58
59
    def test_subclass_of_multiple(self):
60
        self.assertTrue(subclass_of(F, A))
61
        self.assertTrue(subclass_of(F, str))
62
        self.assertTrue(subclass_of(F, A, str))
63
        self.assertTrue(not subclass_of(F, A, str, int))
64
65
    def test_subclass_of_union(self):
66
        self.assertTrue(subclass_of(F, Union[int, str]))
67
        self.assertTrue(subclass_of(F, Union[A, int]))
68
        self.assertTrue(subclass_of(F, Union[A, B]))
69
        self.assertTrue(not subclass_of(int, Union[A, B]))
70
        self.assertTrue(subclass_of(F, Optional[A]))
71
        self.assertTrue(subclass_of(NoneType, Optional[A]))
72
73
    def test_union_subclass_of_union(self):
74
        # Subclass holds if all elements of the first enum subclass any of
75
        # the right enum.
76
        self.assertTrue(subclass_of(Union[C, D], Union[A, B]))
77
78
        # int is no subclass of any of Union[A, B].
79
        self.assertTrue(not subclass_of(Union[C, D, int], Union[A, B]))
80
81
    def test_union_subclass_of(self):
82
        if sys.version_info[1] in (5,):
83
            self.assertTrue(not subclass_of(Union[int, A, B, F], Union[C, D]))
84
        else:
85
            self.assertTrue(subclass_of(Union[B, F], A))
86
            self.assertTrue(not subclass_of(Union[A, B], C))
87
            self.assertTrue(not subclass_of(Union[A, B], Union[C, D]))
88
89
    def test_subclass_of_literal(self):
90
        self.assertTrue(subclass_of(int, Literal[int]))
91
        self.assertTrue(subclass_of(Any, Literal[Any]))
92
        self.assertTrue(not subclass_of(int, Literal[Any]))
93
        self.assertTrue(not subclass_of(int, Literal))
94