Skip to content

Commit 43cd071

Browse files
committed
Lots of broken tests :(
1 parent 062f283 commit 43cd071

File tree

2 files changed

+118
-4
lines changed

2 files changed

+118
-4
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
.idea
2+
.vscode
23
__pycache__
34
.DS_Store
45
*.json

tests/test_integration.py

+117-4
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,23 @@
33
from pathlib import Path
44
import sys
55
from tempfile import TemporaryDirectory
6-
from typing import Any, List, Optional, Set, Tuple
6+
from typing import Any, Iterable, List, Optional, Set, Tuple
77
from typing_extensions import Literal
88
import unittest
99
from unittest import TestCase
1010

1111
from tap import Tap
1212

1313

14+
def stringify(arg_list: Iterable[Any]) -> List[str]:
15+
"""Converts an iterable of arguments of any type to a list of strings.
16+
17+
:param arg_list: An iterable of arguments of any type.
18+
:return: A list of the arguments as strings.
19+
"""
20+
return [str(arg) for arg in arg_list]
21+
22+
1423
class EdgeCaseTests(TestCase):
1524
def test_empty(self) -> None:
1625
class EmptyTap(Tap):
@@ -113,8 +122,113 @@ def test_both_assigned_okay(self):
113122
self.assertEqual(args.arg_list_str_required, ['hi', 'there'])
114123

115124

116-
class OptionalTests(TestCase):
117-
pass
125+
# TODO: need to implement list[str] etc.
126+
# class ParameterizedStandardCollectionTap(Tap):
127+
# arg_list_str: list[str]
128+
# arg_list_int: list[int]
129+
# arg_list_int_default: list[int] = [1, 2, 5]
130+
# arg_set_float: set[float]
131+
# arg_set_str_default: set[str] = ['one', 'two', 'five']
132+
# arg_tuple_int: tuple[int, ...]
133+
# arg_tuple_float_default: tuple[float, float, float] = (1.0, 2.0, 5.0)
134+
# arg_tuple_str_override: tuple[str, str] = ('hi', 'there')
135+
# arg_optional_list_int: Optional[list[int]] = None
136+
137+
138+
# class ParameterizedStandardCollectionTests(TestCase):
139+
# @unittest.skipIf(sys.version_info < (3, 9), 'Parameterized standard collections (e.g., list[int]) introduced in Python 3.9')
140+
# def test_parameterized_standard_collection(self):
141+
# arg_list_str = ['a', 'b', 'pi']
142+
# arg_list_int = [-2, -5, 10]
143+
# arg_set_float = {3.54, 2.235}
144+
# arg_tuple_int = (-4, 5, 9, 103)
145+
# arg_tuple_str_override = ('why', 'so', 'many', 'tests?')
146+
# arg_optional_list_int = [5, 4, 3]
147+
148+
# args = ParameterizedStandardCollectionTap().parse_args([
149+
# '--arg_list_str', *arg_list_str,
150+
# '--arg_list_int', *[str(var) for var in arg_list_int],
151+
# '--arg_set_float', *[str(var) for var in arg_set_float],
152+
# '--arg_tuple_int', *[str(var) for var in arg_tuple_int],
153+
# '--arg_tuple_str_override', *arg_tuple_str_override,
154+
# '--arg_optional_list_int', *[str(var) for var in arg_optional_list_int]
155+
# ])
156+
157+
# self.assertEqual(args.arg_list_str, arg_list_str)
158+
# self.assertEqual(args.arg_list_int, arg_list_int)
159+
# self.assertEqual(args.arg_list_int_default, ParameterizedStandardCollectionTap.arg_list_int_default)
160+
# self.assertEqual(args.arg_set_float, arg_set_float)
161+
# self.assertEqual(args.arg_set_str_default, ParameterizedStandardCollectionTap.arg_set_str_default)
162+
# self.assertEqual(args.arg_tuple_int, arg_tuple_int)
163+
# self.assertEqual(args.arg_tuple_float_default, ParameterizedStandardCollectionTap.arg_tuple_float_default)
164+
# self.assertEqual(args.arg_tuple_str_override, arg_tuple_str_override)
165+
# self.assertEqual(args.arg_optional_list_int, arg_optional_list_int)
166+
167+
168+
class NestedOptionalTypesTap(Tap):
169+
list_bool: Optional[List[bool]]
170+
list_int: Optional[List[int]]
171+
list_str: Optional[List[str]]
172+
set_bool: Optional[Set[bool]]
173+
set_int: Optional[Set[int]]
174+
set_str: Optional[Set[str]]
175+
# tuple_bool: Optional[Tuple[bool]]
176+
# tuple_int: Optional[Tuple[int]]
177+
# tuple_str: Optional[Tuple[str]]
178+
# tuple_pair: Optional[Tuple[bool, str, int]]
179+
# tuple_arbitrary_len_bool: Optional[Tuple[bool, ...]]
180+
# tuple_arbitrary_len_int: Optional[Tuple[int, ...]]
181+
# tuple_arbitrary_len_str: Optional[Tuple[str, ...]]
182+
183+
184+
class NestedOptionalTypeTests(TestCase):
185+
186+
def test_nested_optional_types(self):
187+
list_bool = [True, False]
188+
list_int = [0, 1, 2]
189+
list_str = ['a', 'bee', 'cd', 'ee']
190+
set_bool = {True, False, True}
191+
set_int = {0, 1}
192+
set_str = {'a', 'bee', 'cd'}
193+
tuple_bool = (False,)
194+
tuple_int = (0,)
195+
tuple_str = ('a',)
196+
tuple_pair = (False, 'a', 1)
197+
tuple_arbitrary_len_bool = (True, False, False)
198+
tuple_arbitrary_len_int = (1, 2, 3, 4)
199+
tuple_arbitrary_len_str = ('a', 'b')
200+
201+
args = NestedOptionalTypesTap().parse_args([
202+
'--list_bool', *stringify(list_bool),
203+
'--list_int', *stringify(list_int),
204+
'--list_str', *stringify(list_str),
205+
'--set_bool', *stringify(set_bool),
206+
'--set_int', *stringify(set_int),
207+
'--set_str', *stringify(set_str),
208+
# '--tuple_bool', *stringify(tuple_bool),
209+
# '--tuple_int', *stringify(tuple_int),
210+
# '--tuple_str', *stringify(tuple_str),
211+
# '--tuple_pair', *stringify(tuple_pair),
212+
# '--tuple_arbitrary_len_bool', *stringify(tuple_arbitrary_len_bool),
213+
# '--tuple_arbitrary_len_int', *stringify(tuple_arbitrary_len_int),
214+
# '--tuple_arbitrary_len_str', *stringify(tuple_arbitrary_len_str),
215+
])
216+
217+
self.assertEqual(args.list_bool, list_bool)
218+
self.assertEqual(args.list_int, list_int)
219+
self.assertEqual(args.list_str, list_str)
220+
221+
self.assertEqual(args.set_bool, set_bool)
222+
self.assertEqual(args.set_int, set_int)
223+
self.assertEqual(args.set_str, set_str)
224+
225+
self.assertEqual(args.tuple_bool, tuple_bool)
226+
self.assertEqual(args.tuple_int, tuple_int)
227+
self.assertEqual(args.tuple_str, tuple_str)
228+
self.assertEqual(args.tuple_pair, tuple_pair)
229+
self.assertEqual(args.tuple_arbitrary_len_bool, tuple_arbitrary_len_bool)
230+
self.assertEqual(args.tuple_arbitrary_len_int, tuple_arbitrary_len_int)
231+
self.assertEqual(args.tuple_arbitrary_len_str, tuple_arbitrary_len_str)
118232

119233

120234
class ComplexTypeTap(Tap):
@@ -147,7 +261,6 @@ def test_complex_types(self):
147261
self.assertEqual(args.set_path, set_path)
148262
self.assertEqual(args.tuple_path, tuple_path)
149263

150-
151264
class Person:
152265
def __init__(self, name: str):
153266
self.name = name

0 commit comments

Comments
 (0)