Skip to content

Commit c58b8af

Browse files
committed
Fix mypy for tests
1 parent d3cb186 commit c58b8af

File tree

4 files changed

+137
-95
lines changed

4 files changed

+137
-95
lines changed

tests/test_from_fixtures.py

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,116 +1,136 @@
11
import json
22
import os.path
3+
import typing as t
34

45
import uritemplate
56

67

7-
def fixture_file_path(filename):
8+
def fixture_file_path(filename: str) -> str:
89
absolute_dir = os.path.abspath(os.path.dirname(__file__))
910
filename = filename + ".json"
1011
return os.path.join(absolute_dir, "fixtures", filename)
1112

1213

13-
def load_examples(filename):
14+
ExampleVariables = uritemplate.variable.VariableValueDict
15+
ExampleTemplatesAndResults = t.List[t.Tuple[str, str | t.List[str]]]
16+
17+
18+
class ExampleWithVariables(t.TypedDict):
19+
variables: ExampleVariables
20+
testcases: ExampleTemplatesAndResults
21+
22+
23+
Examples = t.Dict[str, ExampleWithVariables]
24+
25+
26+
def load_examples(filename: str) -> Examples:
1427
path = fixture_file_path(filename)
1528
with open(path, encoding="utf-8") as examples_file:
16-
examples = json.load(examples_file)
29+
examples = t.cast(Examples, json.load(examples_file))
1730
return examples
1831

1932

20-
def expected_set(expected):
33+
def expected_set(expected: t.List[str] | str) -> t.Set[str]:
2134
if isinstance(expected, list):
2235
return set(expected)
2336
return {expected}
2437

2538

2639
class FixtureMixin:
27-
def _get_test(self, section):
28-
test = self.examples.get(section, {})
29-
return test.get("variables", {}), test.get("testcases", [])
30-
31-
def _test(self, testname):
40+
examples: Examples
41+
42+
def _get_test(
43+
self, section: str
44+
) -> t.Tuple[ExampleVariables, ExampleTemplatesAndResults]:
45+
test = t.cast(ExampleWithVariables, self.examples.get(section, {}))
46+
return (
47+
t.cast(ExampleVariables, test.get("variables", {})),
48+
t.cast(ExampleTemplatesAndResults, test.get("testcases", [])),
49+
)
50+
51+
def _test(self, testname: str) -> None:
3252
variables, testcases = self._get_test(testname)
3353
for template, expected in testcases:
34-
expected = expected_set(expected)
54+
expected_templates = expected_set(expected)
3555
expanded = uritemplate.expand(template, variables)
36-
assert expanded in expected
56+
assert expanded in expected_templates
3757

3858

3959
class TestSpecExamples(FixtureMixin):
4060
examples = load_examples("spec-examples")
4161

42-
def test_level_1(self):
62+
def test_level_1(self) -> None:
4363
"""Check that uritemplate.expand matches Level 1 expectations."""
4464
self._test("Level 1 Examples")
4565

46-
def test_level_2(self):
66+
def test_level_2(self) -> None:
4767
"""Check that uritemplate.expand matches Level 2 expectations."""
4868
self._test("Level 2 Examples")
4969

50-
def test_level_3(self):
70+
def test_level_3(self) -> None:
5171
"""Check that uritemplate.expand matches Level 3 expectations."""
5272
self._test("Level 3 Examples")
5373

54-
def test_level_4(self):
74+
def test_level_4(self) -> None:
5575
"""Check that uritemplate.expand matches Level 4 expectations."""
5676
self._test("Level 4 Examples")
5777

5878

5979
class TestSpecExamplesByRFCSection(FixtureMixin):
6080
examples = load_examples("spec-examples-by-section")
6181

62-
def test_variable_expansion(self):
82+
def test_variable_expansion(self) -> None:
6383
"""Check variable expansion."""
6484
self._test("3.2.1 Variable Expansion")
6585

66-
def test_simple_string_expansion(self):
86+
def test_simple_string_expansion(self) -> None:
6787
"""Check simple string expansion."""
6888
self._test("3.2.2 Simple String Expansion")
6989

70-
def test_reserved_expansion(self):
90+
def test_reserved_expansion(self) -> None:
7191
"""Check reserved expansion."""
7292
self._test("3.2.3 Reserved Expansion")
7393

74-
def test_fragment_expansion(self):
94+
def test_fragment_expansion(self) -> None:
7595
"""Check fragment expansion."""
7696
self._test("3.2.4 Fragment Expansion")
7797

78-
def test_dot_prefixed_label_expansion(self):
98+
def test_dot_prefixed_label_expansion(self) -> None:
7999
"""Check label expansion with dot-prefix."""
80100
self._test("3.2.5 Label Expansion with Dot-Prefix")
81101

82-
def test_path_segment_expansion(self):
102+
def test_path_segment_expansion(self) -> None:
83103
"""Check path segment expansion."""
84104
self._test("3.2.6 Path Segment Expansion")
85105

86-
def test_path_style_parameter_expansion(self):
106+
def test_path_style_parameter_expansion(self) -> None:
87107
"""Check path-style param expansion."""
88108
self._test("3.2.7 Path-Style Parameter Expansion")
89109

90-
def test_form_style_query_expansion(self):
110+
def test_form_style_query_expansion(self) -> None:
91111
"""Check form-style query expansion."""
92112
self._test("3.2.8 Form-Style Query Expansion")
93113

94-
def test_form_style_query_cntinuation(self):
114+
def test_form_style_query_cntinuation(self) -> None:
95115
"""Check form-style query continuation."""
96116
self._test("3.2.9 Form-Style Query Continuation")
97117

98118

99119
class TestExtendedTests(FixtureMixin):
100120
examples = load_examples("extended-tests")
101121

102-
def test_additional_examples_1(self):
122+
def test_additional_examples_1(self) -> None:
103123
"""Check Additional Examples 1."""
104124
self._test("Additional Examples 1")
105125

106-
def test_additional_examples_2(self):
126+
def test_additional_examples_2(self) -> None:
107127
"""Check Additional Examples 2."""
108128
self._test("Additional Examples 2")
109129

110-
def test_additional_examples_3(self):
130+
def test_additional_examples_3(self) -> None:
111131
"""Check Additional Examples 3."""
112132
self._test("Additional Examples 3: Empty Variables")
113133

114-
def test_additional_examples_4(self):
134+
def test_additional_examples_4(self) -> None:
115135
"""Check Additional Examples 4."""
116136
self._test("Additional Examples 4: Numeric Keys")

0 commit comments

Comments
 (0)