tests.decorators.test_hintable   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 32
dl 0
loc 57
rs 10
c 0
b 0
f 0
wmc 9

1 Function

Rating   Name   Duplication   Size   Complexity  
A some_func() 0 4 1

5 Methods

Rating   Name   Duplication   Size   Complexity  
A TestHintable.test_hintable_without_any_hint() 0 7 1
A TestHintable.test_hintable_with_flawed_custom_param_name() 0 8 2
A TestHintable.test_hintable_with_flawed_function() 0 6 2
A TestHintable.test_meta_data() 0 4 1
A TestHintable.test_hintable_class() 0 7 2
1
import sys
2
from typing import Type
3
from unittest import TestCase
4
5
from typish import hintable, T
6
7
if sys.version_info.major * 10 + sys.version_info.minor > 35:
8
    # All Python 3.5+ specific tests are moved to a separate module.
9
    from test_resources.hintable import TestHintable as Base
10
else:
11
    Base = TestCase
12
13
14
@hintable
15
def some_func(hint: Type[T]) -> Type[T]:
16
    """Some docstring"""
17
    return hint
18
19
20
class TestHintable(Base):
21
    def test_hintable_without_any_hint(self):
22
        # Test that when a hintable function is called without hint, it
23
        # receives None.
24
25
        x = some_func()
26
27
        self.assertEqual(None, x)
28
29
    def test_hintable_class(self):
30
        # Test that decorating a class raises an error.
31
32
        with self.assertRaises(TypeError):
33
            @hintable
34
            class DecoratedClass:
35
                ...
36
37
    def test_meta_data(self):
38
        # Test that any meta data is copied properly.
39
40
        self.assertEqual('Some docstring', some_func.__doc__)
41
42
    def test_hintable_with_flawed_function(self):
43
44
        with self.assertRaises(TypeError):
45
            @hintable
46
            def some_flawed_func():
47
                ...
48
49
    def test_hintable_with_flawed_custom_param_name(self):
50
        # Test that when a custom param name is used, it is checked if a
51
        # parameter with that name is accepted by the decorated function.
52
53
        with self.assertRaises(TypeError):
54
            @hintable(param='cls')
55
            def some_func_with_flawed_custom_param_name(hint):
56
                return hint
57