[Checkins] SVN: five.grok/trunk/src/five/grok/ Last of the view
unit tests.
Lennart Regebro
regebro at gmail.com
Thu Jul 17 09:36:23 EDT 2008
Log message for revision 88441:
Last of the view unit tests.
Changed:
U five.grok/trunk/src/five/grok/components.py
U five.grok/trunk/src/five/grok/tests/view/modequalspkgname/modequalspkgname.py
A five.grok/trunk/src/five/grok/tests/view/template.py
A five.grok/trunk/src/five/grok/tests/view/templatedirectory.py
A five.grok/trunk/src/five/grok/tests/view/templatedirectoryname/
A five.grok/trunk/src/five/grok/tests/view/templatedirectoryname/food.pt
A five.grok/trunk/src/five/grok/tests/view/templatefile.py
A five.grok/trunk/src/five/grok/tests/view/templatenotfound.py
A five.grok/trunk/src/five/grok/tests/view/templatereload.py
A five.grok/trunk/src/five/grok/tests/view/templatereload_templates/
A five.grok/trunk/src/five/grok/tests/view/templatereload_templates/index.pt
A five.grok/trunk/src/five/grok/tests/view/twoviewsusetemplate.py
A five.grok/trunk/src/five/grok/tests/view/unassociated.py
A five.grok/trunk/src/five/grok/tests/view/unassociated_templates/
A five.grok/trunk/src/five/grok/tests/view/unassociated_templates/index.pt
A five.grok/trunk/src/five/grok/tests/view/update.py
A five.grok/trunk/src/five/grok/tests/view/update_redirect.py
-=-
Modified: five.grok/trunk/src/five/grok/components.py
===================================================================
--- five.grok/trunk/src/five/grok/components.py 2008-07-17 13:28:10 UTC (rev 88440)
+++ five.grok/trunk/src/five/grok/components.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -1,3 +1,5 @@
+import sys, os
+
import martian
from zope import interface
from zope import component
Modified: five.grok/trunk/src/five/grok/tests/view/modequalspkgname/modequalspkgname.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/modequalspkgname/modequalspkgname.py 2008-07-17 13:28:10 UTC (rev 88440)
+++ five.grok/trunk/src/five/grok/tests/view/modequalspkgname/modequalspkgname.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -3,7 +3,7 @@
resides in. Grokking it should not provoke an `unassociated template`
error or warning.
"""
-import grok
+from five import grok
class Cave(grok.Model):
pass
Added: five.grok/trunk/src/five/grok/tests/view/template.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/template.py (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/template.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,41 @@
+"""
+
+ >>> grok.testing.grok(__name__)
+
+View with an associated PageTemplate that is referred to using
+``grok.template``:
+
+ >>> manfred = Mammoth()
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> from zope import component
+ >>> view = component.getMultiAdapter((manfred, request), name='painting')
+ >>> print view()
+ <html><body><h1>GROK PAINT MAMMOTH!</h1></body></html>
+
+``grok.name`` and ``grok.template`` can be combined:
+
+ >>> view = component.getMultiAdapter((manfred, request), name='meal')
+ >>> print view()
+ <html><body><h1>GROK EAT MAMMOTH!</h1></body></html>
+
+"""
+from five import grok
+
+class Mammoth(grok.Model):
+ pass
+
+class Painting(grok.View):
+ grok.template('cavepainting')
+
+cavepainting = grok.PageTemplate("""\
+<html><body><h1>GROK PAINT MAMMOTH!</h1></body></html>
+""")
+
+class Food(grok.View):
+ grok.template('food_template')
+ grok.name('meal')
+
+food_template = grok.PageTemplate("""\
+<html><body><h1>GROK EAT MAMMOTH!</h1></body></html>
+""")
Property changes on: five.grok/trunk/src/five/grok/tests/view/template.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: five.grok/trunk/src/five/grok/tests/view/templatedirectory.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/templatedirectory.py (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/templatedirectory.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,27 @@
+"""
+You can explicitly specify the template directory using grok.templatedir on module level:
+
+ >>> grok.testing.grok(__name__)
+
+ >>> manfred = Mammoth()
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> from zope import component
+ >>> view = component.getMultiAdapter((manfred, request), name='food')
+ >>> print view()
+ <html>
+ <body>
+ ME GROK EAT MAMMOTH!
+ </body>
+ </html>
+
+"""
+from five import grok
+
+grok.templatedir('templatedirectoryname')
+
+class Mammoth(grok.Model):
+ pass
+
+class Food(grok.View):
+ pass
Property changes on: five.grok/trunk/src/five/grok/tests/view/templatedirectory.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: five.grok/trunk/src/five/grok/tests/view/templatedirectoryname/food.pt
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/templatedirectoryname/food.pt (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/templatedirectoryname/food.pt 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,5 @@
+<html>
+<body>
+ME GROK EAT MAMMOTH!
+</body>
+</html>
Property changes on: five.grok/trunk/src/five/grok/tests/view/templatedirectoryname/food.pt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: five.grok/trunk/src/five/grok/tests/view/templatefile.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/templatefile.py (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/templatefile.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,31 @@
+"""
+
+ >>> grok.testing.grok(__name__)
+
+View with an associated PageTemplate that is referred to using
+``grok.template``:
+
+ >>> manfred = Mammoth()
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> from zope import component
+ >>> view = component.getMultiAdapter((manfred, request), name='food')
+ >>> print view()
+ <html>
+ <body>
+ ME GROK EAT MAMMOTH!
+ </body>
+ </html>
+
+"""
+from five import grok
+import os.path
+
+class Mammoth(grok.Model):
+ pass
+
+class Food(grok.View):
+ pass
+
+food = grok.PageTemplate(filename=os.path.join('templatedirectoryname',
+ 'food.pt'))
Property changes on: five.grok/trunk/src/five/grok/tests/view/templatefile.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: five.grok/trunk/src/five/grok/tests/view/templatenotfound.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/templatenotfound.py (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/templatenotfound.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,20 @@
+"""
+This should fail because ``grok.template`` points to a non-existing
+template:
+
+ >>> grok.testing.grok(__name__)
+ Traceback (most recent call last):
+ ...
+ ConfigurationExecutionError: martian.error.GrokError: View <class 'five.grok.tests.view.templatenotfound.Painting'>
+ has no associated template or 'render' method.
+ in:
+"""
+from five import grok
+
+class Mammoth(grok.Model):
+ pass
+
+class Painting(grok.View):
+ grok.template('cavepainting')
+
+# no cavepainting template here
Property changes on: five.grok/trunk/src/five/grok/tests/view/templatenotfound.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: five.grok/trunk/src/five/grok/tests/view/templatereload.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/templatereload.py (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/templatereload.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,39 @@
+"""
+Filesystem-based templates, once grokked, can be changed. The change
+will automatically be picked up, reloading Zope is not necessary.
+
+ >>> grok.testing.grok(__name__)
+ >>> from zope.component import getMultiAdapter
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> view = getMultiAdapter((Mammoth(), request), name='index')
+ >>> print view()
+ before
+
+Now we change the file:
+
+ >>> import os.path
+ >>> here = os.path.dirname(__file__)
+ >>> template_file = os.path.join(here, 'templatereload_templates', 'index.pt')
+ >>> template = open(template_file, 'w')
+ >>> template.write('after')
+ >>> template.close()
+
+and find that the output of the view has changed as well:
+
+ >>> print view()
+ after
+
+At last, we should change everything back to normal:
+
+ >>> template = open(template_file, 'w')
+ >>> template.write('before')
+ >>> template.close()
+"""
+from five import grok
+
+class Mammoth(grok.Model):
+ pass
+
+class Index(grok.View):
+ pass
Property changes on: five.grok/trunk/src/five/grok/tests/view/templatereload.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: five.grok/trunk/src/five/grok/tests/view/templatereload_templates/index.pt
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/templatereload_templates/index.pt (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/templatereload_templates/index.pt 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1 @@
+before
\ No newline at end of file
Property changes on: five.grok/trunk/src/five/grok/tests/view/templatereload_templates/index.pt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: five.grok/trunk/src/five/grok/tests/view/twoviewsusetemplate.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/twoviewsusetemplate.py (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/twoviewsusetemplate.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,61 @@
+"""
+A template can be used by multiple views at the same time:
+
+ >>> grok.testing.grok(__name__)
+
+ >>> manfred = Mammoth()
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> from zope import component
+
+ >>> view = component.getMultiAdapter((manfred, request), name='a')
+ >>> print view()
+ View A
+
+ >>> view = component.getMultiAdapter((manfred, request), name='b')
+ >>> print view()
+ View A
+
+It also works if templates are both associated explicitly:
+
+ >>> view = component.getMultiAdapter((manfred, request), name='c')
+ >>> print view()
+ Template
+
+ >>> view = component.getMultiAdapter((manfred, request), name='d')
+ >>> print view()
+ Template
+
+Because the template is associated, we do not expect it to be
+registered as its own view:
+
+ >>> view = component.getMultiAdapter((manfred, request), name='templ')
+ Traceback (most recent call last):
+ ...
+ ComponentLookupError:
+ ((<five.grok.tests.view.twoviewsusetemplate.Mammoth object at 0x...>,
+ <zope.publisher.browser.TestRequest instance URL=http://127.0.0.1>),
+ <InterfaceClass zope.interface.Interface>, 'templ')
+
+
+"""
+from five import grok
+
+class Mammoth(grok.Model):
+ pass
+
+class A(grok.View):
+ pass
+
+a = grok.PageTemplate("View A")
+
+class B(grok.View):
+ grok.template('a')
+
+class C(grok.View):
+ grok.template('templ')
+
+class D(grok.View):
+ grok.template('templ')
+
+templ = grok.PageTemplate('Template')
Property changes on: five.grok/trunk/src/five/grok/tests/view/twoviewsusetemplate.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: five.grok/trunk/src/five/grok/tests/view/unassociated.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/unassociated.py (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/unassociated.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,32 @@
+"""
+Templates that are not associated with a view class will provoke an
+error:
+
+ >>> from five.grok.testing import warn
+ >>> import warnings
+ >>> saved_warn = warnings.warn
+ >>> warnings.warn = warn
+
+ >>> grok.testing.grok(__name__)
+ From five.grok.testing's warn():
+ ...UserWarning: Found the following unassociated template(s) when grokking
+ 'five.grok.tests.view.unassociated': index. Define view classes inheriting from
+ grok.View to enable the template(s)...
+
+Also templates of modules named equally as the package name the module
+resides in, should be found without error or warning. We check this
+with the local package `modequalspkgname`::
+
+ >>> warnings.warn = warn
+
+ >>> pkg = __name__.rsplit('.', 1)[0] + '.modequalspkgname'
+ >>> grok.testing.grok(pkg) is None
+ True
+
+ >>> warnings.warn = saved_warn
+
+"""
+from five import grok
+
+class Mammoth(grok.Model):
+ pass
Property changes on: five.grok/trunk/src/five/grok/tests/view/unassociated.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: five.grok/trunk/src/five/grok/tests/view/unassociated_templates/index.pt
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/unassociated_templates/index.pt (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/unassociated_templates/index.pt 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,3 @@
+This template does not have an associated view class (in other words,
+there's no grok.tests.view.unassociated.Index class), therefore it
+provokes a GrokError.
Property changes on: five.grok/trunk/src/five/grok/tests/view/unassociated_templates/index.pt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: five.grok/trunk/src/five/grok/tests/view/update.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/update.py (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/update.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,46 @@
+"""
+Before a view is rendered, the update() method is executed. It can be
+used e. g. to execute side effects or set up data for use in the
+template.
+
+ >>> grok.testing.grok(__name__)
+
+We need to set up a default ITraversable adapter so that TALES
+expressions can resolve paths:
+
+ >>> from zope import component
+ >>> from zope.traversing.adapters import DefaultTraversable
+ >>> component.provideAdapter(DefaultTraversable, (None,))
+
+ >>> manfred = Mammoth()
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> view = component.getMultiAdapter((manfred, request), name='cavepainting')
+ >>> print view()
+ <html>
+ <body>
+ <h1>red</h1>
+ <h1>red</h1>
+ </body>
+ </html>
+
+
+"""
+from five import grok
+
+class Mammoth(grok.Model):
+ pass
+
+class CavePainting(grok.View):
+ def update(self):
+ self.color = "red"
+
+
+cavepainting = grok.PageTemplate("""\
+<html>
+<body>
+<h1 tal:content="view/color"/>
+<h1 tal:content="python: view.color"/>
+</body>
+</html>
+""")
Property changes on: five.grok/trunk/src/five/grok/tests/view/update.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: five.grok/trunk/src/five/grok/tests/view/update_redirect.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/view/update_redirect.py (rev 0)
+++ five.grok/trunk/src/five/grok/tests/view/update_redirect.py 2008-07-17 13:36:22 UTC (rev 88441)
@@ -0,0 +1,36 @@
+"""
+When a view's update() method redirects somewhere else, the template
+is not executed subsequently.
+
+ >>> grok.testing.grok(__name__)
+
+ >>> manfred = Mammoth()
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> from zope.component import getMultiAdapter
+ >>> view = getMultiAdapter((manfred, request), name='cavepainting')
+ >>> print view()
+ None
+ >>> print request.response.getStatus()
+ 302
+ >>> print request.response.getHeader('Location')
+ somewhere-else
+
+"""
+from five import grok
+
+class Mammoth(grok.Model):
+ pass
+
+class CavePainting(grok.View):
+ def update(self):
+ self.request.response.redirect('somewhere-else')
+
+
+cavepainting = grok.PageTemplate("""\
+<html>
+<body>
+<h1 tal:content="this-is-an-error" />
+</body>
+</html>
+""")
Property changes on: five.grok/trunk/src/five/grok/tests/view/update_redirect.py
___________________________________________________________________
Name: svn:keywords
+ Id
More information about the Checkins
mailing list