summaryrefslogtreecommitdiffstats
path: root/Lib/test/support/_hypothesis_stubs/strategies.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/support/_hypothesis_stubs/strategies.py')
-rw-r--r--Lib/test/support/_hypothesis_stubs/strategies.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/Lib/test/support/_hypothesis_stubs/strategies.py b/Lib/test/support/_hypothesis_stubs/strategies.py
new file mode 100644
index 0000000..d2b885d
--- /dev/null
+++ b/Lib/test/support/_hypothesis_stubs/strategies.py
@@ -0,0 +1,91 @@
+import functools
+
+from ._helpers import StubClass, stub_factory
+
+
+class StubStrategy(StubClass):
+ def __make_trailing_repr(self, transformation_name, func):
+ func_name = func.__name__ or repr(func)
+ return f"{self!r}.{transformation_name}({func_name})"
+
+ def map(self, pack):
+ return self._with_repr(self.__make_trailing_repr("map", pack))
+
+ def flatmap(self, expand):
+ return self._with_repr(self.__make_trailing_repr("flatmap", expand))
+
+ def filter(self, condition):
+ return self._with_repr(self.__make_trailing_repr("filter", condition))
+
+ def __or__(self, other):
+ new_repr = f"one_of({self!r}, {other!r})"
+ return self._with_repr(new_repr)
+
+
+_STRATEGIES = {
+ "binary",
+ "booleans",
+ "builds",
+ "characters",
+ "complex_numbers",
+ "composite",
+ "data",
+ "dates",
+ "datetimes",
+ "decimals",
+ "deferred",
+ "dictionaries",
+ "emails",
+ "fixed_dictionaries",
+ "floats",
+ "fractions",
+ "from_regex",
+ "from_type",
+ "frozensets",
+ "functions",
+ "integers",
+ "iterables",
+ "just",
+ "lists",
+ "none",
+ "nothing",
+ "one_of",
+ "permutations",
+ "random_module",
+ "randoms",
+ "recursive",
+ "register_type_strategy",
+ "runner",
+ "sampled_from",
+ "sets",
+ "shared",
+ "slices",
+ "timedeltas",
+ "times",
+ "text",
+ "tuples",
+ "uuids",
+}
+
+__all__ = sorted(_STRATEGIES)
+
+
+def composite(f):
+ strategy = stub_factory(StubStrategy, f.__name__)
+
+ @functools.wraps(f)
+ def inner(*args, **kwargs):
+ return strategy(*args, **kwargs)
+
+ return inner
+
+
+def __getattr__(name):
+ if name not in _STRATEGIES:
+ raise AttributeError(f"Unknown attribute {name}")
+
+ return stub_factory(StubStrategy, f"hypothesis.strategies.{name}")
+
+
+def __dir__():
+ return __all__