summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp von Weitershausen <philipp@weitershausen.de>2007-01-14 13:45:26 +0000
committerPhilipp von Weitershausen <philipp@weitershausen.de>2007-01-14 13:45:26 +0000
commit16ebbdf9ec85dd42de4abc8546fb5af782b20109 (patch)
treee8914522986f25894ad5b94c5cc75f0a6857a00a
parent19bbd906747c198d6258d38f10ba6499aec1ebf9 (diff)
downloadzope-pagetemplate-monolithic-zope3-3.3.tar.gz
zope.tal.xmlparser.XMLParser couldn't deal with unicode strings, which meant thatmonolithic-zope3-3.3
PageTemplates in XML mode whose source code was available as a unicode string failed. Fixed the problem and added a test that exercises a PT w/ unicode source in XML mode (HTML mode already worked).
-rw-r--r--tests/test_basictemplate.py182
1 files changed, 182 insertions, 0 deletions
diff --git a/tests/test_basictemplate.py b/tests/test_basictemplate.py
new file mode 100644
index 0000000..23188e1
--- /dev/null
+++ b/tests/test_basictemplate.py
@@ -0,0 +1,182 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Basic Page Template tests
+
+$Id$
+"""
+import unittest
+
+from zope.pagetemplate.tests import util
+from zope.pagetemplate.pagetemplate import PageTemplate
+
+class BasicTemplateTests(unittest.TestCase):
+
+ def setUp(self):
+ self.t = PageTemplate()
+
+ def test_if_in_var(self):
+ # DTML test 1: if, in, and var:
+ pass # for unittest
+ """
+ %(comment)[ blah %(comment)]
+ <html><head><title>Test of documentation templates</title></head>
+ <body>
+ %(if args)[
+ <dl><dt>The arguments to this test program were:<p>
+ <dd>
+ <ul>
+ %(in args)[
+ <li>Argument number %(num)d was %(arg)s
+ %(in args)]
+ </ul></dl><p>
+ %(if args)]
+ %(else args)[
+ No arguments were given.<p>
+ %(else args)]
+ And thats da trooth.
+ </body></html>
+ """
+ tal = util.read_input('dtml1.html')
+ self.t.write(tal)
+
+ aa = util.argv(('one', 'two', 'three', 'cha', 'cha', 'cha'))
+ o = self.t(content=aa)
+ expect = util.read_output('dtml1a.html')
+
+ util.check_xml(expect, o)
+
+ aa = util.argv(())
+ o = self.t(content=aa)
+ expect = util.read_output('dtml1b.html')
+ util.check_xml(expect, o)
+
+ def test_template_usage(self):
+ tal = util.read_input('template_usage.html')
+ self.t.write(tal)
+
+ o = self.t(template_usage=u"test")
+ expect = util.read_output('template_usage1.html')
+ util.check_xml(expect, o)
+
+ o = self.t(template_usage=u"retest")
+ expect = util.read_output('template_usage2.html')
+ util.check_xml(expect, o)
+
+ o = self.t(template_usage=u"other")
+ expect = util.read_output('template_usage3.html')
+ util.check_xml(expect, o)
+
+ o = self.t(template_usage=u"")
+ expect = util.read_output('template_usage4.html')
+ util.check_xml(expect, o)
+
+ def test_batches_and_formatting(self):
+ # DTML test 3: batches and formatting:
+ pass # for unittest
+ """
+ <html><head><title>Test of documentation templates</title></head>
+ <body>
+ <!--#if args-->
+ The arguments were:
+ <!--#in args size=size end=end-->
+ <!--#if previous-sequence-->
+ (<!--#var previous-sequence-start-arg-->-
+ <!--#var previous-sequence-end-arg-->)
+ <!--#/if previous-sequence-->
+ <!--#if sequence-start-->
+ <dl>
+ <!--#/if sequence-start-->
+ <dt><!--#var sequence-arg-->.</dt>
+ <dd>Argument <!--#var num fmt=d--> was <!--#var arg--></dd>
+ <!--#if next-sequence-->
+ (<!--#var next-sequence-start-arg-->-
+ <!--#var next-sequence-end-arg-->)
+ <!--#/if next-sequence-->
+ <!--#/in args-->
+ </dl>
+ <!--#else args-->
+ No arguments were given.<p>
+ <!--#/if args-->
+ And I\'m 100% sure!
+ </body></html>
+ """
+ tal = util.read_input('dtml3.html')
+ self.t.write(tal)
+
+ aa = util.argv(('one', 'two', 'three', 'four', 'five',
+ 'six', 'seven', 'eight', 'nine', 'ten',
+ 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen',
+ 'sixteen', 'seventeen', 'eighteen', 'nineteen',
+ 'twenty',
+ ))
+ from zope.pagetemplate.tests import batch
+ o = self.t(content=aa, batch=batch.batch(aa.args, 5))
+
+ expect = util.read_output('dtml3.html')
+ util.check_xml(expect, o)
+
+ def test_on_error_in_slot_filler(self):
+ # The `here` isn't defined, so the macro definition is
+ # expected to catch the error that gets raised.
+ text = '''\
+ <div metal:define-macro="foo">
+ <div tal:on-error="string:eek">
+ <div metal:define-slot="slot" />
+ cool
+ </div>
+ </div>
+
+ <div metal:use-macro="template/macros/foo">
+ <div metal:fill-slot="slot">
+ <p tal:content="here/xxx" />
+ </div>
+ </div>
+ '''
+ self.t.write(text)
+ self.t()
+
+ def test_on_error_in_slot_default(self):
+ # The `here` isn't defined, so the macro definition is
+ # expected to catch the error that gets raised.
+ text = '''\
+ <div metal:define-macro="foo">
+ <div tal:on-error="string:eek">
+ <div metal:define-slot="slot">
+ <div tal:content="here/xxx" />
+ </div>
+ </div>
+ </div>
+
+ <div metal:use-macro="template/macros/foo">
+ </div>
+ '''
+ self.t.write(text)
+ self.t()
+
+ def test_unicode_html(self):
+ text = u'<p>\xe4\xf6\xfc\xdf</p>'
+
+ # test with HTML parser
+ self.t.pt_edit(text, 'text/html')
+ self.assertEquals(self.t().strip(), text)
+
+ # test with XML parser
+ self.t.pt_edit(text, 'text/xml')
+ self.assertEquals(self.t().strip(), text)
+
+def test_suite():
+ return unittest.makeSuite(BasicTemplateTests)
+
+if __name__ == '__main__':
+ unittest.TextTestRunner().run(test_suite())