Skip to content

Commit 2af8e9b

Browse files
committed
Move some doctests to unit tests.
1 parent 94c0e77 commit 2af8e9b

File tree

4 files changed

+181
-27
lines changed

4 files changed

+181
-27
lines changed

mkdocstrings_handlers/vba/types.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ def render(self):
3434

3535
@dataclass
3636
class VbaSignatureInfo:
37-
visibility: str
38-
return_type: str
37+
visibility: Optional[str]
38+
return_type: Optional[str]
3939
procedure_type: str
4040
name: str
4141
args: List[VbaArgumentInfo]

mkdocstrings_handlers/vba/util.py

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,6 @@ def is_end(line: str) -> bool:
7777
def parse_args(args: str) -> Generator[VbaArgumentInfo, None, None]:
7878
"""
7979
Parse the arguments portion of a signature line of a VBA procedure.
80-
81-
Examples:
82-
>>> list(parse_args(""))
83-
[]
84-
>>> list(parse_args("foo"))
85-
[VbaArgumentInfo(name='foo', optional=False, modifier=None, arg_type=None, default=None)]
86-
>>> list(parse_args("bar As listObject"))
87-
[VbaArgumentInfo(name='bar', optional=False, modifier=None, arg_type='listObject', default=None)]
88-
>>> list(parse_args("ByVal v As Variant"))
89-
[VbaArgumentInfo(name='v', optional=False, modifier='ByVal', arg_type='Variant', default=None)]
90-
>>> list(parse_args('Optional ByRef s1 As String = "Hello"'))
91-
[VbaArgumentInfo(name='s1', optional=True, modifier='ByRef', arg_type='String', default='"Hello"')]
9280
"""
9381
for arg in args.split(","):
9482
arg = arg.strip()
@@ -121,19 +109,6 @@ def parse_args(args: str) -> Generator[VbaArgumentInfo, None, None]:
121109
def parse_signature(line: str) -> VbaSignatureInfo:
122110
"""
123111
Parse the signature line of a VBA procedure.
124-
125-
Examples:
126-
>>> parse_signature("Sub foo()")
127-
VbaSignatureInfo(visibility=None, return_type=None, procedure_type='Sub', name='foo', args=[])
128-
>>> parse_signature("Function asdf123(fooBar As listObject)") # doctest: +NORMALIZE_WHITESPACE
129-
VbaSignatureInfo(visibility=None, return_type=None, procedure_type='Function', name='asdf123', \
130-
args=[VbaArgumentInfo(name='fooBar', optional=False, modifier=None, arg_type='listObject', default=None)])
131-
>>> parse_signature("Public Property Let asdf(ByVal vNewValue As Variant)") # doctest: +NORMALIZE_WHITESPACE
132-
VbaSignatureInfo(visibility='Public', return_type=None, procedure_type='Property Let', name='asdf', \
133-
args=[VbaArgumentInfo(name='vNewValue', optional=False, modifier='ByVal', arg_type='Variant', default=None)])
134-
>>> parse_signature("Function Test(Optional d As Variant = Empty)") # doctest: +NORMALIZE_WHITESPACE
135-
VbaSignatureInfo(visibility=None, return_type=None, procedure_type='Function', name='Test',
136-
args=[VbaArgumentInfo(name='d', optional=True, modifier=None, arg_type='Variant', default='Empty')])
137112
"""
138113
line = re.sub(r"'.*$", "", line).strip() # Strip comment and whitespace.
139114

test/util/test_parse_args.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import unittest
2+
3+
from mkdocstrings_handlers.vba.types import VbaArgumentInfo
4+
from mkdocstrings_handlers.vba.util import parse_args
5+
6+
7+
class TestParseArgs(unittest.TestCase):
8+
def test_1(self):
9+
cases = [
10+
("", []),
11+
(
12+
"foo",
13+
[
14+
VbaArgumentInfo(
15+
name="foo",
16+
optional=False,
17+
modifier=None,
18+
arg_type=None,
19+
default=None,
20+
)
21+
],
22+
),
23+
(
24+
"a,b,c",
25+
[
26+
VbaArgumentInfo(
27+
name="a",
28+
optional=False,
29+
modifier=None,
30+
arg_type=None,
31+
default=None,
32+
),
33+
VbaArgumentInfo(
34+
name="b",
35+
optional=False,
36+
modifier=None,
37+
arg_type=None,
38+
default=None,
39+
),
40+
VbaArgumentInfo(
41+
name="c",
42+
optional=False,
43+
modifier=None,
44+
arg_type=None,
45+
default=None,
46+
),
47+
],
48+
),
49+
(
50+
"bar As listObject",
51+
[
52+
VbaArgumentInfo(
53+
name="bar",
54+
optional=False,
55+
modifier=None,
56+
arg_type="listObject",
57+
default=None,
58+
)
59+
],
60+
),
61+
(
62+
"ByVal v As Variant",
63+
[
64+
VbaArgumentInfo(
65+
name="v",
66+
optional=False,
67+
modifier="ByVal",
68+
arg_type="Variant",
69+
default=None,
70+
)
71+
],
72+
),
73+
(
74+
'Optional ByRef s1 As String = "Hello"',
75+
[
76+
VbaArgumentInfo(
77+
name="s1",
78+
optional=True,
79+
modifier="ByRef",
80+
arg_type="String",
81+
default='"Hello"',
82+
)
83+
],
84+
),
85+
]
86+
87+
for (args_string, result) in cases:
88+
with self.subTest(args_string):
89+
self.assertEqual(result, list(parse_args(args_string)))
90+
91+
92+
if __name__ == "__main__":
93+
unittest.main(
94+
failfast=True,
95+
)

test/util/test_parse_signature.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import unittest
2+
3+
from mkdocstrings_handlers.vba.types import VbaSignatureInfo, VbaArgumentInfo
4+
from mkdocstrings_handlers.vba.util import parse_signature
5+
6+
7+
class TestParseSignature(unittest.TestCase):
8+
def test_1(self):
9+
cases = [
10+
(
11+
"Sub foo()",
12+
VbaSignatureInfo(
13+
visibility=None,
14+
return_type=None,
15+
procedure_type="Sub",
16+
name="foo",
17+
args=[],
18+
),
19+
),
20+
(
21+
"Function asdf123(fooBar As listObject)",
22+
VbaSignatureInfo(
23+
visibility=None,
24+
return_type=None,
25+
procedure_type="Function",
26+
name="asdf123",
27+
args=[
28+
VbaArgumentInfo(
29+
name="fooBar",
30+
optional=False,
31+
modifier=None,
32+
arg_type="listObject",
33+
default=None,
34+
)
35+
],
36+
),
37+
),
38+
(
39+
"Public Property Let asdf(ByVal vNewValue As Variant)",
40+
VbaSignatureInfo(
41+
visibility="Public",
42+
return_type=None,
43+
procedure_type="Property Let",
44+
name="asdf",
45+
args=[
46+
VbaArgumentInfo(
47+
name="vNewValue",
48+
optional=False,
49+
modifier="ByVal",
50+
arg_type="Variant",
51+
default=None,
52+
)
53+
],
54+
),
55+
),
56+
(
57+
"Function Test(Optional d As Variant = Empty)",
58+
VbaSignatureInfo(
59+
visibility=None,
60+
return_type=None,
61+
procedure_type="Function",
62+
name="Test",
63+
args=[
64+
VbaArgumentInfo(
65+
name="d",
66+
optional=True,
67+
modifier=None,
68+
arg_type="Variant",
69+
default="Empty",
70+
)
71+
],
72+
),
73+
),
74+
]
75+
76+
for (signature, result) in cases:
77+
with self.subTest(signature):
78+
self.assertEqual(result, parse_signature(signature))
79+
80+
81+
if __name__ == "__main__":
82+
unittest.main(
83+
failfast=True,
84+
)

0 commit comments

Comments
 (0)