Hello community,
here is the log from the commit of package python-hypothesis for
openSUSE:Factory checked in at 2019-06-13 22:38:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-hypothesis (Old)
and /work/SRC/openSUSE:Factory/.python-hypothesis.new.4811 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-hypothesis"
Thu Jun 13 22:38:29 2019 rev:37 rq:708933 version:4.24.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-hypothesis/python-hypothesis.changes
2019-05-17 23:37:19.726104138 +0200
+++
/work/SRC/openSUSE:Factory/.python-hypothesis.new.4811/python-hypothesis.changes
2019-06-13 22:38:30.720280574 +0200
@@ -1,0 +2,23 @@
+Sat Jun 8 23:18:22 UTC 2019 - Arun Persaud <[email protected]>
+
+- update to version 4.24.3:
+ * This patch improves the implementation of an internal wrapper on
+ Python 3.8 beta1 (and will break on the alphas; but they’re not
+ meant to be stable). On other versions, there is no change at
+ all. Thanks to Daniel Hahler for the patch, and Victor Stinner for
+ his work on bpo-37032 that made it possible.
+
+-------------------------------------------------------------------
+Thu Jun 6 09:01:21 UTC 2019 - Ondřej Súkup <[email protected]>
+
+- update to 4.24.2
+ * Deprecation messages for functions in hypothesis.extra.django.models
+ now explicitly name the deprecated function to make it easier to track down
usages.
+ * a spurious bug raised when a @st.composite function was passed a
keyword-only argument.
+ * deprecates GenericStateMachine, in favor of RuleBasedStateMachine.
+ * This patch clarifies some error messages when the test function signature
+ is incompatible with the arguments to @given, especially when the
@settings()
+ decorator is also used
+ * ixes a minor formatting issue the docstring of from_type()
+
+-------------------------------------------------------------------
Old:
----
hypothesis-python-4.23.4.tar.gz
New:
----
hypothesis-python-4.24.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-hypothesis.spec ++++++
--- /var/tmp/diff_new_pack.ZoAGpA/_old 2019-06-13 22:38:31.228280403 +0200
+++ /var/tmp/diff_new_pack.ZoAGpA/_new 2019-06-13 22:38:31.232280402 +0200
@@ -28,7 +28,7 @@
%endif
%bcond_without python2
Name: python-hypothesis%{psuffix}
-Version: 4.23.4
+Version: 4.24.3
Release: 0
Summary: A library for property based testing
License: MPL-2.0
++++++ hypothesis-python-4.23.4.tar.gz -> hypothesis-python-4.24.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hypothesis-hypothesis-python-4.23.4/CONTRIBUTING.rst
new/hypothesis-hypothesis-python-4.24.3/CONTRIBUTING.rst
--- old/hypothesis-hypothesis-python-4.23.4/CONTRIBUTING.rst 2019-05-09
08:15:59.000000000 +0200
+++ new/hypothesis-hypothesis-python-4.24.3/CONTRIBUTING.rst 2019-06-07
08:14:08.000000000 +0200
@@ -234,6 +234,7 @@
* `Karthikeyan Singaravelan <https://www.github.com/tirkarthi>`_
([email protected])
* `Katrina Durance <https://github.com/kdurance>`_
* `kbara <https://www.github.com/kbara>`_
+* `Kristian Glass <https://www.github.com/doismellburning>`_
* `Kyle Reeve <https://www.github.com/kreeve>`_ ([email protected])
* `Lee Begg <https://www.github.com/llnz2>`_
* `Lisa Goeller <https://www.github.com/lgoeller>`_
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/.coveragerc
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/.coveragerc
--- old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/.coveragerc
2019-05-09 08:15:59.000000000 +0200
+++ new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/.coveragerc
2019-06-07 08:14:08.000000000 +0200
@@ -22,3 +22,4 @@
__deepcopy__
except ImportError:
if PY2:
+ assert all\(.+\)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/docs/changes.rst
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/docs/changes.rst
--- old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/docs/changes.rst
2019-05-09 08:15:59.000000000 +0200
+++ new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/docs/changes.rst
2019-06-07 08:14:08.000000000 +0200
@@ -21,6 +21,104 @@
You should generally assume that an API is internal unless you have specific
information to the contrary.
+.. _v4.24.3:
+
+-------------------
+4.24.3 - 2019-06-07
+-------------------
+
+This patch improves the implementation of an internal wrapper on Python 3.8
+beta1 (and will break on the alphas; but they're not meant to be stable).
+On other versions, there is no change at all.
+
+Thanks to Daniel Hahler for the patch, and Victor Stinner for his work
+on :bpo:`37032` that made it possible.
+
+.. _v4.24.2:
+
+-------------------
+4.24.2 - 2019-06-06
+-------------------
+
+Deprecation messages for functions in ``hypothesis.extra.django.models`` now
+explicitly name the deprecated function to make it easier to track down usages.
+Thanks to Kristian Glass for this contribution!
+
+.. _v4.24.1:
+
+-------------------
+4.24.1 - 2019-06-04
+-------------------
+
+This patch fixes :issue:`1999`, a spurious bug raised when a
:func:`@st.composite <hypothesis.strategies.composite>` function was passed a
keyword-only argument.
+
+Thanks to Jim Nicholls for his fantastic bug report.
+
+.. _v4.24.0:
+
+-------------------
+4.24.0 - 2019-05-29
+-------------------
+
+This release deprecates ``GenericStateMachine``, in favor of
+:class:`~hypothesis.stateful.RuleBasedStateMachine`. Rule-based stateful
+testing is significantly faster, especially during shrinking.
+
+If your use-case truly does not fit rule-based stateful testing,
+we recommend writing a custom test function which drives your specific
+control-flow using :func:`~hypothesis.strategies.data`.
+
+.. _v4.23.9:
+
+-------------------
+4.23.9 - 2019-05-28
+-------------------
+
+This patch fixes a very rare example database issue with file permissions.
+
+When running a test that uses both :func:`@given <hypothesis.given>`
+and ``pytest.mark.parametrize``, using :pypi:`pytest-xdist` on Windows,
+with failing examples in the database, two attempts to read a file could
+overlap and we caught ``FileNotFound`` but not other ``OSError``\ s.
+
+.. _v4.23.8:
+
+-------------------
+4.23.8 - 2019-05-26
+-------------------
+
+This patch has a minor cleanup of the internal engine.
+There is no user-visible impact.
+
+.. _v4.23.7:
+
+-------------------
+4.23.7 - 2019-05-26
+-------------------
+
+This patch clarifies some error messages when the test function signature
+is incompatible with the arguments to :func:`@given <hypothesis.given>`,
+especially when the :obj:`@settings() <hypothesis.settings>` decorator
+is also used (:issue:`1978`).
+
+.. _v4.23.6:
+
+-------------------
+4.23.6 - 2019-05-19
+-------------------
+
+This release adds the :pypi:`pyupgrade` fixer to our code style,
+for consistent use of dict and set literals and comprehensions.
+
+.. _v4.23.5:
+
+-------------------
+4.23.5 - 2019-05-16
+-------------------
+
+This release slightly simplifies a small part of the core engine.
+There is no user-visible change.
+
.. _v4.23.4:
-------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/docs/stateful.rst
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/docs/stateful.rst
--- old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/docs/stateful.rst
2019-05-09 08:15:59.000000000 +0200
+++ new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/docs/stateful.rst
2019-06-07 08:14:08.000000000 +0200
@@ -333,82 +333,10 @@
Generic state machines
----------------------
-The class :class:`~hypothesis.stateful.GenericStateMachine` is the underlying
machinery of stateful testing
-in Hypothesis. Chances are you will want to use the rule based stateful testing
-for most things, but the generic state machine functionality can be useful
e.g. if
-you want to test things where the set of actions to be taken is more closely
-tied to the state of the system you are testing.
-
-.. note::
- GenericStateMachine is a *very* thin wrapper around :func:`@given
<hypothesis.given>`
- and :func:`~hypothesis.strategies.data`. Consider using those primitives
directly,
- as the resulting tests are usually easier to write, understand, and debug.
- GenericStateMachine only exists because it predates
:func:`~hypothesis.strategies.data`,
- and will be deprecated and removed in a future version (:issue:`1693`).
-
-.. module:: hypothesis.stateful
-.. autoclass:: GenericStateMachine
- :members: steps, execute_step, check_invariants, teardown
-
-For example, here we use stateful testing as a sort of link checker, to test
-`hypothesis.works <https://hypothesis.works>`_ for broken links or links that
-use HTTP instead of HTTPS.
-
-.. code:: python
-
- from hypothesis.stateful import GenericStateMachine
- import hypothesis.strategies as st
- from requests_html import HTMLSession
-
-
- class LinkChecker(GenericStateMachine):
- def __init__(self):
- super(LinkChecker, self).__init__()
- self.session = HTMLSession()
- self.result = None
-
- def steps(self):
- if self.result is None:
- # Always start on the home page
- return st.just("https://hypothesis.works/")
- else:
- return st.sampled_from([
- l
- for l in self.result.html.absolute_links
- # Don't try to crawl to other people's sites
- if l.startswith("https://hypothesis.works") and
- # Avoid Cloudflare's bot protection. We are a bot but we
don't
- # care about the info it's hiding.
- '/cdn-cgi/' not in l
- ])
-
- def execute_step(self, step):
- self.result = self.session.get(step)
-
- assert self.result.status_code == 200
-
- for l in self.result.html.absolute_links:
- # All links should be HTTPS
- assert "https://hypothesis.works/" not in l
-
-
- TestLinks = LinkChecker.TestCase
-
-Running this (at the time of writing this documentation) produced the following
-output:
-
-::
-
- AssertionError: assert 'https://hypothesis.works/' not in
'http://hypoth...test-fixtures/'
- 'https://hypothesis.works/' is contained here:
- https://hypothesis.works/articles/hypothesis-pytest-fixtures/
- ? +++++++++++++++++++++++++
-
- ------------ Hypothesis ------------
-
- Step #1: 'https://hypothesis.works/'
- Step #2: 'https://hypothesis.works/articles/'
+.. warning::
+ ``GenericStateMachine`` is deprecated and will be removed in a future
version.
+.. autoclass:: hypothesis.stateful.GenericStateMachine
-------------------------
More fine grained control
@@ -416,7 +344,7 @@
If you want to bypass the TestCase infrastructure you can invoke these
manually. The stateful module exposes the function
``run_state_machine_as_test``,
-which takes an arbitrary function returning a GenericStateMachine and an
+which takes an arbitrary function returning a RuleBasedStateMachine and an
optional settings parameter and does the same as the class based runTest
provided.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/_strategies.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/_strategies.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/_strategies.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/_strategies.py
2019-06-07 08:14:08.000000000 +0200
@@ -1236,7 +1236,7 @@
"builds(), but is only allowed as a keyword arg"
)
required = required_args(target, args, kwargs) or set()
- to_infer = set(k for k, v in kwargs.items() if v is infer)
+ to_infer = {k for k, v in kwargs.items() if v is infer}
if required or to_infer:
if isclass(target) and attr.has(target):
# Use our custom introspection for attrs classes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/core.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/core.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/core.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/core.py
2019-06-07 08:14:08.000000000 +0200
@@ -230,6 +230,7 @@
def wrapped_test(*arguments, **kwargs):
raise InvalidArgument(message)
+ wrapped_test.is_hypothesis_test = True
return wrapped_test
if not (generator_arguments or generator_kwargs):
@@ -244,12 +245,11 @@
)
if len(generator_arguments) > len(original_argspec.args):
+ args = tuple(generator_arguments)
return invalid(
- (
- "Too many positional arguments for %s() (got %d but"
- " expected at most %d"
- )
- % (name, len(generator_arguments), len(original_argspec.args))
+ "Too many positional arguments for %s() were passed to @given "
+ "- expected at most %d arguments, but got %d %r"
+ % (name, len(original_argspec.args), len(args), args)
)
if infer in generator_arguments:
@@ -266,16 +266,15 @@
if k not in original_argspec.args + original_argspec.kwonlyargs
]
if extra_kwargs and not original_argspec.varkw:
+ arg = extra_kwargs[0]
return invalid(
- "%s() got an unexpected keyword argument %r" % (name,
extra_kwargs[0])
+ "%s() got an unexpected keyword argument %r, from `%s=%r` in
@given"
+ % (name, arg, arg, generator_kwargs[arg])
)
for a in original_argspec.args:
if isinstance(a, list): # pragma: no cover
return invalid(
- (
- "Cannot decorate function %s() because it has "
- "destructuring arguments"
- )
+ "Cannot decorate function %s() because it has destructuring
arguments"
% (name,)
)
if original_argspec.defaults or original_argspec.kwonlydefaults:
@@ -424,7 +423,7 @@
import unittest
# This is a set because nose may simply re-export unittest.SkipTest
- exceptions = set([unittest.SkipTest])
+ exceptions = {unittest.SkipTest}
try: # pragma: no cover
from unittest2 import SkipTest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/database.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/database.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/database.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/database.py
2019-06-07 08:14:08.000000000 +0200
@@ -24,7 +24,7 @@
from hypothesis.configuration import storage_directory
from hypothesis.errors import HypothesisException, HypothesisWarning
-from hypothesis.internal.compat import FileNotFoundError, hbytes
+from hypothesis.internal.compat import hbytes
from hypothesis.utils.conventions import not_set
@@ -171,7 +171,7 @@
try:
with open(os.path.join(kp, path), "rb") as i:
yield hbytes(i.read())
- except FileNotFoundError:
+ except EnvironmentError:
pass
def save(self, key, value):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/extra/django/models.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/extra/django/models.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/extra/django/models.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/extra/django/models.py
2019-06-07 08:14:08.000000000 +0200
@@ -34,7 +34,7 @@
def add_default_field_mapping(field_type, strategy):
# type: (Type[dm.Field], st.SearchStrategy[Any]) -> None
note_deprecation(
- "This function is deprecated; use `hypothesis.extra.django."
+ "`hypothesis.extra.django.models.add_default_field_mapping` is
deprecated; use `hypothesis.extra.django."
"register_field_strategy` instead.",
since="2019-01-10",
)
@@ -76,7 +76,7 @@
shop_strategy = models(Shop, company=models(Company))
"""
note_deprecation(
- "This function is deprecated; use `hypothesis.extra.django."
+ "`hypothesis.extra.django.models.models` is deprecated; use
`hypothesis.extra.django."
"from_model` instead.",
since="2019-01-10",
)
@@ -93,7 +93,7 @@
if missed:
raise InvalidArgument(
u"Missing arguments for mandatory field%s %s for model %s"
- % (u"s" if missed else u"", u", ".join(missed), model.__name__)
+ % (u"s" if len(missed) > 1 else u"", u", ".join(missed),
model.__name__)
)
for field in result:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/extra/numpy.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/extra/numpy.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/extra/numpy.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/extra/numpy.py
2019-06-07 08:14:08.000000000 +0200
@@ -493,7 +493,7 @@
valid_sizes,
)
if all(isinstance(s, int) for s in sizes):
- sizes = sorted(set(s // 8 for s in sizes))
+ sizes = sorted({s // 8 for s in sizes})
strat = st.sampled_from(sizes)
if "{}" not in kind:
kind += "{}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/internal/compat.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/internal/compat.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/internal/compat.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/internal/compat.py
2019-06-07 08:14:08.000000000 +0200
@@ -374,6 +374,9 @@
"co_cellvars",
]
else:
+ # This field order is accurate for 3.5 - 3.7, but not 3.8 when a new field
+ # was added for positional-only arguments. However it also added a
.replace()
+ # method that we use instead of field indices, so they're fine as-is.
CODE_FIELD_ORDER = [
"co_argcount",
"co_kwonlyargcount",
@@ -392,10 +395,6 @@
"co_cellvars",
]
- if sys.version_info >= (3, 8, 0):
- # PEP 570 added "positional only arguments"
- CODE_FIELD_ORDER.insert(1, "co_posonlyargcount")
-
def update_code_location(code, newfile, newlineno):
"""Take a code object and lie shamelessly about where it comes from.
@@ -407,6 +406,12 @@
code you're probably here because it's broken something and now
you're angry at me. Sorry.
"""
+ if hasattr(code, "replace"):
+ # Python 3.8 added positional-only params (PEP 570), and thus changed
+ # the layout of code objects. In beta1, the `.replace()` method was
+ # added to facilitate future-proof code. See BPO-37032 for details.
+ return code.replace(co_filename=newfile, co_firstlineno=newlineno)
+
unpacked = [getattr(code, name) for name in CODE_FIELD_ORDER]
unpacked[CODE_FIELD_ORDER.index("co_filename")] = newfile
unpacked[CODE_FIELD_ORDER.index("co_firstlineno")] = newlineno
@@ -525,27 +530,6 @@
return it
-if PY3:
- FileNotFoundError = FileNotFoundError # type: Type[IOError]
-else:
- FileNotFoundError = IOError
-
-# We need to know what sort of exception gets thrown when you try to write over
-# an existing file where you're not allowed to. This is rather less consistent
-# between versions than might be hoped.
-if PY3:
- FileExistsError = FileExistsError # type: Type[IOError]
-
-elif WINDOWS:
- FileExistsError = WindowsError
-
-else:
- # This doesn't happen in this case: We're not on windows and don't support
- # the x flag because it's Python 2, so there are no places where this can
- # be thrown.
- FileExistsError = None
-
-
# Under Python 2, math.floor and math.ceil return floats, which cannot
# represent large integers - eg `float(2**53) == float(2**53 + 1)`.
# We therefore implement them entirely in (long) integer operations.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/internal/conjecture/engine.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/internal/conjecture/engine.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/internal/conjecture/engine.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/internal/conjecture/engine.py
2019-06-07 08:14:08.000000000 +0200
@@ -503,9 +503,6 @@
return mutate_from
- def __rewrite(self, data, result):
- return self.__zero_bound(data, result)
-
def __zero_bound(self, data, result):
"""This tries to get the size of the generated data under control by
replacing the result with zero if we are too deep or have already
@@ -741,7 +738,7 @@
result = buffer[data.index : data.index + n]
if len(result) < n:
result += hbytes(n - len(result))
- return self.__rewrite(data, result)
+ return self.__zero_bound(data, result)
data = self.new_conjecture_data(draw_bytes=draw_bytes)
self.test_function(data)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/internal/conjecture/utils.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/internal/conjecture/utils.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/internal/conjecture/utils.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/internal/conjecture/utils.py
2019-06-07 08:14:08.000000000 +0200
@@ -154,25 +154,12 @@
return values[integer_range(data, 0, len(values) - 1)]
-def getrandbits(data, n):
- # This method is equivalent to data.draw_bits(n) except that it fails
- # to set the mask. This method should die but is currently maintaining
- # bugwards compatibility with some oddities of behaviour that we've
- # not yet fully debugged. See
- # https://github.com/HypothesisWorks/hypothesis/issues/1827
- # for details.
- n_bytes = n // 8
- if n % 8 != 0:
- n_bytes += 1
- return data.draw_bits(n_bytes * 8) & ((1 << n) - 1)
-
-
FLOAT_PREFIX = 0b1111111111 << 52
FULL_FLOAT = int_to_float(FLOAT_PREFIX | ((2 << 53) - 1)) - 1
def fractional_float(data):
- return (int_to_float(FLOAT_PREFIX | getrandbits(data, 52)) - 1) /
FULL_FLOAT
+ return (int_to_float(FLOAT_PREFIX | data.draw_bits(52)) - 1) / FULL_FLOAT
def boolean(data):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/internal/reflection.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/internal/reflection.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/internal/reflection.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/internal/reflection.py
2019-06-07 08:14:08.000000000 +0200
@@ -182,7 +182,7 @@
else:
raise TypeError("No value provided for argument %r" %
(arg_name))
- if kwargs and not argspec.varkw:
+ if kwargs and not (argspec.varkw or argspec.kwonlyargs):
if len(kwargs) > 1:
raise TypeError(
"%s() got unexpected keyword arguments %s"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/searchstrategy/collections.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/searchstrategy/collections.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/searchstrategy/collections.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/searchstrategy/collections.py
2019-06-07 08:14:08.000000000 +0200
@@ -188,7 +188,7 @@
except TypeError:
self.keys = tuple(sorted(strategy_dict.keys(), key=repr))
super(FixedKeysDictStrategy, self).__init__(
- strategy=TupleStrategy((strategy_dict[k] for k in self.keys))
+ strategy=TupleStrategy(strategy_dict[k] for k in self.keys)
)
def calc_is_empty(self, recur):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/searchstrategy/regex.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/searchstrategy/regex.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/searchstrategy/regex.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/searchstrategy/regex.py
2019-06-07 08:14:08.000000000 +0200
@@ -36,16 +36,16 @@
SPACE_CHARS = set(u" \t\n\r\f\v")
UNICODE_SPACE_CHARS = SPACE_CHARS | set(u"\x1c\x1d\x1e\x1f\x85")
-UNICODE_DIGIT_CATEGORIES = set(["Nd"])
+UNICODE_DIGIT_CATEGORIES = {"Nd"}
UNICODE_SPACE_CATEGORIES = set(as_general_categories("Z"))
UNICODE_LETTER_CATEGORIES = set(as_general_categories("L"))
UNICODE_WORD_CATEGORIES = set(as_general_categories(["L", "N"]))
# This is verbose, but correct on all versions of Python
-BYTES_ALL = set(int_to_byte(i) for i in range(256))
-BYTES_DIGIT = set(b for b in BYTES_ALL if re.match(b"\\d", b))
-BYTES_SPACE = set(b for b in BYTES_ALL if re.match(b"\\s", b))
-BYTES_WORD = set(b for b in BYTES_ALL if re.match(b"\\w", b))
+BYTES_ALL = {int_to_byte(i) for i in range(256)}
+BYTES_DIGIT = {b for b in BYTES_ALL if re.match(b"\\d", b)}
+BYTES_SPACE = {b for b in BYTES_ALL if re.match(b"\\s", b)}
+BYTES_WORD = {b for b in BYTES_ALL if re.match(b"\\w", b)}
BYTES_LOOKUP = {
sre.CATEGORY_DIGIT: BYTES_DIGIT,
sre.CATEGORY_SPACE: BYTES_SPACE,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/stateful.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/stateful.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/stateful.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/stateful.py
2019-06-07 08:14:08.000000000 +0200
@@ -89,7 +89,17 @@
@given(st.data())
def run_state_machine(factory, data):
machine = factory()
- check_type(GenericStateMachine, machine, "state_machine_factory()")
+ if isinstance(machine, GenericStateMachine) and not isinstance(
+ machine, RuleBasedStateMachine
+ ):
+ note_deprecation(
+ "%s inherits from GenericStateMachine, which is deprecated.
Use a "
+ "RuleBasedStateMachine, or a test function with st.data(),
instead."
+ % (type(machine).__name__,),
+ since="2019-05-29",
+ )
+ else:
+ check_type(RuleBasedStateMachine, machine,
"state_machine_factory()")
data.conjecture_data.hypothesis_runner = machine
n_steps = settings.stateful_step_count
@@ -150,25 +160,28 @@
class GenericStateMachine(
GenericStateMachineMeta("GenericStateMachine", (object,), {}) # type:
ignore
):
- """A GenericStateMachine is the basic entry point into Hypothesis's
- approach to stateful testing.
-
- The intent is for it to be subclassed to provide state machine descriptions
-
- The way this is used is that Hypothesis will repeatedly execute something
- that looks something like::
-
- x = MyStatemachineSubclass()
- x.check_invariants()
- try:
- for _ in range(n_steps):
- x.execute_step(x.steps().example())
- x.check_invariants()
- finally:
- x.teardown()
+ """A GenericStateMachine is a deprecated approach to stateful testing.
- And if this ever produces an error it will shrink it down to a small
- sequence of example choices demonstrating that.
+ In earlier versions of Hypothesis, you would define ``steps``,
+ ``execute_step``, ``teardown``, and ``check_invariants`` methods;
+ and the engine would then run something like the following::
+
+ @given(st.data())
+ def test_the_stateful_thing(data):
+ x = MyStatemachineSubclass()
+ x.check_invariants()
+ try:
+ for _ in range(50):
+ step = data.draw(x.steps())
+ x.execute_step(step)
+ x.check_invariants()
+ finally:
+ x.teardown()
+
+ We now recommend using rule-based stateful testing instead wherever
+ possible. If your test is better expressed in the above format than
+ as a rule-based state machine, we suggest "unrolling" your method
+ definitions into a simple test function with the above control flow.
"""
def steps(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/version.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/version.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/src/hypothesis/version.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/src/hypothesis/version.py
2019-06-07 08:14:08.000000000 +0200
@@ -17,5 +17,5 @@
from __future__ import absolute_import, division, print_function
-__version_info__ = (4, 23, 4)
+__version_info__ = (4, 24, 3)
__version__ = ".".join(map(str, __version_info__))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/common/utils.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/common/utils.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/common/utils.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/common/utils.py
2019-06-07 08:14:08.000000000 +0200
@@ -130,7 +130,7 @@
def all_values(db):
- return set(v for vs in db.data.values() for v in vs)
+ return {v for vs in db.data.values() for v in vs}
def non_covering_examples(database):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_conjecture_engine.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_conjecture_engine.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_conjecture_engine.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_conjecture_engine.py
2019-06-07 08:14:08.000000000 +0200
@@ -46,7 +46,7 @@
from hypothesis.internal.conjecture.utils import Sampler, calc_label_from_name
from hypothesis.internal.entropy import deterministic_PRNG
from tests.common.strategies import SLOW, HardToShrink
-from tests.common.utils import no_shrink
+from tests.common.utils import counts_calls, no_shrink
SOME_LABEL = calc_label_from_name("some label")
@@ -1615,3 +1615,48 @@
runner.run()
assert runner.tree.is_exhausted
assert runner.valid_examples == 2
+
+
[email protected](
+ "pass_name",
+ [
+ "pass_to_descendant",
+ "adaptive_example_deletion",
+ "zero_examples",
+ "minimize_floats",
+ "example_deletion_with_block_lowering",
+ "reorder_examples",
+ ],
+)
+def test_shrinker_skips_stale_examples(monkeypatch, pass_name):
+ # Pretend that all example identifiers are stale, to test that this case
+ # is handled cleanly.
+ monkeypatch.setattr(
+ Shrinker, "example_for_stable_identifier", counts_calls(lambda self,
x: None)
+ )
+
+ # For "example_deletion_with_block_lowering", also pretend that all blocks
+ # are shrinking blocks, so that steps can be generated.
+ monkeypatch.setattr(
+ Shrinker, "is_shrinking_block", counts_calls(lambda self, i: True)
+ )
+
+ # Declare a test function that should satisfy step generation for all of
+ # the relevant shrink passes.
+ @shrinking_from([255] * 5)
+ def shrinker(data):
+ total = 0
+ data.start_example(0)
+ for _ in range(5):
+ data.start_example(0)
+ total += data.draw_bits(8)
+ data.stop_example(0)
+ data.stop_example(0)
+
+ data.mark_interesting()
+
+ # Run the shrink pass; this should not throw.
+ shrinker.fixate_shrink_passes([pass_name])
+
+ # Confirm that the pass had to deal with stale examples.
+ assert Shrinker.example_for_stable_identifier.calls > 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_conjecture_test_data.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_conjecture_test_data.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_conjecture_test_data.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_conjecture_test_data.py
2019-06-07 08:14:08.000000000 +0200
@@ -161,8 +161,8 @@
assert len(d.examples) == 6
- depths = set((ex.length, ex.depth) for ex in d.examples)
- assert depths == set([(2, 1), (3, 2), (6, 2), (9, 1), (12, 1), (23, 0)])
+ depths = {(ex.length, ex.depth) for ex in d.examples}
+ assert depths == {(2, 1), (3, 2), (6, 2), (9, 1), (12, 1), (23, 0)}
def test_has_examples_even_when_empty():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_conjecture_utils.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_conjecture_utils.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_conjecture_utils.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_conjecture_utils.py
2019-06-07 08:14:08.000000000 +0200
@@ -26,7 +26,6 @@
from hypothesis.internal.compat import hbytes, hrange
from hypothesis.internal.conjecture.data import ConjectureData
from hypothesis.internal.coverage import IN_COVERAGE_TESTS
-from tests.cover.test_conjecture_engine import run_to_buffer
def test_does_draw_data_for_empty_range():
@@ -147,12 +146,3 @@
calculated[base] += (1 - p_alternate) / n
calculated[alternate] += p_alternate / n
assert probabilities == calculated
-
-
-def test_get_randbits_can_set_high_bit():
- @run_to_buffer
- def x(data):
- if cu.getrandbits(data, 8) >> 7:
- data.mark_interesting()
-
- assert x == hbytes([1 << 7])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_example.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_example.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_example.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_example.py
2019-06-07 08:14:08.000000000 +0200
@@ -48,7 +48,7 @@
def test_does_not_always_give_the_same_example():
s = st.integers()
- assert len(set(s.example() for _ in range(100))) >= 10
+ assert len({s.example() for _ in range(100)}) >= 10
def test_raises_on_no_examples():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_explicit_examples.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_explicit_examples.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_explicit_examples.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_explicit_examples.py
2019-06-07 08:14:08.000000000 +0200
@@ -112,7 +112,7 @@
seen.append(x)
test_not_long_str()
- assert set(seen[:2]) == set((long_str, short_str))
+ assert set(seen[:2]) == {long_str, short_str}
@pytest.mark.parametrize((u"x", u"y"), [(1, False), (2, True)])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_pretty.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_pretty.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_pretty.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_pretty.py
2019-06-07 08:14:08.000000000 +0200
@@ -249,11 +249,11 @@
objects = [
set(),
frozenset(),
- set([1]),
+ {1},
frozenset([1]),
- set([1, 2]),
+ {1, 2},
frozenset([1, 2]),
- set([-1, -2, -3]),
+ {-1, -2, -3},
]
expected = [
"set()",
@@ -270,14 +270,14 @@
def test_unsortable_set():
- xs = set([1, 2, 3, "foo", "bar", "baz", object()])
+ xs = {1, 2, 3, "foo", "bar", "baz", object()}
p = pretty.pretty(xs)
for x in xs:
assert pretty.pretty(x) in p
def test_unsortable_dict():
- xs = dict((k, 1) for k in [1, 2, 3, "foo", "bar", "baz", object()])
+ xs = {k: 1 for k in [1, 2, 3, "foo", "bar", "baz", object()]}
p = pretty.pretty(xs)
for x in xs:
assert pretty.pretty(x) in p
@@ -389,7 +389,7 @@
def test_long_dict():
- d = dict((n, n) for n in range(10000))
+ d = {n: n for n in range(10000)}
p = pretty.pretty(d)
last2 = p.rsplit("\n", 2)[-2:]
assert_equal(last2, [" 999: 999,", " ...}"])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_regressions.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_regressions.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_regressions.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_regressions.py
2019-06-07 08:14:08.000000000 +0200
@@ -82,7 +82,7 @@
def test_regression_issue_1230():
strategy = st.builds(
- lambda x, y: dict((list(x.items()) + list(y.items()))),
+ lambda x, y: dict(list(x.items()) + list(y.items())),
st.fixed_dictionaries({"0": st.text()}),
st.builds(
lambda dictionary, keys: {key: dictionary[key] for key in keys},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_runner_strategy.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_runner_strategy.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_runner_strategy.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_runner_strategy.py
2019-06-07 08:14:08.000000000 +0200
@@ -23,7 +23,7 @@
from hypothesis import find, given, strategies as st
from hypothesis.errors import InvalidArgument
-from hypothesis.stateful import GenericStateMachine
+from hypothesis.stateful import RuleBasedStateMachine, rule
def test_cannot_use_without_a_runner():
@@ -60,12 +60,10 @@
assert runner is self
-class RunnerStateMachine(GenericStateMachine):
- def steps(self):
- return st.runner()
-
- def execute_step(self, step):
- assert self is step
+class RunnerStateMachine(RuleBasedStateMachine):
+ @rule(runner=st.runner())
+ def step(self, runner):
+ assert runner is self
TestState = RunnerStateMachine.TestCase
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_stateful.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_stateful.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/cover/test_stateful.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/cover/test_stateful.py
2019-06-07 08:14:08.000000000 +0200
@@ -26,7 +26,6 @@
from hypothesis import (
PrintSettings,
__version__,
- assume,
reproduce_failure,
seed,
settings as Settings,
@@ -93,22 +92,6 @@
self.counter = step
-class GoodSet(GenericStateMachine):
- def __init__(self):
- self.stuff = set()
-
- def steps(self):
- return tuples(booleans(), integers())
-
- def execute_step(self, step):
- delete, value = step
- if delete:
- self.stuff.discard(value)
- else:
- self.stuff.add(value)
- assert delete == (value not in self.stuff)
-
-
Leaf = namedtuple(u"Leaf", (u"label",))
Split = namedtuple(u"Split", (u"left", u"right"))
@@ -247,8 +230,6 @@
bad_machines = (
- OrderedStateMachine,
- SetStateMachine,
BalancedTrees,
DepthMachine,
RoseTreeStateMachine,
@@ -296,17 +277,9 @@
assert "rule2data" in output
-class GivenLikeStateMachine(GenericStateMachine):
- def steps(self):
- return lists(booleans(), min_size=1)
-
- def execute_step(self, step):
- assume(any(step))
-
-
def test_can_get_test_case_off_machine_instance():
- assert GoodSet().TestCase is GoodSet().TestCase
- assert GoodSet().TestCase is not None
+ assert SetStateMachine().TestCase is SetStateMachine().TestCase
+ assert SetStateMachine().TestCase is not None
class FlakyDrawLessMachine(GenericStateMachine):
@@ -323,6 +296,7 @@
assert 0 not in bytearray(step)
+@checks_deprecated_behaviour
def test_flaky_draw_less_raises_flaky():
with raises(Flaky):
FlakyDrawLessMachine.TestCase().runTest()
@@ -336,6 +310,7 @@
assert current_build_context().is_final
+@checks_deprecated_behaviour
def test_flaky_raises_flaky():
with raises(Flaky):
FlakyStateMachine.TestCase().runTest()
@@ -424,6 +399,7 @@
consumes(integers())
+@checks_deprecated_behaviour
def test_ratchetting_raises_flaky():
with raises(Flaky):
FlakyRatchettingMachine.TestCase().runTest()
@@ -471,20 +447,12 @@
)
-TestGoodSets = GoodSet.TestCase
-TestGivenLike = GivenLikeStateMachine.TestCase
TestDynamicMachine = DynamicMachine.TestCase
TestIntAdder = IntAdder.TestCase
TestPrecondition = PreconditionMachine.TestCase
-for test_case in (
- TestGoodSets,
- TestGivenLike,
- TestDynamicMachine,
- TestIntAdder,
- TestPrecondition,
-):
+for test_case in (TestDynamicMachine, TestIntAdder, TestPrecondition):
test_case.settings = Settings(test_case.settings, max_examples=10)
@@ -502,6 +470,7 @@
assert len(Foo.rules()) == 2
+@checks_deprecated_behaviour
def test_minimizes_errors_in_teardown():
counter = [0]
@@ -536,11 +505,13 @@
raise ValueError(u"%d is too high" % (value,))
+@checks_deprecated_behaviour
def test_can_use_factory_for_tests():
with raises(ValueError):
run_state_machine_as_test(lambda: RequiresInit(42))
+@Settings(stateful_step_count=5)
class FailsEventually(GenericStateMachine):
def __init__(self):
super(FailsEventually, self).__init__()
@@ -554,14 +525,9 @@
assert self.counter < 10
-FailsEventually.TestCase.settings = Settings(
- FailsEventually.TestCase.settings, stateful_step_count=5
-)
-
-TestDoesNotFail = FailsEventually.TestCase
-
-
+@checks_deprecated_behaviour
def test_can_explicitly_pass_settings():
+ run_state_machine_as_test(FailsEventually)
try:
FailsEventually.TestCase.settings = Settings(
FailsEventually.TestCase.settings, stateful_step_count=15
@@ -595,6 +561,7 @@
FailsEventually.TestCase.settings = real_settings
+@checks_deprecated_behaviour
def test_saves_failing_example_in_database():
db = ExampleDatabase(":memory:")
with raises(AssertionError):
@@ -602,6 +569,7 @@
assert any(list(db.data.values()))
+@checks_deprecated_behaviour
def test_can_run_with_no_db():
with raises(AssertionError):
run_state_machine_as_test(SetStateMachine, Settings(database=None))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/nocover/test_collective_minimization.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/nocover/test_collective_minimization.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/nocover/test_collective_minimization.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/nocover/test_collective_minimization.py
2019-06-07 08:14:08.000000000 +0200
@@ -50,6 +50,6 @@
settings=settings(max_examples=2000),
)
assert len(xs) == n
- assert 2 <= len(set((map(repr, xs)))) <= 3
+ assert 2 <= len(set(map(repr, xs))) <= 3
except NoSuchExample:
pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/nocover/test_flatmap.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/nocover/test_flatmap.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/nocover/test_flatmap.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/nocover/test_flatmap.py
2019-06-07 08:14:08.000000000 +0200
@@ -99,7 +99,7 @@
result = minimal(s, criterion)
assert len(result) == 6
- assert set(result) == set([False, u""])
+ assert set(result) == {False, u""}
@pytest.mark.parametrize("n", range(1, 10))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/nocover/test_pretty_repr.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/nocover/test_pretty_repr.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/nocover/test_pretty_repr.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/nocover/test_pretty_repr.py
2019-06-07 08:14:08.000000000 +0200
@@ -94,7 +94,7 @@
)
-strategy_globals = dict((k, getattr(st, k)) for k in dir(st))
+strategy_globals = {k: getattr(st, k) for k in dir(st)}
strategy_globals["OrderedDict"] = OrderedDict
strategy_globals["inf"] = float("inf")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/nocover/test_testdecorators.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/nocover/test_testdecorators.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/nocover/test_testdecorators.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/nocover/test_testdecorators.py
2019-06-07 08:14:08.000000000 +0200
@@ -18,7 +18,7 @@
from __future__ import absolute_import, division, print_function
from hypothesis import HealthCheck, given, reject, settings
-from hypothesis.errors import Unsatisfiable
+from hypothesis.errors import InvalidArgument, Unsatisfiable
from hypothesis.strategies import integers
from tests.common.utils import raises
@@ -44,3 +44,20 @@
with raises(Unsatisfiable) as e:
Foo().this_has_a_unique_name_and_lives_on_a_class()
assert (Foo.this_has_a_unique_name_and_lives_on_a_class.__name__) in
e.value.args[0]
+
+
+def test_signature_mismatch_error_message():
+ # Regression test for issue #1978
+
+ @settings(max_examples=2)
+ @given(x=integers())
+ def bad_test():
+ pass
+
+ try:
+ bad_test()
+ except InvalidArgument as e:
+ assert (
+ str(e) == "bad_test() got an unexpected keyword argument 'x', "
+ "from `x=integers()` in @given"
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/numpy/test_gen_data.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/numpy/test_gen_data.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/numpy/test_gen_data.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/numpy/test_gen_data.py
2019-06-07 08:14:08.000000000 +0200
@@ -466,7 +466,7 @@
min_size = data.draw(st.integers(0, ndim), label="min_size")
max_size = data.draw(st.integers(min_size, ndim), label="max_size")
axes = data.draw(nps.valid_tuple_axes(ndim, min_size, max_size),
label="axes")
- assert len(set(axes)) == len(set([i if 0 < i else ndim + i for i in axes]))
+ assert len(set(axes)) == len({i if 0 < i else ndim + i for i in axes})
@given(ndim=st.integers(0, 5), data=st.data())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/pandas/test_indexes.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/pandas/test_indexes.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/pandas/test_indexes.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/pandas/test_indexes.py
2019-06-07 08:14:08.000000000 +0200
@@ -24,7 +24,7 @@
import hypothesis.extra.numpy as npst
import hypothesis.extra.pandas as pdst
import hypothesis.strategies as st
-from hypothesis import HealthCheck, assume, given, reject, settings
+from hypothesis import HealthCheck, given, reject, settings
from hypothesis.errors import NoExamples
from tests.pandas.helpers import supported_by_pandas
@@ -72,13 +72,17 @@
min_size = data.draw(st.integers(0, 10), "min_size")
max_size = data.draw(st.none() | st.integers(min_size, min_size + 10),
"max_size")
unique = data.draw(st.booleans(), "unique")
- dtype = data.draw(npst.scalar_dtypes(), "dtype")
- assume(supported_by_pandas(dtype))
-
- # Pandas bug: https://github.com/pandas-dev/pandas/pull/14916 until 0.20;
- # then int64 indexes are inferred from uint64 values.
- assume(dtype.kind != "u")
-
+ dtype = data.draw(
+ st.one_of(
+ npst.boolean_dtypes(),
+ npst.integer_dtypes(endianness="="),
+ npst.floating_dtypes(endianness="="),
+ npst.complex_number_dtypes(endianness="="),
+ npst.datetime64_dtypes(endianness="="),
+ npst.timedelta64_dtypes(endianness="="),
+ ).filter(supported_by_pandas),
+ "dtype",
+ )
pass_elements = data.draw(st.booleans(), "pass_elements")
converted_dtype = pandas.Index([], dtype=dtype).dtype
@@ -109,8 +113,7 @@
else:
raise
if dtype is None:
- if pandas.__version__ >= "0.19":
- assert index.dtype == inferred_dtype
+ assert index.dtype == inferred_dtype
else:
assert index.dtype == converted_dtype
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/py3/test_composite_kwonlyargs.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/py3/test_composite_kwonlyargs.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/py3/test_composite_kwonlyargs.py
1970-01-01 01:00:00.000000000 +0100
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/py3/test_composite_kwonlyargs.py
2019-06-07 08:14:08.000000000 +0200
@@ -0,0 +1,38 @@
+# coding=utf-8
+#
+# This file is part of Hypothesis, which may be found at
+# https://github.com/HypothesisWorks/hypothesis/
+#
+# Most of this work is copyright (C) 2013-2019 David R. MacIver
+# ([email protected]), but it contains contributions by others. See
+# CONTRIBUTING.rst for a full list of people who may hold copyright, and
+# consult the git log if you need to determine who owns an individual
+# contribution.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public License,
+# v. 2.0. If a copy of the MPL was not distributed with this file, You can
+# obtain one at https://mozilla.org/MPL/2.0/.
+#
+# END HEADER
+
+from __future__ import absolute_import, division, print_function
+
+from hypothesis import given, strategies as st
+
+# Tests that convert_keyword_arguments in reflection.py can handle
+# composites that only have keyword-only arguments.
+# See https://github.com/HypothesisWorks/hypothesis/issues/1999
+
+
[email protected]
+def kwonlyargs_composites(draw, *, kwarg1=None):
+ return draw(st.fixed_dictionaries({"kwarg1": st.just(kwarg1), "i":
st.integers()}))
+
+
+@given(
+ st.lists(
+ st.one_of(kwonlyargs_composites(kwarg1="test")), unique_by=lambda x:
x["i"]
+ )
+)
+def test_composite_with_keyword_only_args(a):
+ assert True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/pytest/test_statistics.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/pytest/test_statistics.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/pytest/test_statistics.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/pytest/test_statistics.py
2019-06-07 08:14:08.000000000 +0200
@@ -98,17 +98,11 @@
STATEFUL_TESTSUITE = """
+from hypothesis.stateful import RuleBasedStateMachine, rule
-from hypothesis import given
-from hypothesis.strategies import integers
-from hypothesis.stateful import GenericStateMachine
-
-
-class Stuff(GenericStateMachine):
- def steps(self):
- return integers()
-
- def execute_step(self, step):
+class Stuff(RuleBasedStateMachine):
+ @rule()
+ def step(self):
pass
TestStuff = Stuff.TestCase
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/quality/test_shrink_quality.py
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/quality/test_shrink_quality.py
---
old/hypothesis-hypothesis-python-4.23.4/hypothesis-python/tests/quality/test_shrink_quality.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/hypothesis-python/tests/quality/test_shrink_quality.py
2019-06-07 08:14:08.000000000 +0200
@@ -73,7 +73,7 @@
def test_minimize_mixed_list():
mixed = minimal(lists(integers() | text()), lambda x: len(x) >= 10)
- assert set(mixed).issubset(set((0, u"")))
+ assert set(mixed).issubset({0, u""})
def test_minimize_longer_string():
@@ -85,14 +85,11 @@
def test_minimize_3_set():
- assert minimal(sets(integers()), lambda x: len(x) >= 3) in (
- set((0, 1, 2)),
- set((-1, 0, 1)),
- )
+ assert minimal(sets(integers()), lambda x: len(x) >= 3) in ({0, 1, 2},
{-1, 0, 1})
def test_minimize_3_set_of_tuples():
- assert minimal(sets(tuples(integers())), lambda x: len(x) >= 2) ==
set(((0,), (1,)))
+ assert minimal(sets(tuples(integers())), lambda x: len(x) >= 2) == {(0,),
(1,)}
def test_minimize_sets_of_sets():
@@ -163,7 +160,7 @@
lambda t: len(t) >= 3,
)
assert isinstance(x, dict_class)
- assert set(x.values()) == set((u"",))
+ assert set(x.values()) == {u""}
for k in x:
if k < 0:
assert k + 1 in x
@@ -301,7 +298,7 @@
def test_minimize_list_of_sets():
assert minimal(
lists(sets(booleans())), lambda x: len(list(filter(None, x))) >= 3
- ) == ([set((False,))] * 3)
+ ) == ([{False}] * 3)
def test_minimize_list_of_lists():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/hypothesis-ruby/README.markdown
new/hypothesis-hypothesis-python-4.24.3/hypothesis-ruby/README.markdown
--- old/hypothesis-hypothesis-python-4.23.4/hypothesis-ruby/README.markdown
2019-05-09 08:15:59.000000000 +0200
+++ new/hypothesis-hypothesis-python-4.24.3/hypothesis-ruby/README.markdown
2019-06-07 08:14:08.000000000 +0200
@@ -32,7 +32,7 @@
values.delete_at(values.index(to_remove))
- # Will fail if the value ws duplicated in the list.
+ # Will fail if the value was duplicated in the list.
expect(values.include?(to_remove)).to be false
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/requirements/coverage.txt
new/hypothesis-hypothesis-python-4.24.3/requirements/coverage.txt
--- old/hypothesis-hypothesis-python-4.23.4/requirements/coverage.txt
2019-05-09 08:15:59.000000000 +0200
+++ new/hypothesis-hypothesis-python-4.24.3/requirements/coverage.txt
2019-06-07 08:14:08.000000000 +0200
@@ -2,11 +2,11 @@
# This file is autogenerated by pip-compile
# To update, run:
#
-# pip-compile requirements/coverage.in --output-file
requirements/coverage.txt
+# pip-compile --output-file=requirements/coverage.txt
requirements/coverage.in
#
coverage==4.5.3
lark-parser==0.7.1
-numpy==1.16.3
+numpy==1.16.4
pandas==0.24.2
python-dateutil==2.8.0 # via pandas
pytz==2019.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/requirements/test.txt
new/hypothesis-hypothesis-python-4.24.3/requirements/test.txt
--- old/hypothesis-hypothesis-python-4.23.4/requirements/test.txt
2019-05-09 08:15:59.000000000 +0200
+++ new/hypothesis-hypothesis-python-4.24.3/requirements/test.txt
2019-06-07 08:14:08.000000000 +0200
@@ -2,17 +2,22 @@
# This file is autogenerated by pip-compile
# To update, run:
#
-# pip-compile requirements/test.in --output-file requirements/test.txt
+# pip-compile --output-file=requirements/test.txt requirements/test.in
#
apipkg==1.5 # via execnet
atomicwrites==1.3.0 # via pytest
attrs==19.1.0
execnet==1.6.0 # via pytest-xdist
-mock==3.0.4
+importlib-metadata==0.17 # via pluggy, pytest
+mock==3.0.5
more-itertools==5.0.0
-pluggy==0.9.0 # via pytest
+packaging==19.0 # via pytest
+pluggy==0.12.0 # via pytest
py==1.8.0 # via pytest
+pyparsing==2.4.0 # via packaging
pytest-forked==1.0.2 # via pytest-xdist
pytest-xdist==1.28.0
-pytest==4.4.1
-six==1.12.0 # via mock, more-itertools, pytest, pytest-xdist
+pytest==4.6.1
+six==1.12.0 # via mock, more-itertools, packaging, pytest,
pytest-xdist
+wcwidth==0.1.7 # via pytest
+zipp==0.5.1 # via importlib-metadata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/requirements/tools.in
new/hypothesis-hypothesis-python-4.24.3/requirements/tools.in
--- old/hypothesis-hypothesis-python-4.23.4/requirements/tools.in
2019-05-09 08:15:59.000000000 +0200
+++ new/hypothesis-hypothesis-python-4.24.3/requirements/tools.in
2019-06-07 08:14:08.000000000 +0200
@@ -19,6 +19,7 @@
pylint
pytest
python-dateutil
+pyupgrade
pyupio
requests
restructuredtext-lint
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/requirements/tools.txt
new/hypothesis-hypothesis-python-4.24.3/requirements/tools.txt
--- old/hypothesis-hypothesis-python-4.23.4/requirements/tools.txt
2019-05-09 08:15:59.000000000 +0200
+++ new/hypothesis-hypothesis-python-4.24.3/requirements/tools.txt
2019-06-07 08:14:08.000000000 +0200
@@ -2,7 +2,7 @@
# This file is autogenerated by pip-compile
# To update, run:
#
-# pip-compile requirements/tools.in --output-file requirements/tools.txt
+# pip-compile --output-file=requirements/tools.txt requirements/tools.in
#
alabaster==0.7.12 # via sphinx
appdirs==1.4.3 # via black
@@ -10,9 +10,9 @@
atomicwrites==1.3.0 # via pytest
attrs==19.1.0
autoflake==1.3
-babel==2.6.0 # via sphinx
+babel==2.7.0 # via sphinx
backcall==0.1.0 # via ipython
-bandit==1.5.1
+bandit==1.6.0
black==19.3b0
bleach==3.1.0 # via readme-renderer
certifi==2019.3.9 # via requests
@@ -21,12 +21,12 @@
coverage==4.5.3
decorator==4.4.0 # via ipython, traitlets
deprecated==1.2.5 # via pygithub
-django==2.2.1
+django==2.2.2
docutils==0.14 # via readme-renderer, restructuredtext-lint, sphinx
dparse==0.4.1 # via pyupio, safety
dpcontracts==0.6.0
entrypoints==0.3 # via flake8
-filelock==3.0.10 # via tox
+filelock==3.0.12 # via tox
flake8-alfred==1.1.1
flake8-docstrings==1.3.0
flake8-polyfill==1.0.2 # via flake8-docstrings
@@ -35,28 +35,29 @@
gitpython==2.1.11 # via bandit
idna==2.8 # via requests
imagesize==1.1.0 # via sphinx
+importlib-metadata==0.17 # via pluggy, pytest
ipython-genutils==0.2.0 # via traitlets
ipython==7.5.0
-isort==4.3.18
+isort==4.3.20
jedi==0.13.3 # via ipython
jinja2==2.10.1 # via pyupio, sphinx
lark-parser==0.7.1
-lazy-object-proxy==1.3.1 # via astroid
+lazy-object-proxy==1.4.1 # via astroid
markupsafe==1.1.1 # via jinja2
mccabe==0.6.1 # via flake8, pylint
-mock==3.0.4
+mock==3.0.5
more-itertools==5.0.0
mypy-extensions==0.4.1 # via mypy
mypy==0.701
-numpy==1.16.3
-packaging==19.0 # via dparse, pyupio, safety, sphinx
+numpy==1.16.4
+packaging==19.0 # via dparse, pytest, pyupio, safety, sphinx
parso==0.4.0 # via jedi
-pbr==5.2.0 # via stevedore
+pbr==5.2.1 # via stevedore
pexpect==4.7.0 # via ipython
pickleshare==0.7.5 # via ipython
-pip-tools==3.6.1
+pip-tools==3.7.0
pkginfo==1.5.0.1 # via twine
-pluggy==0.9.0 # via pytest, tox
+pluggy==0.12.0 # via pytest, tox
prompt-toolkit==2.0.9 # via ipython
ptyprocess==0.6.0 # via pexpect
py==1.8.0 # via pytest, tox
@@ -64,26 +65,27 @@
pydocstyle==3.0.0 # via flake8-docstrings
pyflakes==2.1.1 # via autoflake, flake8
pygithub==1.43.7 # via pyupio
-pygments==2.3.1 # via ipython, readme-renderer, sphinx
+pygments==2.4.2 # via ipython, readme-renderer, sphinx
pyjwt==1.7.1 # via pygithub
pylint==2.3.1
pyparsing==2.4.0 # via packaging
-pytest==4.4.1
+pytest==4.6.1
python-dateutil==2.8.0
python-gitlab==1.8.0 # via pyupio
pytz==2019.1 # via babel, django
+pyupgrade==1.18.0
pyupio==1.0.2
pyyaml==5.1 # via bandit, dparse, pyupio
readme-renderer==24.0 # via twine
requests-toolbelt==0.9.1 # via twine
-requests==2.21.0
+requests==2.22.0
restructuredtext-lint==1.3.0
safety==1.8.5 # via pyupio
six==1.12.0 # via astroid, bandit, bleach, dparse, mock,
more-itertools, packaging, pip-tools, prompt-toolkit, pydocstyle, pytest,
python-dateutil, python-gitlab, pyupio, readme-renderer, stevedore, tox,
traitlets
smmap2==2.0.5 # via gitdb2
snowballstemmer==1.2.1 # via pydocstyle, sphinx
sphinx-rtd-theme==0.4.3
-sphinx==2.0.1
+sphinx==2.1.0
sphinxcontrib-applehelp==1.0.1 # via sphinx
sphinxcontrib-devhelp==1.0.1 # via sphinx
sphinxcontrib-htmlhelp==1.0.2 # via sphinx
@@ -92,14 +94,16 @@
sphinxcontrib-serializinghtml==1.1.3 # via sphinx
sqlparse==0.3.0 # via django
stevedore==1.30.1 # via bandit
+tokenize-rt==2.2.0 # via pyupgrade
toml==0.10.0
-tox==3.9.0
-tqdm==4.31.1 # via pyupio, twine
+tox==3.12.1
+tqdm==4.32.1 # via pyupio, twine
traitlets==4.3.2 # via ipython
twine==1.13.0
typed-ast==1.3.5 # via astroid, mypy
-urllib3==1.24.3 # via requests
-virtualenv==16.5.0 # via tox
-wcwidth==0.1.7 # via prompt-toolkit
+urllib3==1.25.3 # via requests
+virtualenv==16.6.0 # via tox
+wcwidth==0.1.7 # via prompt-toolkit, pytest
webencodings==0.5.1 # via bleach
wrapt==1.11.1 # via astroid, deprecated
+zipp==0.5.1 # via importlib-metadata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/requirements/typing.txt
new/hypothesis-hypothesis-python-4.24.3/requirements/typing.txt
--- old/hypothesis-hypothesis-python-4.23.4/requirements/typing.txt
2019-05-09 08:15:59.000000000 +0200
+++ new/hypothesis-hypothesis-python-4.24.3/requirements/typing.txt
2019-06-07 08:14:08.000000000 +0200
@@ -2,6 +2,6 @@
# This file is autogenerated by pip-compile
# To update, run:
#
-# pip-compile requirements/typing.in --output-file requirements/typing.txt
+# pip-compile --output-file=requirements/typing.txt requirements/typing.in
#
typing==3.6.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hypothesis-hypothesis-python-4.23.4/tooling/src/hypothesistooling/__main__.py
new/hypothesis-hypothesis-python-4.24.3/tooling/src/hypothesistooling/__main__.py
---
old/hypothesis-hypothesis-python-4.23.4/tooling/src/hypothesistooling/__main__.py
2019-05-09 08:15:59.000000000 +0200
+++
new/hypothesis-hypothesis-python-4.24.3/tooling/src/hypothesistooling/__main__.py
2019-06-07 08:14:08.000000000 +0200
@@ -232,6 +232,7 @@
"--remove-unused-variables",
*files_to_format,
)
+ pip_tool("pyupgrade", "--keep-percent-format", *files_to_format)
pip_tool("isort", *files_to_format)
pip_tool("black", *files_to_format)