Hello community,
here is the log from the commit of package python-zope.testbrowser for
openSUSE:Factory checked in at 2020-01-21 21:02:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-zope.testbrowser (Old)
and /work/SRC/openSUSE:Factory/.python-zope.testbrowser.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-zope.testbrowser"
Tue Jan 21 21:02:37 2020 rev:12 rq:766054 version:5.5.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-zope.testbrowser/python-zope.testbrowser.changes
2019-11-07 23:17:17.880585478 +0100
+++
/work/SRC/openSUSE:Factory/.python-zope.testbrowser.new.26092/python-zope.testbrowser.changes
2020-01-21 21:03:26.724935098 +0100
@@ -1,0 +2,14 @@
+Tue Jan 21 10:36:36 UTC 2020 - Marketa Calabkova <[email protected]>
+
+- update to 5.5.1
+ * Stop sending a Referer header when browser.open or browser.post is called
directly.
+ * Add error checking to the setters for ListControl.displayValue and
CheckboxListControl.displayValue:
+ in line with the old mechanize-based implementation, these will now raise
ItemNotFoundError
+ if any of the given values are not found, or ItemCountError on trying to
set more than one value
+ on a single-valued control.
+ * Fix AttributeError in add_file when trying to add to a control which is
not a file upload.
+ * Fix a bug where browser.goBack() did not invalidate caches, so subsequent
queries could use data
+ from the wrong response.
+ * Support telling the browser not to follow redirects by setting
Browser.follow_redirects to False.
+
+-------------------------------------------------------------------
Old:
----
zope.testbrowser-5.4.0.tar.gz
New:
----
zope.testbrowser-5.5.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-zope.testbrowser.spec ++++++
--- /var/tmp/diff_new_pack.dKyXZH/_old 2020-01-21 21:03:28.356935859 +0100
+++ /var/tmp/diff_new_pack.dKyXZH/_new 2020-01-21 21:03:28.360935861 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-zope.testbrowser
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-zope.testbrowser
-Version: 5.4.0
+Version: 5.5.1
Release: 0
Summary: Programmable browser for functional black-box tests
License: ZPL-2.1
++++++ zope.testbrowser-5.4.0.tar.gz -> zope.testbrowser-5.5.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zope.testbrowser-5.4.0/CHANGES.rst
new/zope.testbrowser-5.5.1/CHANGES.rst
--- old/zope.testbrowser-5.4.0/CHANGES.rst 2019-11-01 10:44:52.000000000
+0100
+++ new/zope.testbrowser-5.5.1/CHANGES.rst 2019-11-12 10:52:53.000000000
+0100
@@ -2,15 +2,45 @@
CHANGES
=======
+5.5.1 (2019-11-12)
+------------------
+
+- Stop sending a ``Referer`` header when ``browser.open`` or
+ ``browser.post`` is called directly. See `issue 87
+ <https://github.com/zopefoundation/zope.testbrowser/issues/87>`_.
+
+- Add error checking to the setters for ``ListControl.displayValue`` and
+ ``CheckboxListControl.displayValue``: in line with the old
+ ``mechanize``-based implementation, these will now raise
+ ``ItemNotFoundError`` if any of the given values are not found, or
+ ``ItemCountError`` on trying to set more than one value on a single-valued
+ control. See `issue 44
+ <https://github.com/zopefoundation/zope.testbrowser/issues/44>`_.
+
+- Fix AttributeError in `add_file` when trying to add to a control which is
+ not a file upload.
+
+5.5.0 (2019-11-11)
+------------------
+
+- Fix a bug where ``browser.goBack()`` did not invalidate caches, so
+ subsequent queries could use data from the wrong response. See `issue 83
+ <https://github.com/zopefoundation/zope.testbrowser/issues/83>`_.
+
+- Support telling the browser not to follow redirects by setting
+ ``Browser.follow_redirects`` to False. See `issue 79
+ <https://github.com/zopefoundation/zope.testbrowser/issues/79>`_.
+
+
5.4.0 (2019-11-01)
------------------
- Fix a bug where browser.reload() would not follow redirects or raise
exceptions for bad HTTP statuses. See `issue 75
- <https://zopefoundation/zope.testbrowser/issue/75>`_.
+ <https://github.com/zopefoundation/zope.testbrowser/issues/75>`_.
- Add Python 3.8 support. See `issue 80
- <https://github.com/zopefoundation/zope.testbrowser/issue/80>`_.
+ <https://github.com/zopefoundation/zope.testbrowser/issues/80>`_.
5.3.3 (2019-07-02)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zope.testbrowser-5.4.0/PKG-INFO
new/zope.testbrowser-5.5.1/PKG-INFO
--- old/zope.testbrowser-5.4.0/PKG-INFO 2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/PKG-INFO 2019-11-12 10:52:54.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: zope.testbrowser
-Version: 5.4.0
+Version: 5.5.1
Summary: Programmable browser for functional black-box tests
Home-page: https://github.com/zopefoundation/zope.testbrowser
Author: Zope Corporation and Contributors
@@ -33,15 +33,45 @@
CHANGES
=======
+ 5.5.1 (2019-11-12)
+ ------------------
+
+ - Stop sending a ``Referer`` header when ``browser.open`` or
+ ``browser.post`` is called directly. See `issue 87
+ <https://github.com/zopefoundation/zope.testbrowser/issues/87>`_.
+
+ - Add error checking to the setters for ``ListControl.displayValue``
and
+ ``CheckboxListControl.displayValue``: in line with the old
+ ``mechanize``-based implementation, these will now raise
+ ``ItemNotFoundError`` if any of the given values are not found, or
+ ``ItemCountError`` on trying to set more than one value on a
single-valued
+ control. See `issue 44
+ <https://github.com/zopefoundation/zope.testbrowser/issues/44>`_.
+
+ - Fix AttributeError in `add_file` when trying to add to a control
which is
+ not a file upload.
+
+ 5.5.0 (2019-11-11)
+ ------------------
+
+ - Fix a bug where ``browser.goBack()`` did not invalidate caches, so
+ subsequent queries could use data from the wrong response. See
`issue 83
+ <https://github.com/zopefoundation/zope.testbrowser/issues/83>`_.
+
+ - Support telling the browser not to follow redirects by setting
+ ``Browser.follow_redirects`` to False. See `issue 79
+ <https://github.com/zopefoundation/zope.testbrowser/issues/79>`_.
+
+
5.4.0 (2019-11-01)
------------------
- Fix a bug where browser.reload() would not follow redirects or raise
exceptions for bad HTTP statuses. See `issue 75
- <https://zopefoundation/zope.testbrowser/issue/75>`_.
+ <https://github.com/zopefoundation/zope.testbrowser/issues/75>`_.
- Add Python 3.8 support. See `issue 80
- <https://github.com/zopefoundation/zope.testbrowser/issue/80>`_.
+ <https://github.com/zopefoundation/zope.testbrowser/issues/80>`_.
5.3.3 (2019-07-02)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zope.testbrowser-5.4.0/docs/narrative.rst
new/zope.testbrowser-5.5.1/docs/narrative.rst
--- old/zope.testbrowser-5.4.0/docs/narrative.rst 2019-11-01
10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/docs/narrative.rst 2019-11-12
10:52:53.000000000 +0100
@@ -844,6 +844,10 @@
['Un', 'Deux']
>>> ctrl.value
['1', '2']
+ >>> ctrl.displayValue = ['Quatre']
+ Traceback (most recent call last):
+ ...
+ ItemNotFoundError: Quatre
- 'controls' gives you a list of the subcontrol objects in the control
(subcontrols are discussed below).
@@ -1074,6 +1078,14 @@
['Third']
>>> ctrl.value
['3']
+ >>> ctrl.displayValue = ['Quatre']
+ Traceback (most recent call last):
+ ...
+ ItemNotFoundError: Quatre
+ >>> ctrl.displayValue = ['Uno', 'Dos']
+ Traceback (most recent call last):
+ ...
+ ItemCountError: single selection list, must set sequence of length 0 or 1
Selection Control (Multi-Valued)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1124,6 +1136,10 @@
>>> browser.getControl(
... name='single-disabled-unvalued-checkbox-value').disabled
True
+ >>> ctrl.displayValue = ['Nonsense']
+ Traceback (most recent call last):
+ ...
+ ItemNotFoundError: Nonsense
Checkbox Control (Single-Valued, Valued)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1166,6 +1182,10 @@
False
>>> ctrl.displayValue
[]
+ >>> ctrl.displayValue = ['Nonsense']
+ Traceback (most recent call last):
+ ...
+ ItemNotFoundError: Nonsense
- Checkbox Control (Multi-Valued)
@@ -1209,6 +1229,10 @@
>>> browser.getControl('Three').selected = False
>>> ctrl.value
[]
+ >>> ctrl.displayValue = ['Four']
+ Traceback (most recent call last):
+ ...
+ ItemNotFoundError: Four
Radio Control
~~~~~~~~~~~~~
@@ -1271,6 +1295,14 @@
['1']
>>> ctrl.displayValue
['Ein']
+ >>> ctrl.displayValue = ['Vier']
+ Traceback (most recent call last):
+ ...
+ ItemNotFoundError: Vier
+ >>> ctrl.displayValue = ['Ein', 'Zwei']
+ Traceback (most recent call last):
+ ...
+ ItemCountError: single selection list, must set sequence of length 0 or 1
The radio control subcontrols were illustrated above.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zope.testbrowser-5.4.0/setup.py
new/zope.testbrowser-5.5.1/setup.py
--- old/zope.testbrowser-5.4.0/setup.py 2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/setup.py 2019-11-12 10:52:53.000000000 +0100
@@ -27,7 +27,7 @@
setup(
name='zope.testbrowser',
- version='5.4.0',
+ version='5.5.1',
url='https://github.com/zopefoundation/zope.testbrowser',
license='ZPL 2.1',
project_urls={
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zope.testbrowser-5.4.0/src/zope/testbrowser/browser.py
new/zope.testbrowser-5.5.1/src/zope/testbrowser/browser.py
--- old/zope.testbrowser-5.4.0/src/zope/testbrowser/browser.py 2019-11-01
10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/src/zope/testbrowser/browser.py 2019-11-12
10:52:53.000000000 +0100
@@ -136,6 +136,7 @@
_response = None
_req_headers = None
_req_content_type = None
+ _req_referrer = None
_history = None
__html = None
@@ -143,6 +144,7 @@
self.timer = Timer()
self.raiseHttpErrors = True
self.handleErrors = True
+ self.followRedirects = True
if wsgi_app is None:
self.testapp = TestbrowserApp(TransparentProxy())
@@ -194,6 +196,8 @@
def make_request(args):
return self.testapp.request(self._response.request)
+ # _req_referrer is left intact, so will be the referrer (if any) of
+ # the request being reloaded.
self._processRequest(self.url, make_request)
def goBack(self, count=1):
@@ -238,7 +242,7 @@
raise ValueError('cookies are already set in `cookies` attribute')
self._req_headers[key] = value
- def open(self, url, data=None):
+ def open(self, url, data=None, referrer=None):
"""See zope.testbrowser.interfaces.IBrowser"""
url = self._absoluteUrl(url)
if data is not None:
@@ -248,11 +252,13 @@
def make_request(args):
return self.testapp.get(url, **args)
+ self._req_referrer = referrer
self._processRequest(url, make_request)
- def post(self, url, data, content_type=None):
+ def post(self, url, data, content_type=None, referrer=None):
if content_type is not None:
self._req_content_type = content_type
+ self._req_referrer = referrer
return self.open(url, data)
def _clickSubmit(self, form, control=None, coord=None):
@@ -267,19 +273,23 @@
def make_request(args):
return self._submit(form, coord=coord, **args)
+ self._req_referrer = self.url
self._processRequest(url, make_request)
def _processRequest(self, url, make_request):
with self._preparedRequest(url) as reqargs:
self._history.add(self._response)
resp = make_request(reqargs)
- remaining_redirects = 100 # infinite loops protection
- while resp.status_int in REDIRECTS and remaining_redirects:
- remaining_redirects -= 1
- url = urlparse.urljoin(url, resp.headers['location'])
- with self._preparedRequest(url) as reqargs:
- resp = self.testapp.get(url, **reqargs)
- assert remaining_redirects > 0, "redirects chain looks infinite"
+ if self.followRedirects:
+ remaining_redirects = 100 # infinite loops protection
+ while resp.status_int in REDIRECTS and remaining_redirects:
+ remaining_redirects -= 1
+ self._req_referrer = url
+ url = urlparse.urljoin(url, resp.headers['location'])
+ with self._preparedRequest(url) as reqargs:
+ resp = self.testapp.get(url, **reqargs)
+ assert remaining_redirects > 0, (
+ "redirects chain looks infinite")
self._setResponse(resp)
self._checkStatus()
@@ -310,6 +320,7 @@
def _setResponse(self, response):
self._response = response
+ self._changed()
def getLink(self, text=None, url=None, id=None, index=0):
"""See zope.testbrowser.interfaces.IBrowser"""
@@ -475,15 +486,14 @@
self._contents = None
self._controls = {}
self.__html = None
- self._req_content_type = None
@contextmanager
def _preparedRequest(self, url):
self.timer.start()
headers = {}
- if self.url:
- headers['Referer'] = self.url
+ if self._req_referrer is not None:
+ headers['Referer'] = self._req_referrer
if self._req_content_type:
headers['Content-Type'] = self._req_content_type
@@ -510,7 +520,7 @@
yield kwargs
- self._changed()
+ self._req_content_type = None
self.timer.stop()
def _absoluteUrl(self, url):
@@ -603,7 +613,7 @@
def click(self):
if self._browser_counter != self.browser._counter:
raise interfaces.ExpiredError
- self.browser.open(self.url)
+ self.browser.open(self.url, referrer=self.browser.url)
@property
def url(self):
@@ -711,7 +721,7 @@
def add_file(self, file, content_type, filename):
if self.type != 'file':
raise TypeError("Can't call add_file on %s controls"
- % self.mech_control.type)
+ % self.type)
if hasattr(file, 'read'):
contents = file.read()
@@ -867,12 +877,19 @@
if isinstance(value, string_types):
value = [value]
+ if not self.multiple and len(value) > 1:
+ raise ItemCountError(
+ "single selection list, must set sequence of length 0 or 1")
values = []
+ found = set()
for key, titles in self._getOptions():
- if any(v in t
- for t in titles
- for v in value):
+ matches = set(v for t in titles for v in value if v in t)
+ if matches:
values.append(key)
+ found.update(matches)
+ for v in value:
+ if v not in found:
+ raise ItemNotFoundError(v)
self.value = values
@property
@@ -989,8 +1006,14 @@
@displayValue.setter
def displayValue(self, value):
+ found = set()
for c in self.controls:
- c.selected = any(v in c.labels for v in value)
+ matches = set(v for v in value if v in c.labels)
+ c.selected = bool(matches)
+ found.update(matches)
+ for v in value:
+ if v not in found:
+ raise ItemNotFoundError(v)
@property
def multiple(self):
@@ -1479,3 +1502,11 @@
class LinkNotFoundError(IndexError):
pass
+
+
+class ItemCountError(ValueError):
+ pass
+
+
+class ItemNotFoundError(ValueError):
+ pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zope.testbrowser-5.4.0/src/zope/testbrowser/interfaces.py
new/zope.testbrowser-5.5.1/src/zope/testbrowser/interfaces.py
--- old/zope.testbrowser-5.4.0/src/zope/testbrowser/interfaces.py
2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/src/zope/testbrowser/interfaces.py
2019-11-12 10:52:53.000000000 +0100
@@ -150,6 +150,16 @@
default=True,
required=True)
+ followRedirects = zope.schema.Bool(
+ title=u"Follow Redirects",
+ description=(u"Describes whether the browser follows redirects. If "
+ u"set to ``True``, it will automatically issue ``GET`` "
+ u"requests for redirect responses; if set to ``False``, "
+ u"it will return redirect responses directly, allowing "
+ u"the caller to make assertions about them."),
+ default=True,
+ required=True)
+
def addHeader(key, value):
"""Adds a header to each HTTP request.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zope.testbrowser-5.4.0/src/zope/testbrowser/tests/test_browser.py
new/zope.testbrowser-5.5.1/src/zope/testbrowser/tests/test_browser.py
--- old/zope.testbrowser-5.4.0/src/zope/testbrowser/tests/test_browser.py
2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/src/zope/testbrowser/tests/test_browser.py
2019-11-12 10:52:53.000000000 +0100
@@ -20,7 +20,11 @@
import doctest
import unittest
-from zope.testbrowser.browser import Browser
+from zope.testbrowser.browser import (
+ Browser,
+ ItemCountError,
+ ItemNotFoundError,
+)
import zope.testbrowser.tests.helper
@@ -131,6 +135,18 @@
self.control.displayValue = []
self.assertEqual(self.control.displayValue, [])
+ def test_displayValue_set_missing_value(self):
+ self.assertEqual(self.control.displayValue, ['Turn'])
+ self.assertRaises(
+ ItemNotFoundError, setattr, self.control, 'displayValue',
+ ['Missing'])
+
+ def test_displayValue_set_too_many_values(self):
+ self.assertEqual(self.control.displayValue, ['Turn'])
+ self.assertRaises(
+ ItemCountError, setattr, self.control, 'displayValue',
+ ['Turn', 'Alternative'])
+
class TestMechRepr(unittest.TestCase):
"""Testing ..browser.*.mechRepr()."""
@@ -189,6 +205,27 @@
self.assertEqual(mech_repr, '<SubmitControl(sub1=Yës)>')
+def test_open_no_referrer(self):
+ """
+ Successive calls to open() do not send a referrer.
+
+ >>> app = YetAnotherTestApp()
+ >>> browser = Browser(wsgi_app=app)
+ >>> app.add_response(b'foo')
+ >>> app.add_response(b'bar')
+ >>> browser.open('http://localhost/')
+ >>> browser.contents
+ 'foo'
+ >>> 'HTTP_REFERER' in app.last_environ
+ False
+ >>> browser.open('http://localhost/')
+ >>> browser.contents
+ 'bar'
+ >>> 'HTTP_REFERER' in app.last_environ
+ False
+ """
+
+
def test_relative_redirect(self):
"""
>>> app = YetAnotherTestApp()
@@ -205,6 +242,29 @@
'found_it'
>>> browser.url
'https://localhost/foo/foundit'
+ >>> app.last_environ['HTTP_REFERER']
+ 'https://localhost/foo/bar'
+ """
+
+
+def test_disable_following_redirects(self):
+ """
+ If followRedirects is False, the browser does not follow redirects.
+
+ >>> app = YetAnotherTestApp()
+ >>> browser = Browser(wsgi_app=app)
+ >>> redirect = ('Location', 'http://localhost/the_thing')
+ >>> app.add_response(b"Moved", headers=[redirect],
+ ... status=302, reason='Found')
+
+ >>> browser.followRedirects = False
+ >>> browser.open('http://localhost/')
+ >>> browser.headers['Status']
+ '302 Found'
+ >>> browser.headers['Location']
+ 'http://localhost/the_thing'
+ >>> 'HTTP_REFERER' in app.last_environ
+ False
"""
@@ -270,6 +330,8 @@
'http://localhost/the_thing'
>>> browser.contents
'The Thing'
+ >>> app.last_environ['HTTP_REFERER']
+ 'http://localhost/'
"""
@@ -355,6 +417,8 @@
'Processed'
>>> app.last_environ['REQUEST_METHOD']
'GET'
+ >>> app.last_environ['HTTP_REFERER']
+ 'http://localhost/submit'
>>> print(app.last_input)
<BLANKLINE>
@@ -366,6 +430,8 @@
'Reloaded'
>>> app.last_environ['REQUEST_METHOD']
'GET'
+ >>> app.last_environ['HTTP_REFERER']
+ 'http://localhost/submit'
>>> print(app.last_input)
<BLANKLINE>
"""
@@ -425,6 +491,52 @@
"""
+def test_goBack_changes_cached_html(self):
+ """
+ goBack() causes the browser to clear its cached parsed HTML, so queries
+ that rely on that use the correct response.
+
+ >>> app = TestApp()
+ >>> browser = Browser(wsgi_app=app)
+ >>> app.set_next_response(b'''\
+ ... <html>
+ ... <head><title>First page</title></head>
+ ... <body><a href="foo">link</a></body>
+ ... </html>
+ ... ''')
+ >>> browser.open('http://localhost/')
+ GET / HTTP/1.1
+ ...
+ >>> browser.title
+ 'First page'
+ >>> browser.getLink('link').url
+ 'http://localhost/foo'
+
+ >>> app.set_next_response(b'''\
+ ... <html>
+ ... <head><title>Second page</title></head>
+ ... <body><a href="bar">link</a></body>
+ ... </html>
+ ... ''')
+ >>> browser.open('http://localhost/')
+ GET / HTTP/1.1
+ ...
+ >>> browser.title
+ 'Second page'
+ >>> browser.getLink('link').url
+ 'http://localhost/bar'
+
+ After going back, queries once again return answers based on the first
+ response.
+
+ >>> browser.goBack()
+ >>> browser.title
+ 'First page'
+ >>> browser.getLink('link').url
+ 'http://localhost/foo'
+ """
+
+
def test_button_without_name(self):
"""
This once blew up.
@@ -1234,6 +1346,31 @@
"""
+def test_link_click_sends_referrer(self):
+ """
+ Clicking on a link sends the previous URL as the referrer.
+
+ >>> app = YetAnotherTestApp()
+ >>> browser = Browser(wsgi_app=app)
+ >>> app.add_response(b'''\
+ ... <html><body>
+ ... <a href="/foo">Foo</a>
+ ... </body</html>
+ ... ''')
+ >>> app.add_response(b'foo')
+ >>> browser.open('http://localhost/')
+ >>> 'HTTP_REFERER' in app.last_environ
+ False
+ >>> browser.getLink(url='/foo').click()
+ >>> browser.contents
+ 'foo'
+ >>> browser.url
+ 'http://localhost/foo'
+ >>> app.last_environ['HTTP_REFERER']
+ 'http://localhost/'
+ """
+
+
def test_controls_without_value(self):
"""
>>> app = TestApp()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zope.testbrowser-5.4.0/src/zope.testbrowser.egg-info/PKG-INFO
new/zope.testbrowser-5.5.1/src/zope.testbrowser.egg-info/PKG-INFO
--- old/zope.testbrowser-5.4.0/src/zope.testbrowser.egg-info/PKG-INFO
2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/src/zope.testbrowser.egg-info/PKG-INFO
2019-11-12 10:52:53.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: zope.testbrowser
-Version: 5.4.0
+Version: 5.5.1
Summary: Programmable browser for functional black-box tests
Home-page: https://github.com/zopefoundation/zope.testbrowser
Author: Zope Corporation and Contributors
@@ -33,15 +33,45 @@
CHANGES
=======
+ 5.5.1 (2019-11-12)
+ ------------------
+
+ - Stop sending a ``Referer`` header when ``browser.open`` or
+ ``browser.post`` is called directly. See `issue 87
+ <https://github.com/zopefoundation/zope.testbrowser/issues/87>`_.
+
+ - Add error checking to the setters for ``ListControl.displayValue``
and
+ ``CheckboxListControl.displayValue``: in line with the old
+ ``mechanize``-based implementation, these will now raise
+ ``ItemNotFoundError`` if any of the given values are not found, or
+ ``ItemCountError`` on trying to set more than one value on a
single-valued
+ control. See `issue 44
+ <https://github.com/zopefoundation/zope.testbrowser/issues/44>`_.
+
+ - Fix AttributeError in `add_file` when trying to add to a control
which is
+ not a file upload.
+
+ 5.5.0 (2019-11-11)
+ ------------------
+
+ - Fix a bug where ``browser.goBack()`` did not invalidate caches, so
+ subsequent queries could use data from the wrong response. See
`issue 83
+ <https://github.com/zopefoundation/zope.testbrowser/issues/83>`_.
+
+ - Support telling the browser not to follow redirects by setting
+ ``Browser.follow_redirects`` to False. See `issue 79
+ <https://github.com/zopefoundation/zope.testbrowser/issues/79>`_.
+
+
5.4.0 (2019-11-01)
------------------
- Fix a bug where browser.reload() would not follow redirects or raise
exceptions for bad HTTP statuses. See `issue 75
- <https://zopefoundation/zope.testbrowser/issue/75>`_.
+ <https://github.com/zopefoundation/zope.testbrowser/issues/75>`_.
- Add Python 3.8 support. See `issue 80
- <https://github.com/zopefoundation/zope.testbrowser/issue/80>`_.
+ <https://github.com/zopefoundation/zope.testbrowser/issues/80>`_.
5.3.3 (2019-07-02)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zope.testbrowser-5.4.0/src/zope.testbrowser.egg-info/requires.txt
new/zope.testbrowser-5.5.1/src/zope.testbrowser.egg-info/requires.txt
--- old/zope.testbrowser-5.4.0/src/zope.testbrowser.egg-info/requires.txt
2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/src/zope.testbrowser.egg-info/requires.txt
2019-11-12 10:52:53.000000000 +0100
@@ -1,17 +1,17 @@
+setuptools
+zope.interface
+zope.schema
+zope.cachedescriptors
+pytz>dev
+WebTest>=2.0.30
BeautifulSoup4
SoupSieve>=1.9.0
WSGIProxy2
-WebTest>=2.0.30
-pytz>dev
-setuptools
six
-zope.cachedescriptors
-zope.interface
-zope.schema
[test]
-mock
zope.testing
+mock
[test_bbb]
zope.testbrowser[test]