diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-01-16 18:58:16 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-01-16 18:58:16 +0000 |
| commit | 5a7f9a4d57424f14a1e072cc06b6bf7a191a7d08 (patch) | |
| tree | b44448198ddf8031b3e09b83dd731f2ae1d6623a /repoze/bfg/tests/test_zcml.py | |
| parent | 4856cc54bcd5feb97db49f1cca923afb01c0bf02 (diff) | |
| download | pyramid-5a7f9a4d57424f14a1e072cc06b6bf7a191a7d08.tar.gz pyramid-5a7f9a4d57424f14a1e072cc06b6bf7a191a7d08.tar.bz2 pyramid-5a7f9a4d57424f14a1e072cc06b6bf7a191a7d08.zip | |
Features
--------
- The functionality of ``repoze.bfg.convention`` has been merged into
the core. Applications which make use of ``repoze.bfg.convention``
will continue to work indefinitely, but it is recommended that apps
stop depending upon it. To do so, substitute imports of
``repoze.bfg.convention.bfg_view`` with imports of
``repoze.bfg.view.bfg_view``, and change the stanza in ZCML from
``<convention package=".">`` to ``<grok package=".">``. As a result
of the merge, bfg has grown a new dependency: ``martian``.
- View functions which use the pushpage decorator are now pickleable
(meaning their use won't prevent a ``configure.zcml.cache`` file
from being written to disk).
Implementation Changes
----------------------
- The ``wsgiapp`` decorator now uses ``webob.Request.get_response`` to
do its work rather than relying on howgrown WSGI code.
Diffstat (limited to 'repoze/bfg/tests/test_zcml.py')
| -rw-r--r-- | repoze/bfg/tests/test_zcml.py | 142 |
1 files changed, 118 insertions, 24 deletions
diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index 260a73c02..1d7f42098 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -229,28 +229,6 @@ class TestViewDirective(unittest.TestCase): self.assertEqual(regadapt['args'][5], None) -class TestFixtureApp(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def test_registry_actions_can_be_pickled_and_unpickled(self): - import repoze.bfg.tests.fixtureapp as package - from zope.configuration import config - from zope.configuration import xmlconfig - context = config.ConfigurationMachine() - xmlconfig.registerCommonDirectives(context) - context.package = package - xmlconfig.include(context, 'configure.zcml', package) - context.execute_actions(clear=False) - actions = context.actions - import cPickle - dumped = cPickle.dumps(actions, -1) - new = cPickle.loads(dumped) - self.assertEqual(len(actions), len(new)) - class TestZCMLPickling(unittest.TestCase): i = 0 def setUp(self): @@ -456,8 +434,121 @@ class TestZCMLPickling(unittest.TestCase): cPickle.dump(actions, open(picklename, 'wb')) self.assertEqual(True, zcml_configure('configure.zcml', self.module)) -class Dummy: - pass +class TestRemove(unittest.TestCase): + def _callFUT(self, name, os): + from repoze.bfg.zcml import remove + return remove(name, os) + + def test_fail(self): + class FakeOS: + def remove(self, name): + raise IOError('foo') + self.assertEqual(self._callFUT('name', FakeOS()), False) + + def test_succeed(self): + class FakeOS: + def remove(self, name): + pass + self.assertEqual(self._callFUT('name', FakeOS()), True) + +class TestBFGViewFunctionGrokker(unittest.TestCase): + def setUp(self): + cleanUp() + + def tearDown(self): + cleanUp() + + def _getTargetClass(self): + from repoze.bfg.zcml import BFGViewFunctionGrokker + return BFGViewFunctionGrokker + + def _makeOne(self, *arg, **kw): + return self._getTargetClass()(*arg, **kw) + + def test_grok_is_bfg_view(self): + from repoze.bfg.interfaces import IRequest + from zope.interface import Interface + grokker = self._makeOne() + class obj: + pass + obj.__is_bfg_view__ = True + obj.__permission__ = 'foo' + obj.__for__ = Interface + obj.__view_name__ = 'foo.html' + obj.__request_type__ = IRequest + context = DummyContext() + result = grokker.grok('name', obj, context=context) + self.assertEqual(result, True) + actions = context.actions + self.assertEqual(len(actions), 2) + + def test_grok_is_not_bfg_view(self): + grokker = self._makeOne() + class obj: + pass + context = DummyContext() + result = grokker.grok('name', obj, context=context) + self.assertEqual(result, False) + actions = context.actions + self.assertEqual(len(actions), 0) + +class TestZCMLGrokFunction(unittest.TestCase): + def setUp(self): + cleanUp() + + def tearDown(self): + cleanUp() + + def _callFUT(self, context, package, martian): + from repoze.bfg.zcml import grok + return grok(context, package, martian) + + def test_it(self): + martian = DummyMartianModule() + module_grokker = DummyModuleGrokker() + dummy_module = DummyModule() + from repoze.bfg.zcml import exclude + self._callFUT(None, dummy_module, martian) + self.assertEqual(martian.name, 'dummy') + self.assertEqual(len(martian.module_grokker.registered), 1) + self.assertEqual(martian.context, None) + self.assertEqual(martian.exclude_filter, exclude) + +class TestExcludeFunction(unittest.TestCase): + def setUp(self): + cleanUp() + + def tearDown(self): + cleanUp() + + def _callFUT(self, name): + from repoze.bfg.zcml import exclude + return exclude(name) + + def test_it(self): + self.assertEqual(self._callFUT('.foo'), True) + self.assertEqual(self._callFUT('foo'), False) + +class DummyModule: + __name__ = 'dummy' + +class DummyModuleGrokker: + def __init__(self): + self.registered = [] + + def register(self, other): + self.registered.append(other) + +class DummyMartianModule: + def grok_dotted_name(self, name, grokker, context, exclude_filter=None): + self.name = name + self.context = context + self.exclude_filter = exclude_filter + return True + + def ModuleGrokker(self): + self.module_grokker = DummyModuleGrokker() + return self.module_grokker class DummyContext: def __init__(self): @@ -471,6 +562,9 @@ class DummyContext: 'args':args} ) +class Dummy: + pass + from zope.interface import Interface class IDummy(Interface): pass |
