summaryrefslogtreecommitdiff
path: root/tests/functional/ext/docparams/raise/missing_raises_doc_Numpy.py
blob: 8cf8e041f1d4afebaf1c49e87606af8b77d1445c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
"""Tests for missing-raises-doc and missing-raises-type-doc for Numpy style docstrings

Styleguide:
https://numpydoc.readthedocs.io/en/latest/format.html#docstring-standard
"""
# pylint: disable=function-redefined, invalid-name, undefined-variable, missing-function-docstring
# pylint: disable=unused-argument, try-except-raise, import-outside-toplevel
# pylint: disable=too-few-public-methods, disallowed-name, using-constant-test


def test_find_missing_numpy_raises(self):  # [missing-raises-doc]
    """This is a Numpy docstring.

    Raises
    ------
    NameError
        Never
    """
    raise RuntimeError("hi")
    raise NameError("hi")  # [unreachable]


def test_find_all_numpy_raises(self):
    """This is a Numpy docstring.

    Raises
    ------
    RuntimeError
        Always
    NameError
        Never
    """
    raise RuntimeError("hi")
    raise NameError("hi")  # [unreachable]


def test_find_rethrown_numpy_raises(self):  # [missing-raises-doc]
    """This is a Numpy docstring.

    Raises
    ------
    NameError
        Sometimes
    """
    try:
        fake_func()
    except RuntimeError:
        raise

    raise NameError("hi")


def test_find_rethrown_numpy_multiple_raises(self):  # [missing-raises-doc]
    """This is a Numpy docstring.

    Raises
    ------
    NameError
        Sometimes
    """
    try:
        fake_func()
    except (RuntimeError, ValueError):
        raise

    raise NameError("hi")


def test_ignores_caught_numpy_raises(self):
    """This is a numpy docstring.

    Raises
    ------
    NameError
        Sometimes
    """
    try:
        raise RuntimeError("hi")
    except RuntimeError:
        pass

    raise NameError("hi")


def test_find_numpy_attr_raises_exact_exc(self):
    """This is a numpy docstring.

    Raises
    ------
    re.error
        Sometimes
    """
    import re

    raise re.error("hi")


def test_find_numpy_attr_raises_substr_exc(self):
    """This is a numpy docstring.

    Raises
    ------
    re.error
        Sometimes
    """
    from re import error

    raise error("hi")


def test_find_valid_missing_numpy_attr_raises(self):  # [missing-raises-doc]
    """This is a numpy docstring.

    Raises
    ------
    re.anothererror
        Sometimes
    """
    from re import error

    raise error("hi")


def test_find_invalid_missing_numpy_attr_raises(self):
    """This is a numpy docstring.
     pylint allows this to pass since the comparison between Raises and
    raise are based on the class name, not the qualified name.

    Raises
    ------
    bogusmodule.error
        Sometimes
    """
    from re import error

    raise error("hi")


class Foo:
    """test_finds_missing_raises_from_setter_numpy
    Example of a setter having missing raises documentation in
    the Numpy style docstring of the property
    """

    @property
    def foo(self):  # [missing-raises-doc]
        """int: docstring

        Include a "Raises" section so that this is identified
        as a Numpy docstring and not a Google docstring.

        Raises
        ------
        RuntimeError
            Always
        """
        raise RuntimeError()
        return 10  # [unreachable]

    @foo.setter
    def foo(self, value):
        print(self)
        raise AttributeError()


class Foo:
    """test_finds_missing_raises_from_setter_numpy_2
    Example of a setter having missing raises documentation in
    its own Numpy style docstring of the property
    """

    @property
    def foo(self):
        """int: docstring ...

        Raises
        ------
        RuntimeError
            Always
        """
        raise RuntimeError()
        return 10  # [unreachable]

    @foo.setter
    def foo(self, value):  # [missing-raises-doc]
        """setter docstring ...

        Raises
        ------
        RuntimeError
            Never
        """
        print(self)
        if True:
            raise AttributeError()
        raise RuntimeError()


class Foo:
    """test_finds_property_return_type_numpy
    Example of a property having return documentation in
    a numpy style docstring
    """

    @property
    def foo(self):
        """int: docstring ...

        Raises
        ------
        RuntimeError
            Always
        """
        raise RuntimeError()
        return 10  # [unreachable]