mirror of
https://github.com/python/cpython.git
synced 2025-10-25 18:54:53 +00:00
These are stubs to be used for adding hypothesis (https://hypothesis.readthedocs.io/en/latest/) tests to the standard library. When the tests are run in an environment where `hypothesis` and its various dependencies are not installed, the stubs will turn any tests with examples into simple parameterized tests and any tests without examples are skipped. It also adds hypothesis tests for the `zoneinfo` module, and a Github Actions workflow to run the hypothesis tests as a non-required CI job. The full hypothesis interface is not stubbed out — missing stubs can be added as necessary. Co-authored-by: Zac Hatfield-Dodds <zac.hatfield.dodds@gmail.com>
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
# Stub out only the subset of the interface that we actually use in our tests.
|
|
class StubClass:
|
|
def __init__(self, *args, **kwargs):
|
|
self.__stub_args = args
|
|
self.__stub_kwargs = kwargs
|
|
self.__repr = None
|
|
|
|
def _with_repr(self, new_repr):
|
|
new_obj = self.__class__(*self.__stub_args, **self.__stub_kwargs)
|
|
new_obj.__repr = new_repr
|
|
return new_obj
|
|
|
|
def __repr__(self):
|
|
if self.__repr is not None:
|
|
return self.__repr
|
|
|
|
argstr = ", ".join(self.__stub_args)
|
|
kwargstr = ", ".join(f"{kw}={val}" for kw, val in self.__stub_kwargs.items())
|
|
|
|
in_parens = argstr
|
|
if kwargstr:
|
|
in_parens += ", " + kwargstr
|
|
|
|
return f"{self.__class__.__qualname__}({in_parens})"
|
|
|
|
|
|
def stub_factory(klass, name, *, with_repr=None, _seen={}):
|
|
if (klass, name) not in _seen:
|
|
|
|
class Stub(klass):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__()
|
|
self.__stub_args = args
|
|
self.__stub_kwargs = kwargs
|
|
|
|
Stub.__name__ = name
|
|
Stub.__qualname__ = name
|
|
if with_repr is not None:
|
|
Stub._repr = None
|
|
|
|
_seen.setdefault((klass, name, with_repr), Stub)
|
|
|
|
return _seen[(klass, name, with_repr)]
|