@given(object_dicts(split_content=False))
> def test_dicts_generation_merged_content(obj_type_and_obj):
.tox/py3-full/lib/python3.7/site-packages/swh/model/tests/test_hypothesis_strategies.py:108:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/py3-full/lib/python3.7/site-packages/hypothesis/core.py:450: in process_arguments_to_given
search_strategy.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/collections.py:46: in do_validate
s.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:800: in do_validate
self.mapped_strategy.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/lazy.py:135: in do_validate
w.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:800: in do_validate
self.mapped_strategy.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/collections.py:46: in do_validate
s.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:657: in do_validate
e.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:800: in do_validate
self.mapped_strategy.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:800: in do_validate
self.mapped_strategy.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/lazy.py:135: in do_validate
w.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:800: in do_validate
self.mapped_strategy.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/lazy.py:135: in do_validate
w.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/collections.py:46: in do_validate
s.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:800: in do_validate
self.mapped_strategy.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/collections.py:46: in do_validate
s.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:657: in do_validate
e.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/lazy.py:135: in do_validate
w.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:800: in do_validate
self.mapped_strategy.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/lazy.py:135: in do_validate
w.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/collections.py:46: in do_validate
s.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:800: in do_validate
self.mapped_strategy.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/collections.py:46: in do_validate
s.validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:400: in validate
self.do_validate()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:656: in do_validate
for e in self.element_strategies:
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:632: in element_strategies
for s in arg.branches:
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:664: in branches
return self.element_strategies
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:631: in element_strategies
if not arg.is_empty:
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:135: in accept
recur(self)
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:131: in recur
mapping[strat] = getattr(strat, calculation)(recur)
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/lazy.py:92: in calc_is_empty
return recur(self.wrapped_strategy)
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/strategies.py:131: in recur
mapping[strat] = getattr(strat, calculation)(recur)
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/deferred.py:70: in calc_is_empty
return recur(self.wrapped_strategy)
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/deferred.py:40: in wrapped_strategy
result = self.__definition()
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/core.py:947: in <lambda>
lambda thing: deferred(lambda: _from_type(thing)),
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/core.py:1057: in _from_type
return types.from_typing_type(thing)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
thing = swh.model.collections.ImmutableDict[~KT, ~VT]
def from_typing_type(thing):
# We start with special-case support for Union and Tuple - the latter
# isn't actually a generic type. Then we handle Literal since it doesn't
# support `isinstance`.
#
# We then explicitly error on non-Generic types, which don't carry enough
# information to sensibly resolve to strategies at runtime.
# Finally, we run a variation of the subclass lookup in `st.from_type`
# among generic types in the lookup.
if getattr(thing, "__origin__", None) == tuple or isinstance(
thing, getattr(typing, "TupleMeta", ())
):
elem_types = getattr(thing, "__tuple_params__", None) or ()
elem_types += getattr(thing, "__args__", None) or ()
if (
getattr(thing, "__tuple_use_ellipsis__", False)
or len(elem_types) == 2
and elem_types[-1] is Ellipsis
):
return st.lists(st.from_type(elem_types[0])).map(tuple)
elif len(elem_types) == 1 and elem_types[0] == ():
return st.tuples() # Empty tuple; see issue #1583
return st.tuples(*map(st.from_type, elem_types))
if hasattr(typing, "Final") and getattr(thing, "__origin__", None) == typing.Final:
return st.one_of([st.from_type(t) for t in thing.__args__])
if is_typing_literal(thing):
args_dfs_stack = list(thing.__args__)
literals = []
while args_dfs_stack:
arg = args_dfs_stack.pop()
if is_typing_literal(arg):
args_dfs_stack.extend(reversed(arg.__args__))
else:
literals.append(arg)
return st.sampled_from(literals)
if is_annotated_type(thing): # pragma: no cover
# This requires Python 3.9+ or the typing_extensions package
args = thing.__args__
assert args, "it's impossible to make an annotated type with no args"
annotated_type = args[0]
return st.from_type(annotated_type)
# Now, confirm that we're dealing with a generic type as we expected
if sys.version_info[:2] < (3, 9) and not isinstance(
thing, typing_root_type
): # pragma: no cover
raise ResolutionFailed(f"Cannot resolve {thing} to a strategy")
# Some "generic" classes are not generic *in* anything - for example both
# Hashable and Sized have `__args__ == ()` on Python 3.7 or later.
# (In 3.6 they're just aliases for the collections.abc classes)
origin = getattr(thing, "__origin__", thing)
if (
typing.Hashable is not collections.abc.Hashable
and origin in vars(collections.abc).values()
and len(getattr(thing, "__args__", None) or []) == 0
):
return st.from_type(origin)
# Parametrised generic types have their __origin__ attribute set to the
# un-parametrised version, which we need to use in the subclass checks.
# e.g.: typing.List[int].__origin__ == typing.List
mapping = {
k: v
for k, v in _global_type_lookup.items()
if is_generic_type(k) and try_issubclass(k, thing)
}
if typing.Dict in mapping or typing.Set in mapping:
# ItemsView can cause test_lookup.py::test_specialised_collection_types
# to fail, due to weird isinstance behaviour around the elements.
mapping.pop(typing.ItemsView, None)
if sys.version_info[:2] == (3, 6): # pragma: no cover
# `isinstance(dict().values(), Container) is False` on py36 only -_-
mapping.pop(typing.ValuesView, None)
if typing.Deque in mapping and len(mapping) > 1:
# Resolving generic sequences to include a deque is more trouble for e.g.
# the ghostwriter than it's worth, via undefined names in the repr.
mapping.pop(typing.Deque)
if len(mapping) > 1:
# issubclass treats bytestring as a kind of sequence, which it is,
# but treating it as such breaks everything else when it is presumed
# to be a generic sequence or container that could hold any item.
# Except for sequences of integers, or unions which include integer!
# See https://github.com/HypothesisWorks/hypothesis/issues/2257
#
# This block drops ByteString from the types that can be generated
# if there is more than one allowed type, and the element type is
# not either `int` or a Union with `int` as one of its elements.
elem_type = (getattr(thing, "__args__", None) or ["not int"])[0]
if getattr(elem_type, "__origin__", None) is typing.Union:
union_elems = elem_type.__args__
else:
union_elems = ()
if not any(
isinstance(T, type) and issubclass(int, T)
for T in list(union_elems) + [elem_type]
):
mapping.pop(typing.ByteString, None)
elif (
(not mapping)
and isinstance(thing, ForwardRef)
and thing.__forward_arg__ in vars(builtins)
):
return st.from_type(getattr(builtins, thing.__forward_arg__))
strategies = [
v if isinstance(v, st.SearchStrategy) else v(thing)
for k, v in mapping.items()
if sum(try_issubclass(k, T) for T in mapping) == 1
]
empty = ", ".join(repr(s) for s in strategies if s.is_empty)
if empty or not strategies:
raise ResolutionFailed(
"Could not resolve %s to a strategy; consider using "
> "register_type_strategy" % (empty or thing,)
)
E hypothesis.errors.ResolutionFailed: Could not resolve swh.model.collections.ImmutableDict[~KT, ~VT] to a strategy; consider using register_type_strategy
.tox/py3-full/lib/python3.7/site-packages/hypothesis/strategies/_internal/types.py:297: ResolutionFailed
TEST RESULT
TEST RESULT
- Run At
- Jun 18 2021, 11:20 AM