From 2869fc2f7f8fa9a4230d66859f232fe2e764103f Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Mon, 29 Jun 2009 02:49:30 +0000 Subject: Merge pkg_resource_overrides branch. --- repoze/bfg/tests/test_resource.py | 237 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 repoze/bfg/tests/test_resource.py (limited to 'repoze/bfg/tests/test_resource.py') 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 + -- cgit v1.2.3