Skip to content

Commit

Permalink
Add tests for opening relative urls
Browse files Browse the repository at this point in the history
  • Loading branch information
kedder committed Mar 22, 2013
1 parent ee6d362 commit 3057901
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 2 deletions.
11 changes: 9 additions & 2 deletions src/zope/testbrowser/browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ def url(self):
@property
def isHtml(self):
"""See zope.testbrowser.interfaces.IBrowser"""
return 'html' in self._response.content_type
return self._response and 'html' in self._response.content_type

@property
def lastRequestPystones(self):
Expand Down Expand Up @@ -236,7 +236,7 @@ def addHeader(self, key, value):

def open(self, url, data=None):
"""See zope.testbrowser.interfaces.IBrowser"""
url = str(url)
url = self._absoluteUrl(url)
if data is not None:
make_request = lambda args: self.testapp.post(url, data, **args)
else:
Expand Down Expand Up @@ -480,6 +480,13 @@ def _preparedRequest(self, url):
self.timer.stop()

def _absoluteUrl(self, url):
absolute = url.startswith('http://') or url.startswith('https://')
if absolute:
return url

if not self.isHtml:
raise BrowserStateError("can't fetch relative reference: not viewing any document")

return str(urlparse.urljoin(self._getBaseUrl(), url))

def toStr(self, s):
Expand Down
30 changes: 30 additions & 0 deletions src/zope/testbrowser/tests/test_browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,36 @@ def test_relative_link():
'http://localhost/base?key=value'
"""

def test_relative_open():
"""
Browser is capable of opening relative urls as well as relative links
>>> app = TestApp()
>>> browser = Browser(wsgi_app=app)
>>> app.set_next_response(b'''\
... <html><body>
... <a href="foo">link</a>
... </body></html>
... ''')
>>> browser.open('bar') # doctest: +ELLIPSIS
Traceback (most recent call last):
...
BrowserStateError: can't fetch relative reference: not viewing any document
>>> browser.open('http://localhost/hello/foo') # doctest: +ELLIPSIS
GET /hello/foo HTTP/1.1
...
>>> browser.open('bar') # doctest: +ELLIPSIS
GET /hello/bar HTTP/1.1
...
>>> browser.open('/bar') # doctest: +ELLIPSIS
GET /bar HTTP/1.1
...
"""

def test_suite():
return doctest.DocTestSuite(
Expand Down

0 comments on commit 3057901

Please sign in to comment.