diff options
Diffstat (limited to 'src/zope/traversing/tests/test_namespacetrversal.py')
-rw-r--r-- | src/zope/traversing/tests/test_namespacetrversal.py | 112 |
1 files changed, 105 insertions, 7 deletions
diff --git a/src/zope/traversing/tests/test_namespacetrversal.py b/src/zope/traversing/tests/test_namespacetrversal.py index bde36c3..0fdd4db 100644 --- a/src/zope/traversing/tests/test_namespacetrversal.py +++ b/src/zope/traversing/tests/test_namespacetrversal.py @@ -14,12 +14,110 @@ """Traversal Namespace Tests """ import re -from unittest import main +import unittest from doctest import DocTestSuite + +from zope import interface +from zope import component +from zope.location.interfaces import LocationError +from zope.traversing import namespace + +from zope.component.testing import PlacelessSetup from zope.component.testing import setUp, tearDown from zope.testing.renormalizing import RENormalizing +class TestFunctions(unittest.TestCase): + + def test_getResource_not_found(self): + with self.assertRaises(LocationError): + namespace.getResource(None, '', None) + + +class TestAcquire(unittest.TestCase): + + def test_excessive_depth_on_path_extension(self): + from zope.traversing.interfaces import ITraversable + from zope.traversing.namespace import ExcessiveDepth + + @interface.implementer(ITraversable) + class Context(object): + + max_call_count = 200 + + def traverse(self, name, path): + if self.max_call_count: + path.append("I added something") + self.max_call_count -= 1 + + acq = namespace.acquire(Context(), None) + with self.assertRaises(ExcessiveDepth): + acq.traverse(None, None) + + +class TestEtc(PlacelessSetup, unittest.TestCase): + + def test_traverse_non_site_name(self): + with self.assertRaises(LocationError) as ctx: + namespace.etc(None, None).traverse('foobar', ()) + + ex = ctx.exception + self.assertEqual((None, 'foobar'), ex.args) + + def test_traverse_site_no_manager(self): + test = self + class Context(object): + def __getattribute__(self, name): + test.assertEqual(name, 'getSiteManager') + return None + + context = Context() + with self.assertRaises(LocationError) as ctx: + namespace.etc(context, None).traverse('site', ()) + + ex = ctx.exception + self.assertEqual((context, 'site'), ex.args) + + def test_traverse_site_lookup_error(self): + class Context(object): + called = False + def getSiteManager(self): + self.called = True + from zope.component import ComponentLookupError + raise ComponentLookupError() + + context = Context() + with self.assertRaises(LocationError) as ctx: + namespace.etc(context, None).traverse('site', ()) + + ex = ctx.exception + self.assertEqual((context, 'site'), ex.args) + self.assertTrue(context.called) + + def test_traverse_utility(self): + from zope.traversing.interfaces import IEtcNamespace + component.provideUtility(self, provides=IEtcNamespace, name='my etc name') + + result = namespace.etc(None, None).traverse('my etc name', ()) + self.assertIs(result, self) + + +class TestView(unittest.TestCase): + + def test_not_found(self): + with self.assertRaises(LocationError) as ctx: + namespace.view(None, None).traverse('name', ()) + + ex = ctx.exception + self.assertEqual((None, 'name'), ex.args) + + +class TestVh(unittest.TestCase): + + def test_invalid_vh(self): + with self.assertRaisesRegexp(ValueError, + 'Vhost directive should have the form'): + namespace.vh(None, None).traverse(u'invalid name', ()) def test_suite(): checker = RENormalizing([ @@ -28,9 +126,9 @@ def test_suite(): "LocationError"), ]) - return DocTestSuite('zope.traversing.namespace', - setUp=setUp, tearDown=tearDown, - checker=checker) - -if __name__ == '__main__': - main(defaultTest='test_suite') + suite = unittest.defaultTestLoader.loadTestsFromName(__name__) + suite.addTest(DocTestSuite( + 'zope.traversing.namespace', + setUp=setUp, tearDown=tearDown, + checker=checker)) + return suite |