Mercurial > genshi > mirror
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') |