summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-07-14 08:54:26 +0000
committerChris McDonough <chrism@agendaless.com>2008-07-14 08:54:26 +0000
commitc0c663bd97e4c7fe1d9971fc8070791a148f106f (patch)
tree2ea114deb5b2cc32d9b535666707b4957f2dbef8 /repoze/bfg/tests
parent85427fa0479aefd59bd55dca397b9a36277edade (diff)
downloadpyramid-c0c663bd97e4c7fe1d9971fc8070791a148f106f.tar.gz
pyramid-c0c663bd97e4c7fe1d9971fc8070791a148f106f.tar.bz2
pyramid-c0c663bd97e4c7fe1d9971fc8070791a148f106f.zip
And, just to maximally confuse Paul, come full circle, and don't require that the template be spelled on the class, while still allowing us to pickle the registry actions.
Diffstat (limited to 'repoze/bfg/tests')
-rw-r--r--repoze/bfg/tests/fixtureapp/configure.zcml1
-rw-r--r--repoze/bfg/tests/fixtureapp/views.py4
-rw-r--r--repoze/bfg/tests/test_zcml.py84
3 files changed, 82 insertions, 7 deletions
diff --git a/repoze/bfg/tests/fixtureapp/configure.zcml b/repoze/bfg/tests/fixtureapp/configure.zcml
index f08cd58ad..99d0708aa 100644
--- a/repoze/bfg/tests/fixtureapp/configure.zcml
+++ b/repoze/bfg/tests/fixtureapp/configure.zcml
@@ -12,6 +12,7 @@
<bfg:view
for=".models.IFixture"
+ factory=".views.FixtureTemplateView"
template="templates/fixture.pt"
permission="repoze.view"
name="fixture.html"
diff --git a/repoze/bfg/tests/fixtureapp/views.py b/repoze/bfg/tests/fixtureapp/views.py
index b9b9fc7d9..36fe07cc6 100644
--- a/repoze/bfg/tests/fixtureapp/views.py
+++ b/repoze/bfg/tests/fixtureapp/views.py
@@ -1,3 +1,5 @@
+from repoze.bfg.view import TemplateView
+
class FixtureView(object):
def __init__(self, context, request):
self.context = context
@@ -6,3 +8,5 @@ class FixtureView(object):
def __call__(self):
pass
+class FixtureTemplateView(TemplateView):
+ pass
diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py
index 11f392f78..7aaf6e4c3 100644
--- a/repoze/bfg/tests/test_zcml.py
+++ b/repoze/bfg/tests/test_zcml.py
@@ -100,34 +100,104 @@ class TestViewDirective(unittest.TestCase, PlacelessSetup):
self.assertEqual(regadapt['args'][4], '')
self.assertEqual(regadapt['args'][5], None)
- def test_template_and_factory_raises(self):
+ def test_template_and_factory(self):
f = self._getFUT()
context = DummyContext()
- from zope.configuration.exceptions import ConfigurationError
- self.assertRaises(ConfigurationError, f, context, 'repoze.view', None,
- Dummy, 'minimal.html', 'minimal.pt')
+ class IFoo:
+ pass
+ class DummyView:
+ pass
+ f(context, 'repoze.view', IFoo, factory=DummyView,
+ template='minimal.pt')
+ actions = context.actions
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IViewFactory
+ from zope.component.zcml import handler
+ from zope.component.interface import provideInterface
+
+ self.assertEqual(len(actions), 3)
+
+ regutil_discriminator = ('utility', IView, context.path('minimal.pt'))
+ regutil = actions[0]
+ self.assertEqual(regutil['discriminator'], regutil_discriminator)
+ self.assertEqual(regutil['callable'], handler)
+ self.assertEqual(regutil['args'][0], 'registerUtility')
+ self.assertEqual(regutil['args'][1].template.filename,
+ context.path('minimal.pt'))
+ self.assertEqual(regutil['args'][2], IView)
+ self.assertEqual(regutil['args'][3], context.path('minimal.pt'))
+
+ provide = actions[1]
+ self.assertEqual(provide['discriminator'], None)
+ self.assertEqual(provide['callable'], provideInterface)
+ self.assertEqual(provide['args'][0], '')
+ self.assertEqual(provide['args'][1], IFoo)
+
+ regadapt = actions[2]
+ regadapt_discriminator = ('view', IFoo, '', IRequest, IViewFactory)
+ self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
+ self.assertEqual(regadapt['callable'], handler)
+ self.assertEqual(regadapt['args'][0], 'registerAdapter')
+ self.assertEqual(regadapt['args'][1].template,
+ context.path('minimal.pt'))
+ self.assertEqual(regadapt['args'][2], (IFoo, IRequest))
+ self.assertEqual(regadapt['args'][3], IViewFactory)
+ self.assertEqual(regadapt['args'][4], '')
+ self.assertEqual(regadapt['args'][5], None)
class TestTemplateViewFactory(unittest.TestCase):
def _getTargetClass(self):
from repoze.bfg.zcml import TemplateViewFactory
return TemplateViewFactory
- def _makeOne(self, template):
- return self._getTargetClass()(template)
+ def _makeOne(self, template, base=None):
+ return self._getTargetClass()(template, base)
def test_instance_conforms_to_IViewFactory(self):
from zope.interface.verify import verifyObject
from repoze.bfg.interfaces import IViewFactory
verifyObject(IViewFactory, self._makeOne('a'))
- def test_call(self):
+ def test_call_templateonly(self):
context = DummyContext()
template = context.path('minimal.pt')
factory = self._makeOne(template)
view = factory(None, None)
from repoze.bfg.view import TemplateView
self.failUnless(isinstance(view, TemplateView))
+ self.assertEqual(view.template, template)
+ def test_call_nonclassbase(self):
+ context = DummyContext()
+ def factory():
+ pass
+ template = context.path('minimal.pt')
+ self.assertRaises(ValueError, self._makeOne, template, factory)
+
+ def test_call_classbase_not_templateview_subclass(self):
+ context = DummyContext()
+ template = context.path('minimal.pt')
+ factory = self._makeOne(template, Dummy)
+ view = factory(None, None)
+ from repoze.bfg.view import TemplateView
+ self.assertEqual(view.__bases__[0], Dummy)
+ self.assertEqual(view.__bases__[1], TemplateView)
+ self.assertEqual(view.__name__, 'DynamicTemplateView_For_Dummy')
+ self.assertEqual(view.template, template)
+
+ def test_call_classbase_templateview_subclass(self):
+ context = DummyContext()
+ template = context.path('minimal.pt')
+ from repoze.bfg.view import TemplateView
+ class TemplateViewSubclass(TemplateView):
+ pass
+ factory = self._makeOne(template, TemplateViewSubclass)
+ view = factory(None, None)
+ self.assertEqual(view.__bases__[0], TemplateViewSubclass)
+ self.assertEqual(view.__name__,
+ 'DynamicTemplateView_For_TemplateViewSubclass')
+ self.assertEqual(view.template, template)
class Dummy:
pass