diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-06-29 02:49:30 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-06-29 02:49:30 +0000 |
| commit | 2869fc2f7f8fa9a4230d66859f232fe2e764103f (patch) | |
| tree | f947f4ac308595f115966b47eaea2594697c00c3 /repoze/bfg/tests | |
| parent | e1622d3f023e1fe5c6a580668ec3f5ecab9c0a37 (diff) | |
| download | pyramid-2869fc2f7f8fa9a4230d66859f232fe2e764103f.tar.gz pyramid-2869fc2f7f8fa9a4230d66859f232fe2e764103f.tar.bz2 pyramid-2869fc2f7f8fa9a4230d66859f232fe2e764103f.zip | |
Merge pkg_resource_overrides branch.
Diffstat (limited to 'repoze/bfg/tests')
| -rw-r--r-- | repoze/bfg/tests/test_resource.py | 237 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_templating.py | 3 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_zcml.py | 107 |
3 files changed, 341 insertions, 6 deletions
diff --git a/repoze/bfg/tests/test_resource.py b/repoze/bfg/tests/test_resource.py new file mode 100644 index 000000000..176a07049 --- /dev/null +++ b/repoze/bfg/tests/test_resource.py @@ -0,0 +1,237 @@ +import unittest +from repoze.bfg.testing import cleanUp + +class TestOverrideProvider(unittest.TestCase): + def setUp(self): + cleanUp() + + def tearDown(self): + cleanUp() + + def _getTargetClass(self): + from repoze.bfg.resource import OverrideProvider + return OverrideProvider + + def _makeOne(self, module): + klass = self._getTargetClass() + return klass(module) + + def _registerOverrides(self, overrides, name='repoze.bfg.tests'): + from repoze.bfg.interfaces import IPackageOverrides + from zope.component import getSiteManager + sm = getSiteManager() + sm.registerUtility(overrides, IPackageOverrides, name=name) + + def test_get_resource_filename_no_overrides(self): + import os + resource_name = 'test_resource.py' + import repoze.bfg.tests + provider = self._makeOne(repoze.bfg.tests) + here = os.path.dirname(os.path.abspath(__file__)) + expected = os.path.join(here, resource_name) + result = provider.get_resource_filename(None, resource_name) + self.assertEqual(result, expected) + + def test_get_resource_stream_no_overrides(self): + import os + resource_name = 'test_resource.py' + import repoze.bfg.tests + provider = self._makeOne(repoze.bfg.tests) + here = os.path.dirname(os.path.abspath(__file__)) + expected = open(os.path.join(here, resource_name)).read() + result = provider.get_resource_stream(None, resource_name) + self.assertEqual(result.read(), expected) + + def test_get_resource_string_no_overrides(self): + import os + resource_name = 'test_resource.py' + import repoze.bfg.tests + provider = self._makeOne(repoze.bfg.tests) + here = os.path.dirname(os.path.abspath(__file__)) + expected = open(os.path.join(here, resource_name)).read() + result = provider.get_resource_string(None, resource_name) + self.assertEqual(result, expected) + + def test_get_resource_filename_override_returns_None(self): + overrides = DummyOverrides(None) + self._registerOverrides(overrides) + import os + resource_name = 'test_resource.py' + import repoze.bfg.tests + provider = self._makeOne(repoze.bfg.tests) + here = os.path.dirname(os.path.abspath(__file__)) + expected = os.path.join(here, resource_name) + result = provider.get_resource_filename(None, resource_name) + self.assertEqual(result, expected) + + def test_get_resource_stream_override_returns_None(self): + overrides = DummyOverrides(None) + self._registerOverrides(overrides) + import os + resource_name = 'test_resource.py' + import repoze.bfg.tests + provider = self._makeOne(repoze.bfg.tests) + here = os.path.dirname(os.path.abspath(__file__)) + expected = os.path.join(here, resource_name) + result = provider.get_resource_filename(None, resource_name) + self.assertEqual(result, expected) + + def test_get_resource_string_override_returns_None(self): + overrides = DummyOverrides(None) + self._registerOverrides(overrides) + import os + resource_name = 'test_resource.py' + import repoze.bfg.tests + provider = self._makeOne(repoze.bfg.tests) + here = os.path.dirname(os.path.abspath(__file__)) + expected = os.path.join(here, resource_name) + result = provider.get_resource_filename(None, resource_name) + self.assertEqual(result, expected) + + def test_get_resource_filename_override_returns_value(self): + overrides = DummyOverrides('value') + import repoze.bfg.tests + self._registerOverrides(overrides) + provider = self._makeOne(repoze.bfg.tests) + result = provider.get_resource_filename(None, 'test_resource.py') + self.assertEqual(result, 'value') + + def test_get_resource_stream_override_returns_value(self): + overrides = DummyOverrides('value') + import repoze.bfg.tests + self._registerOverrides(overrides) + provider = self._makeOne(repoze.bfg.tests) + result = provider.get_resource_stream(None, 'test_resource.py') + self.assertEqual(result, 'value') + + def test_get_resource_string_override_returns_value(self): + overrides = DummyOverrides('value') + import repoze.bfg.tests + self._registerOverrides(overrides) + provider = self._makeOne(repoze.bfg.tests) + result = provider.get_resource_string(None, 'test_resource.py') + self.assertEqual(result, 'value') + +class TestPackageOverrides(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.resource import PackageOverrides + return PackageOverrides + + def _makeOne(self, package): + klass = self._getTargetClass() + return klass(package) + + def test_insert_directory(self): + from repoze.bfg.resource import DirectoryOverride + po = self._makeOne('package') + po.overrides= [None] + po.insert('foo/', 'package', 'bar/') + self.assertEqual(len(po.overrides), 2) + override = po.overrides[0] + self.assertEqual(override.__class__, DirectoryOverride) + + def test_insert_file(self): + from repoze.bfg.resource import FileOverride + po = self._makeOne('package') + po.overrides= [None] + po.insert('foo.pt', 'package', 'bar.pt') + self.assertEqual(len(po.overrides), 2) + override = po.overrides[0] + self.assertEqual(override.__class__, FileOverride) + + def test_search_path(self): + overrides = [ DummyOverride(None), DummyOverride(('package', 'name'))] + po = self._makeOne('package') + po.overrides= overrides + self.assertEqual(list(po.search_path('whatever')), + [('package', 'name')]) + + def test_get_filename(self): + import os + overrides = [ DummyOverride(None), DummyOverride( + ('repoze.bfg.tests', 'test_resource.py'))] + po = self._makeOne('package') + po.overrides= overrides + here = os.path.dirname(os.path.abspath(__file__)) + expected = os.path.join(here, 'test_resource.py') + self.assertEqual(po.get_filename('whatever'), expected) + + def test_get_stream(self): + import os + overrides = [ DummyOverride(None), DummyOverride( + ('repoze.bfg.tests', 'test_resource.py'))] + po = self._makeOne('package') + po.overrides= overrides + here = os.path.dirname(os.path.abspath(__file__)) + expected = open(os.path.join(here, 'test_resource.py')).read() + self.assertEqual(po.get_stream('whatever').read(), expected) + + def test_get_string(self): + import os + overrides = [ DummyOverride(None), DummyOverride( + ('repoze.bfg.tests', 'test_resource.py'))] + po = self._makeOne('package') + po.overrides= overrides + here = os.path.dirname(os.path.abspath(__file__)) + expected = open(os.path.join(here, 'test_resource.py')).read() + self.assertEqual(po.get_string('whatever'), expected) + + +class TestDirectoryOverride(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.resource import DirectoryOverride + return DirectoryOverride + + def _makeOne(self, path, package, prefix): + klass = self._getTargetClass() + return klass(path, package, prefix) + + def test_it_match(self): + o = self._makeOne('foo/', 'package', 'bar/') + result = o('foo/something.pt') + self.assertEqual(result, ('package', 'bar/something.pt')) + + def test_it_no_match(self): + o = self._makeOne('foo/', 'package', 'bar/') + result = o('baz/notfound.pt') + self.assertEqual(result, None) + + +class TestFileOverride(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.resource import FileOverride + return FileOverride + + def _makeOne(self, path, package, prefix): + klass = self._getTargetClass() + return klass(path, package, prefix) + + def test_it_match(self): + o = self._makeOne('foo.pt', 'package', 'bar.pt') + result = o('foo.pt') + self.assertEqual(result, ('package', 'bar.pt')) + + def test_it_no_match(self): + o = self._makeOne('foo.pt', 'package', 'bar.pt') + result = o('notfound.pt') + self.assertEqual(result, None) + + + +class DummyOverride: + def __init__(self, result): + self.result = result + + def __call__(self, resource_name): + return self.result + + +class DummyOverrides: + def __init__(self, result): + self.result = result + + def get_filename(self, resource_name): + return self.result + + get_stream = get_string = get_filename + diff --git a/repoze/bfg/tests/test_templating.py b/repoze/bfg/tests/test_templating.py index 57c6d0866..3ae0483d9 100644 --- a/repoze/bfg/tests/test_templating.py +++ b/repoze/bfg/tests/test_templating.py @@ -54,7 +54,6 @@ class TestRendererFromCache(unittest.TestCase): def test_relpath_alreadyregistered(self): from repoze.bfg.interfaces import ITemplateRenderer - import os from repoze.bfg.tests import test_templating module_name = test_templating.__name__ relpath = 'test_templating.py' @@ -65,7 +64,7 @@ class TestRendererFromCache(unittest.TestCase): self.failUnless(result is renderer) def test_relpath_notyetregistered(self): - from repoze.bfg.interfaces import ITemplateRenderer + from repoze.bfg import resource import os from repoze.bfg.tests import test_templating module_name = test_templating.__name__ diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index 1a0ee3c3f..875628f5f 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -804,8 +804,6 @@ class TestRouteDirective(unittest.TestCase): self.assertEqual(route_args, ('name', 'path', None,)) def test_without_view(self): - from zope.component import getUtility - from repoze.bfg.interfaces import IRequestFactories from repoze.bfg.zcml import connect_route context = DummyContext() @@ -827,8 +825,6 @@ class TestRouteDirective(unittest.TestCase): self.assertEqual(route_args, ('name','path', None)) def test_with_request_type(self): - from zope.component import getUtility - from repoze.bfg.interfaces import IRequestFactories from repoze.bfg.zcml import connect_route context = DummyContext() @@ -849,6 +845,94 @@ class TestRouteDirective(unittest.TestCase): self.assertEqual(route_discriminator[3], 'GET') self.assertEqual(route_args, ('name','path', None)) +class TestResourceDirective(unittest.TestCase): + def setUp(self): + cleanUp() + + def tearDown(self): + cleanUp() + + def _callFUT(self, *arg, **kw): + from repoze.bfg.zcml import resource + return resource(*arg, **kw) + + def test_samename(self): + from zope.configuration.exceptions import ConfigurationError + context = DummyContext() + self.assertRaises(ConfigurationError, self._callFUT, context, 'a', 'a') + + def test_override_directory_with_file(self): + from zope.configuration.exceptions import ConfigurationError + context = DummyContext() + self.assertRaises(ConfigurationError, self._callFUT, context, 'a/', 'a') + + def test_override_file_with_directory(self): + from zope.configuration.exceptions import ConfigurationError + context = DummyContext() + self.assertRaises(ConfigurationError, self._callFUT, context, 'a', 'a/') + + def test_no_colons(self): + from repoze.bfg.zcml import _override + context = DummyContext() + self._callFUT(context, 'a', 'b') + actions = context.actions + self.assertEqual(len(actions), 1) + action = actions[0] + self.assertEqual(action['callable'], _override) + self.assertEqual(action['discriminator'], None) + self.assertEqual(action['args'], + ('IDummy', '', 'IDummy', '')) + + def test_with_colons(self): + from repoze.bfg.zcml import _override + context = DummyContext() + self._callFUT(context, 'a:foo.pt', 'b:foo.pt') + actions = context.actions + self.assertEqual(len(actions), 1) + action = actions[0] + self.assertEqual(action['callable'], _override) + self.assertEqual(action['discriminator'], None) + self.assertEqual(action['args'], + ('IDummy', 'foo.pt', 'IDummy', 'foo.pt')) + +class Test_OverrideFunction(unittest.TestCase): + def setUp(self): + cleanUp() + + def tearDown(self): + cleanUp() + + def _callFUT(self, *arg, **kw): + from repoze.bfg.zcml import _override + return _override(*arg, **kw) + + def _registerOverrides(self, overrides, package_name): + from repoze.bfg.interfaces import IPackageOverrides + from zope.component import getSiteManager + sm = getSiteManager() + sm.registerUtility(overrides, IPackageOverrides, name=package_name) + + def test_overrides_not_yet_registered(self): + from repoze.bfg.resource import OverrideProvider + from zope.component import queryUtility + from repoze.bfg.interfaces import IPackageOverrides + resources = DummyPackageResources() + self._callFUT('package', 'path', 'opackage', 'oprefix', + PackageOverrides=DummyOverrides, pkg_resources=resources) + overrides = queryUtility(IPackageOverrides, name='package') + self.assertEqual(overrides.package, 'package') + self.assertEqual(overrides.inserted, [('path', 'opackage', 'oprefix')]) + self.assertEqual(len(resources.registered), 1) + resource = resources.registered[0] + self.assertEqual(resource[0], type(None)) + self.assertEqual(resource[1], OverrideProvider) + + def test_overrides_already_registered(self): + overrides = DummyOverrides('package') + self._registerOverrides(overrides, 'package') + self._callFUT('package', 'path', 'opackage', 'oprefix') + self.assertEqual(overrides.inserted, [('path', 'opackage', 'oprefix')]) + class TestZCMLConfigure(unittest.TestCase): i = 0 def _callFUT(self, path, package): @@ -1244,3 +1328,18 @@ class DummyRequest: def get_response(self, app): return app +class DummyOverrides: + def __init__(self, package): + self.package = package + self.inserted = [] + + def insert(self, path, package, prefix): + self.inserted.append((path, package, prefix)) + +class DummyPackageResources: + def __init__(self): + self.registered = [] + + def register_loader_type(self, typ, provider): + self.registered.append((typ, provider)) + |
