Skip to content

Commit dfc9634

Browse files
committed
define decorators to delay given
1 parent 491273d commit dfc9634

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

xarray_array_testing/decorator.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from functools import partial
2+
3+
from hypothesis import given
4+
5+
6+
def instantiate_given(params, **kwargs):
7+
def maybe_apply_kwargs(param, **kwargs):
8+
if not isinstance(param, partial):
9+
return param
10+
else:
11+
return param(**kwargs)
12+
13+
given_args, given_kwargs = params
14+
instantiated_args = tuple(
15+
maybe_apply_kwargs(param, **kwargs) for param in given_args
16+
)
17+
instantiated_kwargs = {
18+
name: maybe_apply_kwargs(param, **kwargs)
19+
for name, param in given_kwargs.items()
20+
}
21+
22+
return instantiated_args, instantiated_kwargs
23+
24+
25+
def initialize_tests(cls):
26+
for name in dir(cls):
27+
if not name.startswith("test_"):
28+
continue
29+
30+
method = getattr(cls, name)
31+
32+
if not hasattr(method, "__hypothesis_given__"):
33+
continue
34+
params = method.__hypothesis_given__
35+
args, kwargs = instantiate_given(
36+
params, array_strategy_fn=cls.array_strategy_fn
37+
)
38+
decorated = given(*args, **kwargs)(method)
39+
40+
setattr(cls, name, decorated)
41+
42+
return cls
43+
44+
45+
def delayed_given(*_given_args, **_given_kwargs):
46+
def wrapper(f):
47+
f.__hypothesis_given__ = (_given_args, _given_kwargs)
48+
49+
return f
50+
51+
return wrapper

0 commit comments

Comments
 (0)