1
|
|
|
from typing import List, Dict, Union, Optional, Callable, Any, Tuple, Type |
2
|
|
|
from unittest import TestCase |
3
|
|
|
|
4
|
|
|
from typish._functions import instance_of |
5
|
|
|
|
6
|
|
|
|
7
|
|
|
class A: pass |
8
|
|
|
class B(A): pass |
9
|
|
|
class C(B): pass |
10
|
|
|
class D(C): pass |
11
|
|
|
class E(D): pass |
12
|
|
|
class F(E, str): pass |
13
|
|
|
|
14
|
|
|
|
15
|
|
|
class TestInstanceOf(TestCase): |
16
|
|
|
def test_instance_of(self): |
17
|
|
|
self.assertTrue(instance_of([[[1], [2]]], List[List[List[int]]])) |
18
|
|
|
self.assertTrue(instance_of([[[1], ['2']]], List[List[List[object]]])) |
19
|
|
|
self.assertTrue(instance_of([], List[int])) |
20
|
|
|
self.assertTrue(instance_of({}, Dict[int, int])) |
21
|
|
|
|
22
|
|
|
def test_instance_of_multiple(self): |
23
|
|
|
self.assertTrue(instance_of(F(), A)) |
24
|
|
|
self.assertTrue(instance_of(F(), str)) |
25
|
|
|
self.assertTrue(instance_of(F(), A, str)) |
26
|
|
|
self.assertTrue(not instance_of(F(), A, str, int)) |
27
|
|
|
|
28
|
|
|
def test_instance_of_union(self): |
29
|
|
|
self.assertTrue(instance_of(F(), Union[int, A])) |
30
|
|
|
self.assertTrue(instance_of(F(), Union[A, int])) |
31
|
|
|
self.assertTrue(instance_of(F(), Union[A, str])) |
32
|
|
|
self.assertTrue(instance_of(F(), Optional[str])) |
33
|
|
|
self.assertTrue(instance_of(None, Optional[str])) |
34
|
|
|
|
35
|
|
|
def test_instance_of_callable(self): |
36
|
|
|
def func1(x: int, y: str) -> object: |
37
|
|
|
pass |
38
|
|
|
|
39
|
|
|
def func2() -> int: |
40
|
|
|
pass |
41
|
|
|
|
42
|
|
|
def func3(x: int): |
43
|
|
|
pass |
44
|
|
|
|
45
|
|
|
def func4(): |
46
|
|
|
pass |
47
|
|
|
|
48
|
|
|
def func5(x): |
49
|
|
|
pass |
50
|
|
|
|
51
|
|
|
def func6(l: List[List[List[int]]]): |
52
|
|
|
pass |
53
|
|
|
|
54
|
|
|
self.assertTrue(instance_of(func1, Callable[[int, str], object])) |
55
|
|
|
self.assertTrue(instance_of(func1, Callable[[object, str], object])) |
56
|
|
|
self.assertTrue(not instance_of(func1, Callable[[str, str], object])) |
57
|
|
|
self.assertTrue(not instance_of(func1, Callable[[str, str], int])) |
58
|
|
|
self.assertTrue(instance_of(func2, Callable[[], int])) |
59
|
|
|
self.assertTrue(instance_of(func3, Callable[[int], Any])) |
60
|
|
|
self.assertTrue(instance_of(func4, Callable)) |
61
|
|
|
self.assertTrue(instance_of(func5, Callable[[Any], Any])) |
62
|
|
|
self.assertTrue(instance_of(func6, Callable[[List[List[List[int]]]], Any])) |
63
|
|
|
|
64
|
|
|
def test_lambda_instance_of_callable(self): |
65
|
|
|
self.assertTrue(instance_of(lambda x, y: 42, Callable[[int, str], str])) |
66
|
|
|
self.assertTrue(instance_of(lambda: 42, Callable[[], str])) |
67
|
|
|
|
68
|
|
|
def test_instance_of_type(self): |
69
|
|
|
self.assertTrue(instance_of(int, Type)) |
70
|
|
|
self.assertTrue(instance_of(int, Type[int])) |
71
|
|
|
self.assertTrue(not instance_of(str, Type[int])) |
72
|
|
|
|
73
|
|
|
def test_instance_of_tuple(self): |
74
|
|
|
self.assertTrue(instance_of((1,), Tuple[int])) |
75
|
|
|
self.assertTrue(instance_of((1, 2, 3), Tuple[int, ...])) |
76
|
|
|
|