%PDF- %PDF-
Direktori : /lib/python3/dist-packages/zope/component/tests/ |
Current File : //lib/python3/dist-packages/zope/component/tests/test__api.py |
############################################################################## # # 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), ))