Marco Ricci commited on 2025-01-25 00:16:59
Zeige 1 geänderte Dateien mit 29 Einfügungen und 19 Löschungen.
Apart from higher resistance to typos, this also communicates the intent of the strategy more clearly.
... | ... |
@@ -16,18 +16,36 @@ import tests |
16 | 16 |
from derivepassphrase import _types |
17 | 17 |
|
18 | 18 |
|
19 |
-@tests.hypothesis_settings_coverage_compatible |
|
20 |
-@hypothesis.given( |
|
21 |
- value=strategies.one_of( |
|
22 |
- strategies.recursive( |
|
19 |
+@strategies.composite |
|
20 |
+def js_atoms_strategy( |
|
21 |
+ draw: strategies.DrawFn, |
|
22 |
+) -> int | float | str | bytes | bool | None: |
|
23 |
+ """Yield a JS atom.""" |
|
24 |
+ return draw( |
|
23 | 25 |
strategies.one_of( |
24 |
- strategies.none(), |
|
25 |
- strategies.booleans(), |
|
26 | 26 |
strategies.integers(), |
27 | 27 |
strategies.floats(allow_nan=False, allow_infinity=False), |
28 | 28 |
strategies.text(max_size=100), |
29 | 29 |
strategies.binary(max_size=100), |
30 |
+ strategies.booleans(), |
|
31 |
+ strategies.none(), |
|
30 | 32 |
), |
33 |
+ ) |
|
34 |
+ |
|
35 |
+ |
|
36 |
+@strategies.composite |
|
37 |
+def js_nested_strategy(draw: strategies.DrawFn) -> Any: |
|
38 |
+ """Yield an arbitrary and perhaps nested JS value.""" |
|
39 |
+ return draw( |
|
40 |
+ strategies.one_of( |
|
41 |
+ js_atoms_strategy(), |
|
42 |
+ strategies.builds(tuple), |
|
43 |
+ strategies.builds(list), |
|
44 |
+ strategies.builds(dict), |
|
45 |
+ strategies.builds(set), |
|
46 |
+ strategies.builds(frozenset), |
|
47 |
+ strategies.recursive( |
|
48 |
+ js_atoms_strategy(), |
|
31 | 49 |
lambda s: strategies.one_of( |
32 | 50 |
strategies.frozensets(s, max_size=100), |
33 | 51 |
strategies.builds( |
... | ... |
@@ -37,27 +55,19 @@ from derivepassphrase import _types |
37 | 55 |
max_leaves=8, |
38 | 56 |
), |
39 | 57 |
strategies.recursive( |
40 |
- strategies.one_of( |
|
41 |
- strategies.none(), |
|
42 |
- strategies.booleans(), |
|
43 |
- strategies.integers(), |
|
44 |
- strategies.floats(allow_nan=False, allow_infinity=False), |
|
45 |
- strategies.text(max_size=100), |
|
46 |
- strategies.binary(max_size=100), |
|
47 |
- ), |
|
58 |
+ js_atoms_strategy(), |
|
48 | 59 |
lambda s: strategies.one_of( |
49 | 60 |
strategies.lists(s, max_size=100), |
50 | 61 |
strategies.dictionaries(strategies.text(max_size=100), s), |
51 | 62 |
), |
52 | 63 |
max_leaves=25, |
53 | 64 |
), |
54 |
- strategies.builds(tuple), |
|
55 |
- strategies.builds(list), |
|
56 |
- strategies.builds(dict), |
|
57 |
- strategies.builds(set), |
|
58 |
- strategies.builds(frozenset), |
|
59 | 65 |
), |
60 | 66 |
) |
67 |
+ |
|
68 |
+ |
|
69 |
+@tests.hypothesis_settings_coverage_compatible |
|
70 |
+@hypothesis.given(value=js_nested_strategy()) |
|
61 | 71 |
@hypothesis.example(float('nan')) |
62 | 72 |
def test_100_js_truthiness(value: Any) -> None: |
63 | 73 |
"""Determine the truthiness of a value according to JavaScript. |
64 | 74 |