Skip to content

Commit

Permalink
* test coverage 100%
Browse files Browse the repository at this point in the history
 * register default IBreadcrumbs adapter

 * default IBreadcrumbs stops only on virtual host root, not on ISite object
  • Loading branch information
fafhrd91 committed Dec 11, 2007
1 parent cec0e38 commit f6d3003
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 23 deletions.
15 changes: 15 additions & 0 deletions src/z3c/breadcrumb/README.txt
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,18 @@ adapter:
{'url': 'http://127.0.0.1/office',
'activeURL': True,
'name': u'Zope Foundation'}]

>>> breadcrumb.__parent__ is office
True

Default breadcrumbs stops on virtual host root

>>> request._vh_root = office
>>> list(breadcrumb.crumbs)
[{'url': 'http://127.0.0.1', 'activeURL': True, 'name': u'Zope Foundation'}]


Actually i don't understand what is this for? Stephan, Roger?

>>> browser.CustomNameBreadcrumb('office')
<class 'z3c.breadcrumb.browser.CustomNameBreadcrumb('office')'>
21 changes: 13 additions & 8 deletions src/z3c/breadcrumb/browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import zope.location
import zope.traversing.api
import zope.traversing.browser
from zope.proxy import sameProxiedObjects
from zope.publisher.interfaces import NotFound
from zope.publisher import browser
from zope.publisher.interfaces.http import IHTTPRequest
Expand All @@ -32,13 +33,13 @@

class Breadcrumbs(zope.location.Location):
"""Breadcrumbs implementation using IBreadcrum adapters."""

zope.interface.implements(interfaces.IBreadcrumbs)
zope.component.adapts(zope.interface.Interface, IHTTPRequest)

def __init__(self, context, request):
self.context = context
self.request = request
self.__parent__ = context

def __getParent(self):
return getattr(self, '_parent', self.context)
Expand All @@ -50,16 +51,20 @@ def __setParent(self, parent):

@property
def crumbs(self):
request = self.request

objects = []
for obj in ( [self.context] +
list(zope.traversing.api.getParents(self.context)) ):
objects.append(obj)
if ISite.providedBy(obj):
if sameProxiedObjects(obj, request.getVirtualHostRoot()) or \
isinstance(obj, Exception):
break

objects.reverse()
for object in objects:
info = zope.component.getMultiAdapter((object, self.request),
interfaces.IBreadcrumb)
info = zope.component.getMultiAdapter(
(object, self.request), interfaces.IBreadcrumb)
yield {'name': info.name,
'url': info.url,
'activeURL': info.activeURL}
Expand All @@ -80,10 +85,10 @@ def __init__(self, context, request):
@property
def name(self):
"""See interfaces.IBreadcrumb"""
name = getattr(self.context, 'title', None)
if name is None:
name = getattr(self.context, '__name__', None)
if name is None and IContainmentRoot.providedBy(self.context):
name = getattr(self.context, 'title', '')
if not name:
name = getattr(self.context, '__name__', '')
if not name and IContainmentRoot.providedBy(self.context):
name = 'top'
return name

Expand Down
16 changes: 12 additions & 4 deletions src/z3c/breadcrumb/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,17 @@

<!-- Generic IBreadcrumb adapter -->
<adapter
factory="z3c.breadcrumb.browser.GenericBreadcrumb"
trusted="true"
permission="zope.Public"
/>
factory="z3c.breadcrumb.browser.GenericBreadcrumb"
trusted="true"
permission="zope.Public"
/>

<!-- Generic IBreadcrumbs adapter -->
<adapter
factory="z3c.breadcrumb.browser.Breadcrumbs"
provides="z3c.breadcrumb.interfaces.IBreadcrumbs"
trusted="true"
permission="zope.Public"
/>

</configure>
17 changes: 6 additions & 11 deletions src/z3c/breadcrumb/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@
"""
__docformat__ = 'restructuredtext'

import unittest
from zope.testing import doctest
from zope.testing.doctestunit import DocFileSuite
import unittest, doctest
from zope.app.testing import setup
from zope.app.testing import placelesssetup

Expand All @@ -27,17 +25,14 @@ def setUp(test):
site = setup.placefulSetUp(site=True)
test.globs['rootFolder'] = site


def tearDown(test):
setup.placefulTearDown()


def test_suite():
return unittest.TestSuite((
DocFileSuite('README.txt',
setUp=setUp, tearDown=tearDown,
optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS),
))

if __name__ == '__main__':
unittest.main(defaultTest='test_suite')
doctest.DocFileSuite(
'README.txt',
setUp=setUp, tearDown=tearDown,
optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS),
))

0 comments on commit f6d3003

Please sign in to comment.