| Viewing file:  test__api.py (41.84 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
###############################################################################
 # Copyright (c) 2012 Zope Foundation and Contributors.
 # All Rights Reserved.
 #
 # This software is subject to the provisions of the Zope Public License,
 # Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
 """ Tests for z.c._api
 """
 import unittest
 
 
 class Test_getSiteManager(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component._api import getSiteManager
 return getSiteManager(*args, **kw)
 
 def test_sm_is_IComponentLookup(self):
 from zope.component.interfaces import IComponentLookup
 sm = self._callFUT()
 self.assertTrue(IComponentLookup.providedBy(sm))
 
 def test_sm_is_singleton(self):
 from zope.component.globalregistry import base
 sm = self._callFUT()
 self.assertTrue(sm is base)
 self.assertTrue(self._callFUT() is sm)
 
 def test_w_None(self):
 self.assertTrue(self._callFUT(None) is self._callFUT())
 
 def test_getSiteManager_w_conforming_context(self):
 from zope.component.tests.examples import ConformsToIComponentLookup
 sitemanager = object()
 context = ConformsToIComponentLookup(sitemanager)
 self.assertTrue(self._callFUT(context) is sitemanager)
 
 def test_getSiteManager_w_invalid_context_no_adapter(self):
 from zope.component.interfaces import ComponentLookupError
 self.assertRaises(ComponentLookupError, self._callFUT, object())
 
 def test_getSiteManager_w_invalid_context_w_adapter(self):
 from zope.interface import Interface
 from zope.component.globalregistry import getGlobalSiteManager
 from zope.component.interfaces import IComponentLookup
 gsm = getGlobalSiteManager()
 sm = object()
 def _adapt(x):
 return sm
 gsm.registerAdapter(_adapt, (Interface,), IComponentLookup, '')
 self.assertTrue(self._callFUT(object()) is sm)
 
 
 class Test_getAdapterInContext(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import getAdapterInContext
 return getAdapterInContext(*args, **kw)
 
 def test_miss(self):
 from zope.interface import Interface
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 self.assertRaises(ComponentLookupError,
 self._callFUT, object(), IFoo, context=None)
 
 def test_hit_via_sm(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.interface.registry import Components
 from zope.component import getGlobalSiteManager
 from zope.component.tests.examples import ConformsToIComponentLookup
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 @implementer(IFoo)
 class Global(object):
 def __init__(self, context):
 self.context = context
 @implementer(IFoo)
 class Local(object):
 def __init__(self, context):
 self.context = context
 @implementer(IBar)
 class Bar(object):
 pass
 class Context(ConformsToIComponentLookup):
 def __init__(self, sm):
 self.sitemanager = sm
 gsm = getGlobalSiteManager()
 gsm.registerAdapter(Global, (IBar,), IFoo, '')
 sm1 = Components('sm1', bases=(gsm, ))
 sm1.registerAdapter(Local, (IBar,), IFoo, '')
 bar = Bar()
 adapted = self._callFUT(bar, IFoo, context=Context(sm1))
 self.assertTrue(adapted.__class__ is Local)
 self.assertTrue(adapted.context is bar)
 
 
 class Test_queryAdapterInContext(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import queryAdapterInContext
 return queryAdapterInContext(*args, **kw)
 
 def test_miss(self):
 from zope.interface import Interface
 from zope.component import queryAdapterInContext
 class IFoo(Interface):
 pass
 self.assertEqual(
 queryAdapterInContext(object(), IFoo, context=None), None)
 
 def test_w_object_conforming(self):
 from zope.interface import Interface
 from zope.component import queryAdapterInContext
 class IFoo(Interface):
 pass
 _adapted = object()
 class Foo(object):
 def __conform__(self, iface, default=None):
 if iface is IFoo:
 return _adapted
 return default
 self.assertTrue(
 queryAdapterInContext(Foo(), IFoo, context=None) is _adapted)
 
 def test___conform___raises_TypeError_via_class(self):
 from zope.interface import Interface
 from zope.component import queryAdapterInContext
 class IFoo(Interface):
 pass
 _adapted = object()
 class Foo(object):
 def __conform__(self, iface, default=None):
 if iface is IFoo:
 return _adapted
 return default
 # call via class, triggering TypeError
 self.assertEqual(queryAdapterInContext(Foo, IFoo, context=None), None)
 
 def test___conform___raises_TypeError_via_inst(self):
 from zope.interface import Interface
 from zope.component import queryAdapterInContext
 class IFoo(Interface):
 pass
 _adapted = object()
 class Foo(object):
 def __conform__(self, iface, default=None):
 raise TypeError
 self.assertRaises(TypeError,
 queryAdapterInContext, Foo(), IFoo, context=None)
 
 def test_w_object_implementing(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import queryAdapterInContext
 class IFoo(Interface):
 pass
 @implementer(IFoo)
 class Foo(object):
 pass
 foo = Foo()
 self.assertTrue(
 queryAdapterInContext(foo, IFoo, context=None) is foo)
 
 
 class Test_getAdapter(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import getAdapter
 return getAdapter(*args, **kw)
 
 def test_anonymous_nonesuch(self):
 from zope.interface import Interface
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 self.assertRaises(ComponentLookupError,
 self._callFUT, object(), IFoo, '')
 
 def test_named_nonesuch(self):
 from zope.interface import Interface
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 self.assertRaises(ComponentLookupError,
 self._callFUT, object(), IFoo, 'bar')
 
 def test_anonymous_hit(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IFoo)
 class Baz(object):
 def __init__(self, context):
 self.context = context
 getGlobalSiteManager().registerAdapter(Baz, (IBar,), IFoo, '')
 bar = Bar()
 adapted = self._callFUT(bar, IFoo, '')
 self.assertTrue(adapted.__class__ is Baz)
 self.assertTrue(adapted.context is bar)
 
 def test_anonymous_hit_registered_for_None(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 @implementer(IFoo)
 class Baz(object):
 def __init__(self, context):
 self.context = context
 getGlobalSiteManager().registerAdapter(Baz, (None,), IFoo, '')
 ctx = object()
 adapted = self._callFUT(ctx, IFoo, '')
 self.assertTrue(adapted.__class__ is Baz)
 self.assertTrue(adapted.context is ctx)
 
 def test_named_hit(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IFoo)
 class Baz(object):
 def __init__(self, context):
 self.context = context
 getGlobalSiteManager().registerAdapter(Baz, (IBar,), IFoo, 'named')
 bar = Bar()
 adapted = self._callFUT(bar, IFoo, 'named')
 self.assertTrue(adapted.__class__ is Baz)
 self.assertTrue(adapted.context is bar)
 
 
 class Test_queryAdapter(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import queryAdapter
 return queryAdapter(*args, **kw)
 
 def test_anonymous_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 self.assertEqual(self._callFUT(object(), IFoo, '', '<default>'),
 '<default>')
 
 def test_named_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 self.assertEqual(self._callFUT(object(), IFoo, 'bar'), None)
 
 def test_anonymous_hit(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IFoo)
 class Baz(object):
 def __init__(self, context):
 self.context = context
 getGlobalSiteManager().registerAdapter(Baz, (IBar,), IFoo, '')
 bar = Bar()
 adapted = self._callFUT(bar, IFoo, '')
 self.assertTrue(adapted.__class__ is Baz)
 self.assertTrue(adapted.context is bar)
 
 def test_named_hit(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IFoo)
 class Baz(object):
 def __init__(self, context):
 self.context = context
 getGlobalSiteManager().registerAdapter(Baz, (IBar,), IFoo, 'named')
 bar = Bar()
 adapted = self._callFUT(bar, IFoo, 'named')
 self.assertTrue(adapted.__class__ is Baz)
 self.assertTrue(adapted.context is bar)
 
 def test_nested(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.interface.registry import Components
 from zope.component import getGlobalSiteManager
 from zope.component.tests.examples import ConformsToIComponentLookup
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 @implementer(IFoo)
 class Global(object):
 def __init__(self, context):
 self.context = context
 @implementer(IFoo)
 class Local(object):
 def __init__(self, context):
 self.context = context
 @implementer(IBar)
 class Bar(object):
 pass
 class Context(ConformsToIComponentLookup):
 def __init__(self, sm):
 self.sitemanager = sm
 gsm = getGlobalSiteManager()
 gsm.registerAdapter(Global, (IBar,), IFoo, '')
 sm1 = Components('sm1', bases=(gsm, ))
 sm1.registerAdapter(Local, (IBar,), IFoo, '')
 bar = Bar()
 adapted = self._callFUT(bar, IFoo, '', context=Context(sm1))
 self.assertTrue(adapted.__class__ is Local)
 self.assertTrue(adapted.context is bar)
 
 
 class Test_getMultiAdapter(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import getMultiAdapter
 return getMultiAdapter(*args, **kw)
 
 def test_anonymous_nonesuch(self):
 from zope.interface import Interface
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 self.assertRaises(ComponentLookupError,
 self._callFUT, (object(), object()), IFoo, '')
 
 def test_named_nonesuch(self):
 from zope.interface import Interface
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 self.assertRaises(ComponentLookupError,
 self._callFUT, (object(), object()), IFoo, 'bar')
 
 def test_anonymous_hit(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 class IBaz(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IBaz)
 class Baz(object):
 pass
 @implementer(IFoo)
 class FooAdapter(object):
 def __init__(self, first, second):
 self.first, self.second = first, second
 getGlobalSiteManager().registerAdapter(
 FooAdapter, (IBar, IBaz), IFoo, '')
 bar = Bar()
 baz = Baz()
 adapted = self._callFUT((bar, baz), IFoo, '')
 self.assertTrue(adapted.__class__ is FooAdapter)
 self.assertTrue(adapted.first is bar)
 self.assertTrue(adapted.second is baz)
 
 def test_anonymous_hit_registered_for_None(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 class IBaz(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IFoo)
 class FooAdapter(object):
 def __init__(self, first, second):
 self.first, self.second = first, second
 getGlobalSiteManager().registerAdapter(
 FooAdapter, (IBar, None), IFoo, '')
 bar = Bar()
 baz = object()
 adapted = self._callFUT((bar, baz), IFoo, '')
 self.assertTrue(adapted.__class__ is FooAdapter)
 self.assertTrue(adapted.first is bar)
 self.assertTrue(adapted.second is baz)
 
 def test_named_hit(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 class IBaz(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IBaz)
 class Baz(object):
 pass
 @implementer(IFoo)
 class FooAdapter(object):
 def __init__(self, first, second):
 self.first, self.second = first, second
 getGlobalSiteManager().registerAdapter(
 FooAdapter, (IBar, IBaz), IFoo, 'named')
 bar = Bar()
 baz = Baz()
 adapted = self._callFUT((bar, baz), IFoo, 'named')
 self.assertTrue(adapted.__class__ is FooAdapter)
 self.assertTrue(adapted.first is bar)
 self.assertTrue(adapted.second is baz)
 
 
 class Test_queryMultiAdapter(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import queryMultiAdapter
 return queryMultiAdapter(*args, **kw)
 
 def test_anonymous_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 self.assertEqual(self._callFUT((object(), object()), IFoo, '',
 '<default>'),
 '<default>')
 
 def test_named_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 self.assertEqual(self._callFUT((object(), object()), IFoo, 'bar'),
 None)
 
 def test_anonymous_hit(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 class IBaz(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IBaz)
 class Baz(object):
 pass
 @implementer(IFoo)
 class FooAdapter(object):
 def __init__(self, first, second):
 self.first, self.second = first, second
 getGlobalSiteManager().registerAdapter(
 FooAdapter, (IBar, IBaz), IFoo, '')
 bar = Bar()
 baz = Baz()
 adapted = self._callFUT((bar, baz), IFoo, '')
 self.assertTrue(adapted.__class__ is FooAdapter)
 self.assertTrue(adapted.first is bar)
 self.assertTrue(adapted.second is baz)
 
 def test_named_hit(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 class IBaz(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IBaz)
 class Baz(object):
 pass
 @implementer(IFoo)
 class FooAdapter(object):
 def __init__(self, first, second):
 self.first, self.second = first, second
 getGlobalSiteManager().registerAdapter(
 FooAdapter, (IBar, IBaz), IFoo, 'named')
 bar = Bar()
 baz = Baz()
 adapted = self._callFUT((bar, baz), IFoo, 'named')
 self.assertTrue(adapted.__class__ is FooAdapter)
 self.assertTrue(adapted.first is bar)
 self.assertTrue(adapted.second is baz)
 
 def test_nested(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.interface.registry import Components
 from zope.component import getGlobalSiteManager
 from zope.component.tests.examples import ConformsToIComponentLookup
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 class IBaz(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IBaz)
 class Baz(object):
 pass
 @implementer(IFoo)
 class Global(object):
 def __init__(self, first, second):
 self.first, self.second = first, second
 @implementer(IFoo)
 class Local(object):
 def __init__(self, first, second):
 self.first, self.second = first, second
 class Context(ConformsToIComponentLookup):
 def __init__(self, sm):
 self.sitemanager = sm
 gsm = getGlobalSiteManager()
 gsm.registerAdapter(Global, (IBar, IBaz), IFoo, '')
 sm1 = Components('sm1', bases=(gsm, ))
 sm1.registerAdapter(Local, (IBar, IBaz), IFoo, '')
 bar = Bar()
 baz = Baz()
 adapted = self._callFUT((bar, baz), IFoo, '', context=Context(sm1))
 self.assertTrue(adapted.__class__ is Local)
 self.assertTrue(adapted.first is bar)
 self.assertTrue(adapted.second is baz)
 
 def test_wo_sitemanager(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 class IBaz(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IBaz)
 class Baz(object):
 pass
 class Context(object):
 def __conform__(self, iface):
 raise ComponentLookupError
 bar = Bar()
 baz = Baz()
 adapted = self._callFUT((bar, baz), IFoo, '', context=Context())
 self.assertTrue(adapted is None)
 
 
 class Test_getAdapters(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import getAdapters
 return getAdapters(*args, **kw)
 
 def test_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 self.assertEqual(list(self._callFUT((object(),), IFoo)), [])
 
 def test_hit(self):
 from zope.interface import Interface
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class BarAdapter(object):
 def __init__(self, context):
 self.context = context
 class BazAdapter(object):
 def __init__(self, context):
 self.context = context
 gsm = getGlobalSiteManager()
 gsm.registerAdapter(BarAdapter, (None,), IFoo)
 gsm.registerAdapter(BazAdapter, (None,), IFoo, name='bar')
 tuples = list(self._callFUT((object(),), IFoo))
 self.assertEqual(len(tuples), 2)
 names = [(x, y.__class__.__name__) for x, y in tuples]
 self.assertTrue(('', 'BarAdapter') in names)
 self.assertTrue(('bar', 'BazAdapter') in names)
 
 def test_wo_sitemanager(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 class IBaz(Interface):
 pass
 @implementer(IBar)
 class Bar(object):
 pass
 @implementer(IBaz)
 class Baz(object):
 pass
 class Context(object):
 def __conform__(self, iface):
 raise ComponentLookupError
 bar = Bar()
 baz = Baz()
 adapted = self._callFUT((bar, baz), IFoo, context=Context())
 self.assertEqual(adapted, [])
 
 
 class Test_subscribers(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import subscribers
 return subscribers(*args, **kw)
 
 def test_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 subscribers = self._callFUT((object,), IFoo)
 self.assertEqual(subscribers, [])
 
 def test_hit(self):
 from zope.interface import Interface
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class BarAdapter(object):
 def __init__(self, context):
 self.context = context
 class BazAdapter(object):
 def __init__(self, context):
 self.context = context
 gsm = getGlobalSiteManager()
 gsm.registerSubscriptionAdapter(BarAdapter, (None,), IFoo)
 gsm.registerSubscriptionAdapter(BazAdapter, (None,), IFoo)
 subscribers = self._callFUT((object(),), IFoo)
 self.assertEqual(len(subscribers), 2)
 names = [(x.__class__.__name__) for x in subscribers]
 self.assertTrue('BarAdapter' in names)
 self.assertTrue('BazAdapter' in names)
 
 def test_wo_sitemanager(self):
 from zope.interface import Interface
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 class Context(object):
 def __conform__(self, iface):
 raise ComponentLookupError
 subscribers = self._callFUT((object,), IFoo, context=Context())
 self.assertEqual(subscribers, [])
 
 
 class Test_handle(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import handle
 return handle(*args, **kw)
 
 def test_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 subscribers = self._callFUT((object,), IFoo) #doesn't raise
 
 def test_hit(self):
 from zope.component import getGlobalSiteManager
 from zope.interface import Interface
 from zope.interface import implementer
 class IFoo(Interface):
 pass
 @implementer(IFoo)
 class Foo(object):
 pass
 _called = []
 def _bar(context):
 _called.append('_bar')
 def _baz(context):
 _called.append('_baz')
 gsm = getGlobalSiteManager()
 gsm.registerHandler(_bar, (IFoo,))
 gsm.registerHandler(_baz, (IFoo,))
 self._callFUT(Foo())
 self.assertEqual(len(_called), 2, _called)
 self.assertTrue('_bar' in _called)
 self.assertTrue('_baz' in _called)
 
 
 class Test_getUtility(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component._api import getUtility
 return getUtility(*args, **kw)
 
 def test_anonymous_nonesuch(self):
 from zope.interface import Interface
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 self.assertRaises(ComponentLookupError, self._callFUT, IFoo)
 
 def test_named_nonesuch(self):
 from zope.interface import Interface
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 self.assertRaises(ComponentLookupError,
 self._callFUT, IFoo, name='bar')
 
 def test_anonymous_hit(self):
 from zope.interface import Interface
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 obj = object()
 getGlobalSiteManager().registerUtility(obj, IFoo)
 self.assertTrue(self._callFUT(IFoo) is obj)
 
 def test_named_hit(self):
 from zope.interface import Interface
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 obj = object()
 getGlobalSiteManager().registerUtility(obj, IFoo, name='bar')
 self.assertTrue(self._callFUT(IFoo, name='bar') is obj)
 
 def test_w_conforming_context(self):
 from zope.interface import Interface
 from zope.component import getGlobalSiteManager
 from zope.component.tests.examples import ConformsToIComponentLookup
 class SM(object):
 def __init__(self, obj):
 self._obj = obj
 def queryUtility(self, interface, name, default):
 return self._obj
 class IFoo(Interface):
 pass
 obj1 = object()
 obj2 = object()
 sm = SM(obj2)
 context = ConformsToIComponentLookup(sm)
 getGlobalSiteManager().registerUtility(obj1, IFoo)
 self.assertTrue(self._callFUT(IFoo, context=context) is obj2)
 
 
 class Test_queryUtility(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component._api import queryUtility
 return queryUtility(*args, **kw)
 
 def test_anonymous_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 self.assertEqual(self._callFUT(IFoo), None)
 
 def test_anonymous_nonesuch_w_default(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 obj = object()
 self.assertTrue(self._callFUT(IFoo, default=obj) is obj)
 
 def test_named_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 self.assertEqual(self._callFUT(IFoo, name='bar'), None)
 
 def test_named_nonesuch_w_default(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 obj = object()
 self.assertTrue(self._callFUT(IFoo, name='bar', default=obj) is obj)
 
 def test_anonymous_hit(self):
 from zope.interface import Interface
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 obj = object()
 getGlobalSiteManager().registerUtility(obj, IFoo)
 self.assertTrue(self._callFUT(IFoo) is obj)
 
 def test_named_hit(self):
 from zope.interface import Interface
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 obj = object()
 getGlobalSiteManager().registerUtility(obj, IFoo, name='bar')
 self.assertTrue(self._callFUT(IFoo, name='bar') is obj)
 
 def test_w_conforming_context(self):
 from zope.interface import Interface
 from zope.component import getGlobalSiteManager
 from zope.component.tests.examples import ConformsToIComponentLookup
 class SM(object):
 def __init__(self, obj):
 self._obj = obj
 def queryUtility(self, interface, name, default):
 return self._obj
 class IFoo(Interface):
 pass
 obj1 = object()
 obj2 = object()
 sm = SM(obj2)
 context = ConformsToIComponentLookup(sm)
 getGlobalSiteManager().registerUtility(obj1, IFoo)
 self.assertTrue(self._callFUT(IFoo, context=context) is obj2)
 
 
 class Test_getUtilitiesFor(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component._api import getUtilitiesFor
 return getUtilitiesFor(*args, **kw)
 
 def test_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 self.assertEqual(list(self._callFUT(IFoo)), [])
 
 def test_hit(self):
 from zope.interface import Interface
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 obj = object()
 obj1 = object()
 getGlobalSiteManager().registerUtility(obj, IFoo)
 getGlobalSiteManager().registerUtility(obj1, IFoo, name='bar')
 tuples = list(self._callFUT(IFoo))
 self.assertEqual(len(tuples), 2)
 self.assertTrue(('', obj) in tuples)
 self.assertTrue(('bar', obj1) in tuples)
 
 
 class Test_getAllUtilitiesRegisteredFor(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import getAllUtilitiesRegisteredFor
 return getAllUtilitiesRegisteredFor(*args, **kw)
 
 def test_nonesuch(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 self.assertEqual(list(self._callFUT(IFoo)), [])
 
 def test_hit(self):
 from zope.interface import Interface
 from zope.component import getGlobalSiteManager
 class IFoo(Interface):
 pass
 class IBar(IFoo):
 pass
 obj = object()
 obj1 = object()
 obj2 = object()
 getGlobalSiteManager().registerUtility(obj, IFoo)
 getGlobalSiteManager().registerUtility(obj1, IFoo, name='bar')
 getGlobalSiteManager().registerUtility(obj2, IBar)
 uts = list(self._callFUT(IFoo))
 self.assertEqual(len(uts), 3)
 self.assertTrue(obj in uts)
 self.assertTrue(obj1 in uts)
 self.assertTrue(obj2 in uts)
 
 
 class Test_getNextUtility(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import getNextUtility
 return getNextUtility(*args, **kw)
 
 def test_global(self):
 from zope.component import getGlobalSiteManager
 from zope.component.interface import ComponentLookupError
 gsm = getGlobalSiteManager()
 gutil = _makeMyUtility('global', gsm)
 gsm.registerUtility(gutil, IMyUtility, 'myutil')
 self.assertRaises(ComponentLookupError,
 self._callFUT, gutil, IMyUtility, 'myutil')
 
 def test_nested(self):
 from zope.component import getGlobalSiteManager
 from zope.component.interfaces import IComponentLookup
 from zope.interface.registry import Components
 gsm = getGlobalSiteManager()
 gutil = _makeMyUtility('global', gsm)
 gsm.registerUtility(gutil, IMyUtility, 'myutil')
 sm1 = Components('sm1', bases=(gsm, ))
 sm1_1 = Components('sm1_1', bases=(sm1, ))
 util1 = _makeMyUtility('one', sm1)
 sm1.registerUtility(util1, IMyUtility, 'myutil')
 self.assertTrue(IComponentLookup(util1) is sm1)
 self.assertTrue(self._callFUT(util1, IMyUtility, 'myutil') is gutil)
 util1_1 = _makeMyUtility('one-one', sm1_1)
 sm1_1.registerUtility(util1_1, IMyUtility, 'myutil')
 self.assertTrue(IComponentLookup(util1_1) is sm1_1)
 self.assertTrue(self._callFUT(util1_1, IMyUtility, 'myutil') is util1)
 
 
 class Test_queryNextUtility(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import queryNextUtility
 return queryNextUtility(*args, **kw)
 
 def test_global(self):
 from zope.component import getGlobalSiteManager
 gsm = getGlobalSiteManager()
 gutil = _makeMyUtility('global', gsm)
 gsm.registerUtility(gutil, IMyUtility, 'myutil')
 self.assertEqual(self._callFUT(gutil, IMyUtility, 'myutil'), None)
 
 def test_nested(self):
 from zope.component import getGlobalSiteManager
 from zope.interface.registry import Components
 gsm = getGlobalSiteManager()
 gutil = _makeMyUtility('global', gsm)
 gsm.registerUtility(gutil, IMyUtility, 'myutil')
 sm1 = Components('sm1', bases=(gsm, ))
 sm1_1 = Components('sm1_1', bases=(sm1, ))
 util1 = _makeMyUtility('one', sm1)
 sm1.registerUtility(util1, IMyUtility, 'myutil')
 util1_1 = _makeMyUtility('one-one', sm1_1)
 sm1_1.registerUtility(util1_1, IMyUtility, 'myutil')
 myregistry = Components()
 custom_util = _makeMyUtility('my_custom_util', myregistry)
 myregistry.registerUtility(custom_util, IMyUtility, 'my_custom_util')
 sm1.__bases__ = (myregistry,) + sm1.__bases__
 # Both the ``myregistry`` and global utilities should be available:
 self.assertTrue(self._callFUT(sm1, IMyUtility, 'my_custom_util')
 is custom_util)
 self.assertTrue(self._callFUT(sm1, IMyUtility, 'myutil') is gutil)
 
 def test_wo_sitemanager(self):
 from zope.interface import Interface
 from zope.component.interfaces import ComponentLookupError
 class IFoo(Interface):
 pass
 class Context(object):
 def __conform__(self, iface):
 raise ComponentLookupError
 self.assertEqual(self._callFUT(Context(), IFoo, 'myutil'), None)
 
 
 class Test_createObject(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import createObject
 return createObject(*args, **kw)
 
 def test_miss(self):
 from zope.component.interfaces import ComponentLookupError
 self.assertRaises(ComponentLookupError, self._callFUT, 'nonesuch')
 
 def test_hit(self):
 from zope.component.interfaces import IFactory
 _object = object()
 _factory_called = []
 def _factory(*args, **kw):
 _factory_called.append((args, kw))
 return _object
 class Context(object):
 def __conform__(self, iface):
 return self
 def queryUtility(self, iface, name, default):
 if iface is IFactory and name == 'test':
 return _factory
 return default
 context = Context()
 self.assertTrue(self._callFUT('test', context=context) is _object)
 self.assertEqual(_factory_called, [((), {})])
 
 
 class Test_getFactoryInterfaces(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import getFactoryInterfaces
 return getFactoryInterfaces(*args, **kw)
 
 def test_miss(self):
 from zope.component.interfaces import ComponentLookupError
 self.assertRaises(ComponentLookupError, self._callFUT, 'nonesuch')
 
 def test_hit(self):
 from zope.component.interfaces import IFactory
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 class _Factory(object):
 def getInterfaces(self):
 return [IFoo]
 class Context(object):
 def __conform__(self, iface):
 return self
 def queryUtility(self, iface, name, default):
 if iface is IFactory and name == 'test':
 return _Factory()
 return default
 context = Context()
 self.assertEqual(self._callFUT('test', context=context), [IFoo])
 
 
 class Test_getFactoriesFor(unittest.TestCase):
 
 from zope.component.testing import setUp, tearDown
 
 def _callFUT(self, *args, **kw):
 from zope.component import getFactoriesFor
 return getFactoriesFor(*args, **kw)
 
 def test_no_factories_registered(self):
 from zope.interface import Interface
 class IFoo(Interface):
 pass
 self.assertEqual(list(self._callFUT(IFoo)), [])
 
 def test_w_factory_returning_spec(self):
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.interface import providedBy
 from zope.component.interfaces import IFactory
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 @implementer(IFoo, IBar)
 class _Factory(object):
 def getInterfaces(self):
 return providedBy(self)
 _factory = _Factory()
 class Context(object):
 def __conform__(self, iface):
 return self
 def getUtilitiesFor(self, iface):
 if iface is IFactory:
 return [('test', _factory)]
 self.assertEqual(list(self._callFUT(IFoo, context=Context())),
 [('test', _factory)])
 self.assertEqual(list(self._callFUT(IBar, context=Context())),
 [('test', _factory)])
 
 def test_w_factory_returning_list_of_interfaces(self):
 from zope.interface import Interface
 from zope.component.interfaces import IFactory
 class IFoo(Interface):
 pass
 class IBar(Interface):
 pass
 class _Factory(object):
 def getInterfaces(self):
 return [IFoo, IBar]
 _factory = _Factory()
 class Context(object):
 def __conform__(self, iface):
 return self
 def getUtilitiesFor(self, iface):
 if iface is IFactory:
 return [('test', _factory)]
 self.assertEqual(list(self._callFUT(IFoo, context=Context())),
 [('test', _factory)])
 self.assertEqual(list(self._callFUT(IBar, context=Context())),
 [('test', _factory)])
 
 
 IMyUtility = None
 def _makeMyUtility(name, sm):
 global IMyUtility
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.component.tests.examples import ConformsToIComponentLookup
 
 if IMyUtility is None:
 class IMyUtility(Interface):
 pass
 
 @implementer(IMyUtility)
 class MyUtility(ConformsToIComponentLookup):
 def __init__(self, id, sm):
 self.id = id
 self.sitemanager = sm
 
 return MyUtility(name, sm)
 
 
 def test_suite():
 return unittest.TestSuite((
 unittest.makeSuite(Test_getSiteManager),
 unittest.makeSuite(Test_getAdapterInContext),
 unittest.makeSuite(Test_queryAdapterInContext),
 unittest.makeSuite(Test_getAdapter),
 unittest.makeSuite(Test_queryAdapter),
 unittest.makeSuite(Test_getMultiAdapter),
 unittest.makeSuite(Test_queryMultiAdapter),
 unittest.makeSuite(Test_getAdapters),
 unittest.makeSuite(Test_subscribers),
 unittest.makeSuite(Test_handle),
 unittest.makeSuite(Test_getUtility),
 unittest.makeSuite(Test_queryUtility),
 unittest.makeSuite(Test_getUtilitiesFor),
 unittest.makeSuite(Test_getAllUtilitiesRegisteredFor),
 unittest.makeSuite(Test_getNextUtility),
 unittest.makeSuite(Test_queryNextUtility),
 unittest.makeSuite(Test_createObject),
 unittest.makeSuite(Test_getFactoryInterfaces),
 unittest.makeSuite(Test_getFactoriesFor),
 ))
 
 
 |