Coverage for tests/unit/errormode/test_errormode_init.py: 100%
68 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-04-04 03:33 -0600
« prev ^ index » next coverage.py v7.6.1, created at 2025-04-04 03:33 -0600
1from __future__ import annotations
4from muutils.errormode import ErrorMode, ERROR_MODE_ALIASES
6import pytest
9def test_invalid_mode():
10 with pytest.raises(ValueError):
11 ErrorMode("invalid")
14@pytest.mark.parametrize(
15 "mode, expected_mode",
16 [
17 ("except", ErrorMode.EXCEPT),
18 ("warn", ErrorMode.WARN),
19 ("ignore", ErrorMode.IGNORE),
20 ("Except", ErrorMode.EXCEPT),
21 ("Warn", ErrorMode.WARN),
22 ("Ignore", ErrorMode.IGNORE),
23 (" \teXcEpT \n", ErrorMode.EXCEPT),
24 ("WaRn \t", ErrorMode.WARN),
25 (" \tIGNORE", ErrorMode.IGNORE),
26 ],
27)
28def test_from_any_strict_ok(mode, expected_mode):
29 assert ErrorMode.from_any(mode, allow_aliases=False) == expected_mode
32@pytest.mark.parametrize(
33 "mode, excepted_error",
34 [
35 (42, TypeError),
36 (42.0, TypeError),
37 (None, TypeError),
38 (object(), TypeError),
39 (True, TypeError),
40 (False, TypeError),
41 (["except"], TypeError),
42 ("invalid", KeyError),
43 (" \tinvalid", KeyError),
44 ("e", KeyError),
45 (" E", KeyError),
46 ("w", KeyError),
47 ("W", KeyError),
48 ("i", KeyError),
49 ("I", KeyError),
50 ("silent", KeyError),
51 ("Silent", KeyError),
52 ("quiet", KeyError),
53 ("Quiet", KeyError),
54 ("raise", KeyError),
55 ("Raise", KeyError),
56 ("error", KeyError),
57 ("Error", KeyError),
58 ("err", KeyError),
59 ("ErR\t", KeyError),
60 ("warning", KeyError),
61 ("Warning", KeyError),
62 ("ErrorMode.EXCEPT", KeyError),
63 ("ErrorMode.WARN", KeyError),
64 ("ErrorMode.IGNORE", KeyError),
65 (" \tErrorMode.EXCEPT \t", KeyError),
66 (" \tErrorMode.WARN \t", KeyError),
67 (" \tErrorMode.IGNORE \t", KeyError),
68 ],
69)
70def test_from_any_strict_error(mode, excepted_error):
71 with pytest.raises(excepted_error):
72 ErrorMode.from_any(mode, allow_aliases=False, allow_prefix=False)
75@pytest.mark.parametrize(
76 "mode, expected_mode",
77 [
78 *list(ERROR_MODE_ALIASES.items()),
79 *list((a.upper(), b) for a, b in ERROR_MODE_ALIASES.items()),
80 *list((a.title(), b) for a, b in ERROR_MODE_ALIASES.items()),
81 *list((a.capitalize(), b) for a, b in ERROR_MODE_ALIASES.items()),
82 *list((f" \t{a} \t", b) for a, b in ERROR_MODE_ALIASES.items()),
83 ],
84)
85def test_from_any_aliases_ok(mode, expected_mode):
86 assert ErrorMode.from_any(mode) == expected_mode
87 assert ErrorMode.from_any(mode, allow_aliases=True) == expected_mode
90@pytest.mark.parametrize(
91 "mode, excepted_error",
92 [
93 (42, TypeError),
94 (42.0, TypeError),
95 (None, TypeError),
96 (object(), TypeError),
97 (True, TypeError),
98 (False, TypeError),
99 (["except"], TypeError),
100 ("invalid", KeyError),
101 (" \tinvalid", KeyError),
102 ],
103)
104def test_from_any_aliases_error(mode, excepted_error):
105 with pytest.raises(excepted_error):
106 ErrorMode.from_any(mode, allow_aliases=True)
109@pytest.mark.parametrize(
110 "mode, excepted_error",
111 [
112 (42, TypeError),
113 (42.0, TypeError),
114 (None, TypeError),
115 (object(), TypeError),
116 (True, TypeError),
117 (False, TypeError),
118 (["except"], TypeError),
119 ("invalid", KeyError),
120 (" \tinvalid", KeyError),
121 ("ErrorMode.EXCEPT", KeyError),
122 ("ErrorMode.WARN", KeyError),
123 ("ErrorMode.IGNORE", KeyError),
124 (" \tErrorMode.EXCEPT \t", KeyError),
125 (" \tErrorMode.WARN \t", KeyError),
126 (" \tErrorMode.IGNORE \t", KeyError),
127 ],
128)
129def test_from_any_no_prefix_error(mode, excepted_error):
130 with pytest.raises(excepted_error):
131 ErrorMode.from_any(mode, allow_aliases=True, allow_prefix=False)
134@pytest.mark.parametrize(
135 "mode, expected_mode",
136 [
137 ("ErrorMode.EXCEPT", ErrorMode.EXCEPT),
138 ("ErrorMode.WARN", ErrorMode.WARN),
139 ("ErrorMode.IGNORE", ErrorMode.IGNORE),
140 (" ErrorMode.EXCEPT ", ErrorMode.EXCEPT),
141 ("\tErrorMode.WARN\n", ErrorMode.WARN),
142 (" \t ErrorMode.IGNORE \n ", ErrorMode.IGNORE),
143 ],
144)
145def test_from_any_with_prefix(mode, expected_mode):
146 assert ErrorMode.from_any(mode, allow_prefix=True) == expected_mode
149@pytest.mark.parametrize(
150 "mode, expected_error",
151 [
152 ("ErrorMode.EXCEPT", KeyError),
153 ("ErrorMode.WARN", KeyError),
154 ("ErrorMode.IGNORE", KeyError),
155 (" ErrorMode.EXCEPT ", KeyError),
156 ("\tErrorMode.WARN\n", KeyError),
157 (" \t ErrorMode.IGNORE \n ", KeyError),
158 ],
159)
160def test_from_any_without_prefix(mode, expected_error):
161 with pytest.raises(expected_error):
162 ErrorMode.from_any(mode, allow_prefix=False)
165@pytest.mark.parametrize(
166 "mode, expected_mode",
167 [
168 ("ErrorMode.except", ErrorMode.EXCEPT),
169 ("ErrorMode.warn", ErrorMode.WARN),
170 ("ErrorMode.ignore", ErrorMode.IGNORE),
171 ("ErrorMode.EXCEPT", ErrorMode.EXCEPT),
172 ("ErrorMode.WARN", ErrorMode.WARN),
173 ("ErrorMode.IGNORE", ErrorMode.IGNORE),
174 (" ErrorMode.eXcEpT ", ErrorMode.EXCEPT),
175 ("\tErrorMode.WaRn\n", ErrorMode.WARN),
176 (" \t ErrorMode.IgNoRe \n ", ErrorMode.IGNORE),
177 ],
178)
179def test_from_any_with_prefix_case_insensitive(mode, expected_mode):
180 assert ErrorMode.from_any(mode, allow_prefix=True) == expected_mode
183@pytest.mark.parametrize(
184 "mode, expected_error",
185 [
186 ("ErrorMode.invalid", KeyError),
187 ("ErrorMode.", KeyError),
188 ("ErrorMode", KeyError),
189 ("errormode.EXCEPT", KeyError),
190 ("ErrorMode.E", KeyError),
191 ("ErrorMode.W", KeyError),
192 ("ErrorMode.I", KeyError),
193 ],
194)
195def test_from_any_with_prefix_invalid(mode, expected_error):
196 with pytest.raises(expected_error):
197 ErrorMode.from_any(mode, allow_prefix=False)
200def test_from_any_with_prefix_and_aliases():
201 assert (
202 ErrorMode.from_any("ErrorMode.e", allow_prefix=True, allow_aliases=True)
203 == ErrorMode.EXCEPT
204 )
205 assert (
206 ErrorMode.from_any("ErrorMode.w", allow_prefix=True, allow_aliases=True)
207 == ErrorMode.WARN
208 )
209 assert (
210 ErrorMode.from_any("ErrorMode.i", allow_prefix=True, allow_aliases=True)
211 == ErrorMode.IGNORE
212 )
215def test_from_any_with_prefix_no_aliases():
216 with pytest.raises(KeyError):
217 ErrorMode.from_any("ErrorMode.e", allow_prefix=True, allow_aliases=False)
218 with pytest.raises(KeyError):
219 ErrorMode.from_any("ErrorMode.w", allow_prefix=True, allow_aliases=False)
220 with pytest.raises(KeyError):
221 ErrorMode.from_any("ErrorMode.i", allow_prefix=True, allow_aliases=False)
224# Tests for new string representation methods
227def test_str_representation():
228 assert str(ErrorMode.EXCEPT) == "ErrorMode.Except"
229 assert str(ErrorMode.WARN) == "ErrorMode.Warn"
230 assert str(ErrorMode.IGNORE) == "ErrorMode.Ignore"
233def test_repr_representation():
234 assert repr(ErrorMode.EXCEPT) == "ErrorMode.Except"
235 assert repr(ErrorMode.WARN) == "ErrorMode.Warn"
236 assert repr(ErrorMode.IGNORE) == "ErrorMode.Ignore"
239def test_serialize():
240 assert ErrorMode.EXCEPT.serialize() == "ErrorMode.Except"
241 assert ErrorMode.WARN.serialize() == "ErrorMode.Warn"
242 assert ErrorMode.IGNORE.serialize() == "ErrorMode.Ignore"
245def test_load():
246 assert ErrorMode.load("ErrorMode.Except") == ErrorMode.EXCEPT
247 assert ErrorMode.load("ErrorMode.Warn") == ErrorMode.WARN
248 assert ErrorMode.load("ErrorMode.Ignore") == ErrorMode.IGNORE
250 with pytest.raises(KeyError):
251 ErrorMode.load("ErrorMode.Invalid")