annotate genshi/template/tests/text.py @ 609:6d4877844e28 trunk

Add support for Python code blocks in text templates using the new syntax.
author cmlenz
date Mon, 27 Aug 2007 22:39:01 +0000
parents d0345c64da65
children 5e358de79e4c
rev   line source
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
2 #
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
3 # Copyright (C) 2006 Edgewall Software
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
4 # All rights reserved.
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
5 #
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
8 # are also available at http://genshi.edgewall.org/wiki/License.
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
9 #
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
12 # history and logs, available at http://genshi.edgewall.org/log/.
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
13
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
14 import doctest
475
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
15 import os
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
16 import shutil
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
17 import tempfile
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
18 import unittest
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
19
475
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
20 from genshi.template.loader import TemplateLoader
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
21 from genshi.template.text import OldTextTemplate, NewTextTemplate
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
22
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
23
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
24 class OldTextTemplateTestCase(unittest.TestCase):
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
25 """Tests for text template processing."""
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
26
475
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
27 def setUp(self):
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
28 self.dirname = tempfile.mkdtemp(suffix='markup_test')
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
29
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
30 def tearDown(self):
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
31 shutil.rmtree(self.dirname)
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
32
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
33 def test_escaping(self):
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
34 tmpl = OldTextTemplate('\\#escaped')
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
35 self.assertEqual('#escaped', str(tmpl.generate()))
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
36
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
37 def test_comment(self):
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
38 tmpl = OldTextTemplate('## a comment')
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
39 self.assertEqual('', str(tmpl.generate()))
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
40
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
41 def test_comment_escaping(self):
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
42 tmpl = OldTextTemplate('\\## escaped comment')
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
43 self.assertEqual('## escaped comment', str(tmpl.generate()))
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
44
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
45 def test_end_with_args(self):
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
46 tmpl = OldTextTemplate("""
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
47 #if foo
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
48 bar
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
49 #end 'if foo'""")
418
c478a6fa9e77 Make expression error handling more strict. Closes #88.
cmlenz
parents: 365
diff changeset
50 self.assertEqual('\n', str(tmpl.generate(foo=False)))
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
51
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
52 def test_latin1_encoded(self):
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
53 text = u'$foo\xf6$bar'.encode('iso-8859-1')
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
54 tmpl = OldTextTemplate(text, encoding='iso-8859-1')
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
55 self.assertEqual(u'x\xf6y', unicode(tmpl.generate(foo='x', bar='y')))
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
56
512
ed9f1300f3bf Fix for #125 (text template handling unicode source). Thanks to Christian Boos for the patch.
cmlenz
parents: 475
diff changeset
57 def test_unicode_input(self):
ed9f1300f3bf Fix for #125 (text template handling unicode source). Thanks to Christian Boos for the patch.
cmlenz
parents: 475
diff changeset
58 text = u'$foo\xf6$bar'
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
59 tmpl = OldTextTemplate(text)
512
ed9f1300f3bf Fix for #125 (text template handling unicode source). Thanks to Christian Boos for the patch.
cmlenz
parents: 475
diff changeset
60 self.assertEqual(u'x\xf6y', unicode(tmpl.generate(foo='x', bar='y')))
ed9f1300f3bf Fix for #125 (text template handling unicode source). Thanks to Christian Boos for the patch.
cmlenz
parents: 475
diff changeset
61
365
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
62 def test_empty_lines1(self):
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
63 tmpl = OldTextTemplate("""Your items:
365
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
64
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
65 #for item in items
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
66 * ${item}
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
67 #end""")
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
68 self.assertEqual("""Your items:
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
69
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
70 * 0
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
71 * 1
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
72 * 2
605
d0345c64da65 Text templates now default to rendering as plain text; it is no longer necessary to explicitly specify the "text" method to the `render()` or `serialize()` method of the generated markup stream. See tickets #62 and #118.
cmlenz
parents: 592
diff changeset
73 """, tmpl.generate(items=range(3)).render())
365
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
74
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
75 def test_empty_lines2(self):
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
76 tmpl = OldTextTemplate("""Your items:
365
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
77
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
78 #for item in items
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
79 * ${item}
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
80
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
81 #end""")
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
82 self.assertEqual("""Your items:
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
83
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
84 * 0
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
85
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
86 * 1
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
87
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
88 * 2
4f431931d64e Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 336
diff changeset
89
605
d0345c64da65 Text templates now default to rendering as plain text; it is no longer necessary to explicitly specify the "text" method to the `render()` or `serialize()` method of the generated markup stream. See tickets #62 and #118.
cmlenz
parents: 592
diff changeset
90 """, tmpl.generate(items=range(3)).render())
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
91
475
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
92 def test_include(self):
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
93 file1 = open(os.path.join(self.dirname, 'tmpl1.txt'), 'w')
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
94 try:
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
95 file1.write("Included\n")
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
96 finally:
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
97 file1.close()
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
98
475
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
99 file2 = open(os.path.join(self.dirname, 'tmpl2.txt'), 'w')
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
100 try:
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
101 file2.write("""----- Included data below this line -----
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
102 #include tmpl1.txt
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
103 ----- Included data above this line -----""")
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
104 finally:
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
105 file2.close()
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
106
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
107 loader = TemplateLoader([self.dirname])
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
108 tmpl = loader.load('tmpl2.txt', cls=OldTextTemplate)
475
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
109 self.assertEqual("""----- Included data below this line -----
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
110 Included
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
111 ----- Included data above this line -----""",
b373f80f7763 Added include directive for text templates (#115). Thanks to Alastair for the original patch.
cmlenz
parents: 418
diff changeset
112 tmpl.generate().render())
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
113
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
114
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
115 class NewTextTemplateTestCase(unittest.TestCase):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
116 """Tests for text template processing."""
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
117
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
118 def setUp(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
119 self.dirname = tempfile.mkdtemp(suffix='markup_test')
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
120
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
121 def tearDown(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
122 shutil.rmtree(self.dirname)
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
123
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
124 def test_escaping(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
125 tmpl = NewTextTemplate('\\{% escaped %}')
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
126 self.assertEqual('{% escaped %}', str(tmpl.generate()))
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
127
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
128 def test_comment(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
129 tmpl = NewTextTemplate('{# a comment #}')
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
130 self.assertEqual('', str(tmpl.generate()))
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
131
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
132 def test_comment_escaping(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
133 tmpl = NewTextTemplate('\\{# escaped comment #}')
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
134 self.assertEqual('{# escaped comment #}', str(tmpl.generate()))
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
135
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
136 def test_end_with_args(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
137 tmpl = NewTextTemplate("""
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
138 {% if foo %}
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
139 bar
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
140 {% end 'if foo' %}""")
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
141 self.assertEqual('\n', str(tmpl.generate(foo=False)))
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
142
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
143 def test_latin1_encoded(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
144 text = u'$foo\xf6$bar'.encode('iso-8859-1')
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
145 tmpl = NewTextTemplate(text, encoding='iso-8859-1')
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
146 self.assertEqual(u'x\xf6y', unicode(tmpl.generate(foo='x', bar='y')))
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
147
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
148 def test_unicode_input(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
149 text = u'$foo\xf6$bar'
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
150 tmpl = NewTextTemplate(text)
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
151 self.assertEqual(u'x\xf6y', unicode(tmpl.generate(foo='x', bar='y')))
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
152
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
153 def test_empty_lines1(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
154 tmpl = NewTextTemplate("""Your items:
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
155
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
156 {% for item in items %}\
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
157 * ${item}
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
158 {% end %}""")
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
159 self.assertEqual("""Your items:
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
160
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
161 * 0
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
162 * 1
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
163 * 2
605
d0345c64da65 Text templates now default to rendering as plain text; it is no longer necessary to explicitly specify the "text" method to the `render()` or `serialize()` method of the generated markup stream. See tickets #62 and #118.
cmlenz
parents: 592
diff changeset
164 """, tmpl.generate(items=range(3)).render())
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
165
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
166 def test_empty_lines2(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
167 tmpl = NewTextTemplate("""Your items:
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
168
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
169 {% for item in items %}\
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
170 * ${item}
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
171
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
172 {% end %}""")
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
173 self.assertEqual("""Your items:
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
174
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
175 * 0
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
176
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
177 * 1
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
178
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
179 * 2
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
180
605
d0345c64da65 Text templates now default to rendering as plain text; it is no longer necessary to explicitly specify the "text" method to the `render()` or `serialize()` method of the generated markup stream. See tickets #62 and #118.
cmlenz
parents: 592
diff changeset
181 """, tmpl.generate(items=range(3)).render())
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
182
609
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
183 def test_exec_with_trailing_space(self):
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
184 """
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
185 Verify that a code block with trailing space does not cause a syntax
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
186 error (see ticket #127).
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
187 """
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
188 NewTextTemplate(u"""
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
189 {% python
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
190 bar = 42
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
191 $}
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
192 """)
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
193
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
194 def test_exec_import(self):
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
195 tmpl = NewTextTemplate(u"""{% python from datetime import timedelta %}
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
196 ${timedelta(days=2)}
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
197 """)
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
198 self.assertEqual("""
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
199 2 days, 0:00:00
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
200 """, str(tmpl.generate()))
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
201
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
202 def test_exec_def(self):
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
203 tmpl = NewTextTemplate(u"""{% python
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
204 def foo():
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
205 return 42
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
206 %}
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
207 ${foo()}
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
208 """)
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
209 self.assertEqual(u"""
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
210 42
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
211 """, str(tmpl.generate()))
6d4877844e28 Add support for Python code blocks in text templates using the new syntax.
cmlenz
parents: 605
diff changeset
212
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
213 def test_include(self):
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
214 file1 = open(os.path.join(self.dirname, 'tmpl1.txt'), 'w')
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
215 try:
605
d0345c64da65 Text templates now default to rendering as plain text; it is no longer necessary to explicitly specify the "text" method to the `render()` or `serialize()` method of the generated markup stream. See tickets #62 and #118.
cmlenz
parents: 592
diff changeset
216 file1.write("Included")
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
217 finally:
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
218 file1.close()
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
219
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
220 file2 = open(os.path.join(self.dirname, 'tmpl2.txt'), 'w')
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
221 try:
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
222 file2.write("""----- Included data below this line -----
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
223 {% include tmpl1.txt %}
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
224 ----- Included data above this line -----""")
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
225 finally:
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
226 file2.close()
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
227
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
228 loader = TemplateLoader([self.dirname])
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
229 tmpl = loader.load('tmpl2.txt', cls=NewTextTemplate)
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
230 self.assertEqual("""----- Included data below this line -----
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
231 Included
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
232 ----- Included data above this line -----""", tmpl.generate().render())
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
233
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
234
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
235 def suite():
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
236 suite = unittest.TestSuite()
592
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
237 suite.addTest(doctest.DocTestSuite(NewTextTemplate.__module__))
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
238 suite.addTest(unittest.makeSuite(OldTextTemplateTestCase, 'test'))
1da8de3e5e51 Add a new syntax for text templates, which is available alongside the old syntax for now. The new syntax is more poweful and flexible, using Django-style directive notation.
cmlenz
parents: 512
diff changeset
239 suite.addTest(unittest.makeSuite(NewTextTemplateTestCase, 'test'))
336
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
240 return suite
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
241
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
242 if __name__ == '__main__':
7763f7aec949 Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
243 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software