shell bypass 403
曾与蒿藜同雨露,한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.终随松柏到冰霜.かつては雑草やヨモギと共に雨や露を分かち合っていたが、今では松やヒノキと共に霜や雪に耐えている。曾与蒿藜同雨露,Once sharing rain and dew with weeds and wormwood, now enduring frost and snow with pines and cypresses.终随松柏到冰霜.曾与蒿藜同雨露한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.,终随松柏到冰霜.譖セ荳手珍阯懷酔髮ィ髴イ�檎サ磯囂譚セ譟丞芦蜀ー髴�曾与蒿藜同雨露,鏇句笌钂胯棞鍚岄洦闇诧紝缁堥殢鏉炬煆鍒板啺闇�终随松柏到冰霜.曾与蒿藜同雨露,한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.终随松柏到冰霜.曾与蒿藜同雨露,终随松柏到冰霜.
##############################################################################
#
# 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),
))