annotate genshi/template/tests/directives.py @ 935:705727288d7e

Merge r1143 from py3k: add support for python 3 to remaining genshi.template components: * minor changes to track encoding=None API change in core genshi modules. * genshi/template/directives: * slightly odd syntax changes to make the 2to3 .next() fixer pick up *stream.next() * minor test fix for change in behaviour of division (/) in Python 3. * genshi/template/loader: * add 'b' to file modes to ensure it's loaded as bytes in Python 3. * use not isinstance(s, unicode) instead of isinstance(s, str) since the former is correctly converted by 2to3.
author hodgestar
date Fri, 18 Mar 2011 09:17:52 +0000
parents 85e4678337cf
children
rev   line source
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
2 #
897
85e4678337cf Update changelog and copyright years.
cmlenz
parents: 874
diff changeset
3 # Copyright (C) 2006-2010 Edgewall Software
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
4 # All rights reserved.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
5 #
5f2c7782cd8a 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
5f2c7782cd8a 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
5f2c7782cd8a 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.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
9 #
5f2c7782cd8a 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
5f2c7782cd8a 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
5f2c7782cd8a 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/.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
13
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
14 import doctest
870
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
15 import re
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
16 import sys
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
17 import unittest
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
18
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
19 from genshi.template import directives, MarkupTemplate, TextTemplate, \
436
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
20 TemplateRuntimeError, TemplateSyntaxError
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
21
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
22
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
23 class AttrsDirectiveTestCase(unittest.TestCase):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
24 """Tests for the `py:attrs` template directive."""
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
25
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
26 def test_combined_with_loop(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
27 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
28 Verify that the directive has access to the loop variables.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
29 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
30 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
31 <elem py:for="item in items" py:attrs="item"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
32 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
33 items = [{'id': 1, 'class': 'foo'}, {'id': 2, 'class': 'bar'}]
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
34 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
35 <elem id="1" class="foo"/><elem id="2" class="bar"/>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
36 </doc>""", tmpl.generate(items=items).render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
37
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
38 def test_update_existing_attr(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
39 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
40 Verify that an attribute value that evaluates to `None` removes an
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
41 existing attribute of that name.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
42 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
43 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
44 <elem class="foo" py:attrs="{'class': 'bar'}"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
45 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
46 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
47 <elem class="bar"/>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
48 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
49
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
50 def test_remove_existing_attr(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
51 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
52 Verify that an attribute value that evaluates to `None` removes an
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
53 existing attribute of that name.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
54 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
55 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
56 <elem class="foo" py:attrs="{'class': None}"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
57 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
58 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
59 <elem/>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
60 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
61
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
62
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
63 class ChooseDirectiveTestCase(unittest.TestCase):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
64 """Tests for the `py:choose` template directive and the complementary
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
65 directives `py:when` and `py:otherwise`."""
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
66
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
67 def test_multiple_true_whens(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
68 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
69 Verify that, if multiple `py:when` bodies match, only the first is
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
70 output.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
71 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
72 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/" py:choose="">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
73 <span py:when="1 == 1">1</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
74 <span py:when="2 == 2">2</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
75 <span py:when="3 == 3">3</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
76 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
77 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
78 <span>1</span>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
79 </div>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
80
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
81 def test_otherwise(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
82 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/" py:choose="">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
83 <span py:when="False">hidden</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
84 <span py:otherwise="">hello</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
85 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
86 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
87 <span>hello</span>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
88 </div>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
89
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
90 def test_nesting(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
91 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
92 Verify that `py:choose` blocks can be nested:
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
93 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
94 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
95 <div py:choose="1">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
96 <div py:when="1" py:choose="3">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
97 <span py:when="2">2</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
98 <span py:when="3">3</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
99 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
100 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
101 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
102 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
103 <div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
104 <div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
105 <span>3</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
106 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
107 </div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
108 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
109
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
110 def test_complex_nesting(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
111 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
112 Verify more complex nesting.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
113 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
114 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
115 <div py:choose="1">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
116 <div py:when="1" py:choose="">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
117 <span py:when="2">OK</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
118 <span py:when="1">FAIL</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
119 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
120 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
121 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
122 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
123 <div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
124 <div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
125 <span>OK</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
126 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
127 </div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
128 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
129
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
130 def test_complex_nesting_otherwise(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
131 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
132 Verify more complex nesting using otherwise.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
133 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
134 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
135 <div py:choose="1">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
136 <div py:when="1" py:choose="2">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
137 <span py:when="1">FAIL</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
138 <span py:otherwise="">OK</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
139 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
140 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
141 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
142 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
143 <div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
144 <div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
145 <span>OK</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
146 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
147 </div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
148 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
149
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
150 def test_when_with_strip(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
151 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
152 Verify that a when directive with a strip directive actually strips of
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
153 the outer element.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
154 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
155 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
156 <div py:choose="" py:strip="">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
157 <span py:otherwise="">foo</span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
158 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
159 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
160 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
161 <span>foo</span>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
162 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
163
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
164 def test_when_outside_choose(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
165 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
166 Verify that a `when` directive outside of a `choose` directive is
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
167 reported as an error.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
168 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
169 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
170 <div py:when="xy" />
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
171 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
172 self.assertRaises(TemplateRuntimeError, str, tmpl.generate())
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
173
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
174 def test_otherwise_outside_choose(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
175 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
176 Verify that an `otherwise` directive outside of a `choose` directive is
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
177 reported as an error.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
178 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
179 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
180 <div py:otherwise="" />
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
181 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
182 self.assertRaises(TemplateRuntimeError, str, tmpl.generate())
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
183
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
184 def test_when_without_test(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
185 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
186 Verify that an `when` directive that doesn't have a `test` attribute
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
187 is reported as an error.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
188 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
189 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
190 <div py:choose="" py:strip="">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
191 <py:when>foo</py:when>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
192 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
193 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
194 self.assertRaises(TemplateRuntimeError, str, tmpl.generate())
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
195
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
196 def test_when_without_test_but_with_choose_value(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
197 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
198 Verify that an `when` directive that doesn't have a `test` attribute
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
199 works as expected as long as the parent `choose` directive has a test
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
200 expression.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
201 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
202 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
203 <div py:choose="foo" py:strip="">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
204 <py:when>foo</py:when>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
205 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
206 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
207 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
208 foo
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
209 </doc>""", tmpl.generate(foo='Yeah').render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
210
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
211 def test_otherwise_without_test(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
212 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
213 Verify that an `otherwise` directive can be used without a `test`
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
214 attribute.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
215 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
216 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
217 <div py:choose="" py:strip="">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
218 <py:otherwise>foo</py:otherwise>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
219 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
220 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
221 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
222 foo
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
223 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
224
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
225 def test_as_element(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
226 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
227 Verify that the directive can also be used as an element.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
228 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
229 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
230 <py:choose>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
231 <py:when test="1 == 1">1</py:when>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
232 <py:when test="2 == 2">2</py:when>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
233 <py:when test="3 == 3">3</py:when>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
234 </py:choose>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
235 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
236 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
237 1
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
238 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
239
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
240 def test_in_text_template(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
241 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
242 Verify that the directive works as expected in a text template.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
243 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
244 tmpl = TextTemplate("""#choose
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
245 #when 1 == 1
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
246 1
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
247 #end
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
248 #when 2 == 2
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
249 2
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
250 #end
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
251 #when 3 == 3
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
252 3
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
253 #end
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
254 #end""")
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
255 self.assertEqual(""" 1\n""",
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
256 tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
257
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
258
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
259 class DefDirectiveTestCase(unittest.TestCase):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
260 """Tests for the `py:def` template directive."""
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
261
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
262 def test_function_with_strip(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
263 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
264 Verify that a named template function with a strip directive actually
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
265 strips of the outer element.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
266 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
267 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
268 <div py:def="echo(what)" py:strip="">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
269 <b>${what}</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
270 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
271 ${echo('foo')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
272 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
273 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
274 <b>foo</b>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
275 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
276
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
277 def test_exec_in_replace(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
278 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
279 <p py:def="echo(greeting, name='world')" class="message">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
280 ${greeting}, ${name}!
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
281 </p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
282 <div py:replace="echo('hello')"></div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
283 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
284 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
285 <p class="message">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
286 hello, world!
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
287 </p>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
288 </div>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
289
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
290 def test_as_element(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
291 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
292 Verify that the directive can also be used as an element.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
293 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
294 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
295 <py:def function="echo(what)">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
296 <b>${what}</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
297 </py:def>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
298 ${echo('foo')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
299 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
300 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
301 <b>foo</b>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
302 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
303
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
304 def test_nested_defs(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
305 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
306 Verify that a template function defined inside a conditional block can
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
307 be called from outside that block.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
308 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
309 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
310 <py:if test="semantic">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
311 <strong py:def="echo(what)">${what}</strong>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
312 </py:if>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
313 <py:if test="not semantic">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
314 <b py:def="echo(what)">${what}</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
315 </py:if>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
316 ${echo('foo')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
317 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
318 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
319 <strong>foo</strong>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
320 </doc>""", tmpl.generate(semantic=True).render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
321
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
322 def test_function_with_default_arg(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
323 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
324 Verify that keyword arguments work with `py:def` directives.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
325 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
326 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
327 <b py:def="echo(what, bold=False)" py:strip="not bold">${what}</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
328 ${echo('foo')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
329 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
330 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
331 foo
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
332 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
333
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
334 def test_invocation_in_attribute(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
335 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
336 <py:def function="echo(what)">${what or 'something'}</py:def>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
337 <p class="${echo('foo')}">bar</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
338 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
339 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
340 <p class="foo">bar</p>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
341 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
342
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
343 def test_invocation_in_attribute_none(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
344 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
345 <py:def function="echo()">${None}</py:def>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
346 <p class="${echo()}">bar</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
347 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
348 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
349 <p>bar</p>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
350 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
351
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
352 def test_function_raising_typeerror(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
353 def badfunc():
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
354 raise TypeError
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
355 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
356 <div py:def="dobadfunc()">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
357 ${badfunc()}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
358 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
359 <div py:content="dobadfunc()"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
360 </html>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
361 self.assertRaises(TypeError, list, tmpl.generate(badfunc=badfunc))
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
362
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
363 def test_def_in_matched(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
364 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
365 <head py:match="head">${select('*')}</head>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
366 <head>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
367 <py:def function="maketitle(test)"><b py:replace="test" /></py:def>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
368 <title>${maketitle(True)}</title>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
369 </head>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
370 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
371 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
372 <head><title>True</title></head>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
373 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
374
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
375 def test_in_text_template(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
376 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
377 Verify that the directive works as expected in a text template.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
378 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
379 tmpl = TextTemplate("""
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
380 #def echo(greeting, name='world')
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
381 ${greeting}, ${name}!
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
382 #end
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
383 ${echo('Hi', name='you')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
384 """)
365
85d910b8f9e5 Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 364
diff changeset
385 self.assertEqual("""
85d910b8f9e5 Fix for #62: preserve whitespace in front of directives.
cmlenz
parents: 364
diff changeset
386 Hi, you!
605
bc5faca93699 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: 604
diff changeset
387
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
388 """, tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
389
479
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
390 def test_function_with_star_args(self):
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
391 """
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
392 Verify that a named template function using "star arguments" works as
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
393 expected.
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
394 """
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
395 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
396 <div py:def="f(*args, **kwargs)">
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
397 ${repr(args)}
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
398 ${repr(kwargs)}
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
399 </div>
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
400 ${f(1, 2, a=3, b=4)}
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
401 </doc>""")
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
402 self.assertEqual("""<doc>
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
403 <div>
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
404 [1, 2]
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
405 {'a': 3, 'b': 4}
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
406 </div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
407 </doc>""", tmpl.generate().render(encoding=None))
479
9c83be4a0e4a Apply patch for #116.
cmlenz
parents: 436
diff changeset
408
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
409
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
410 class ForDirectiveTestCase(unittest.TestCase):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
411 """Tests for the `py:for` template directive."""
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
412
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
413 def test_loop_with_strip(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
414 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
415 Verify that the combining the `py:for` directive with `py:strip` works
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
416 correctly.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
417 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
418 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
419 <div py:for="item in items" py:strip="">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
420 <b>${item}</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
421 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
422 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
423 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
424 <b>1</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
425 <b>2</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
426 <b>3</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
427 <b>4</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
428 <b>5</b>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
429 </doc>""", tmpl.generate(items=range(1, 6)).render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
430
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
431 def test_as_element(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
432 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
433 Verify that the directive can also be used as an element.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
434 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
435 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
436 <py:for each="item in items">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
437 <b>${item}</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
438 </py:for>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
439 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
440 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
441 <b>1</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
442 <b>2</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
443 <b>3</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
444 <b>4</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
445 <b>5</b>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
446 </doc>""", tmpl.generate(items=range(1, 6)).render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
447
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
448 def test_multi_assignment(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
449 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
450 Verify that assignment to tuples works correctly.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
451 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
452 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
453 <py:for each="k, v in items">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
454 <p>key=$k, value=$v</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
455 </py:for>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
456 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
457 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
458 <p>key=a, value=1</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
459 <p>key=b, value=2</p>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
460 </doc>""", tmpl.generate(items=dict(a=1, b=2).items())
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
461 .render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
462
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
463 def test_nested_assignment(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
464 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
465 Verify that assignment to nested tuples works correctly.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
466 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
467 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
468 <py:for each="idx, (k, v) in items">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
469 <p>$idx: key=$k, value=$v</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
470 </py:for>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
471 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
472 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
473 <p>0: key=a, value=1</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
474 <p>1: key=b, value=2</p>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
475 </doc>""", tmpl.generate(items=enumerate(dict(a=1, b=2).items()))
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
476 .render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
477
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
478 def test_not_iterable(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
479 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
480 Verify that assignment to nested tuples works correctly.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
481 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
482 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
483 <py:for each="item in foo">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
484 $item
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
485 </py:for>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
486 </doc>""", filename='test.html')
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
487 try:
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
488 list(tmpl.generate(foo=12))
436
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
489 self.fail('Expected TemplateRuntimeError')
640
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
490 except TypeError, e:
653
ca37a9301a20 Fix test to work on Python 2.5.1 which has a different exception message.
cmlenz
parents: 640
diff changeset
491 assert (str(e) == "iteration over non-sequence" or
ca37a9301a20 Fix test to work on Python 2.5.1 which has a different exception message.
cmlenz
parents: 640
diff changeset
492 str(e) == "'int' object is not iterable")
640
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
493 exc_type, exc_value, exc_traceback = sys.exc_info()
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
494 frame = exc_traceback.tb_next
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
495 frames = []
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
496 while frame.tb_next:
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
497 frame = frame.tb_next
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
498 frames.append(frame)
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
499 self.assertEqual("<Expression u'iter(foo)'>",
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
500 frames[-1].tb_frame.f_code.co_name)
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
501 self.assertEqual('test.html',
0e278535c67c Don't mask errors in `py:for`.
cmlenz
parents: 605
diff changeset
502 frames[-1].tb_frame.f_code.co_filename)
750
d007a0d7ba81 Remove some cruft for supporting Python 2.3.
cmlenz
parents: 719
diff changeset
503 self.assertEqual(2, frames[-1].tb_lineno)
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
504
716
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
505 def test_for_with_empty_value(self):
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
506 """
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
507 Verify an empty 'for' value is an error
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
508 """
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
509 try:
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
510 MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
790
1b6968d31089 Merged the custom-directives branch back into trunk.
cmlenz
parents: 750
diff changeset
511 <py:for each="">
1b6968d31089 Merged the custom-directives branch back into trunk.
cmlenz
parents: 750
diff changeset
512 empty
1b6968d31089 Merged the custom-directives branch back into trunk.
cmlenz
parents: 750
diff changeset
513 </py:for>
1b6968d31089 Merged the custom-directives branch back into trunk.
cmlenz
parents: 750
diff changeset
514 </doc>""", filename='test.html').generate()
716
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
515 self.fail('ExpectedTemplateSyntaxError')
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
516 except TemplateSyntaxError, e:
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
517 self.assertEqual('test.html', e.filename)
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
518 if sys.version_info[:2] > (2,4):
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
519 self.assertEqual(2, e.lineno)
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
520
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
521
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
522 class IfDirectiveTestCase(unittest.TestCase):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
523 """Tests for the `py:if` template directive."""
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
524
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
525 def test_loop_with_strip(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
526 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
527 Verify that the combining the `py:if` directive with `py:strip` works
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
528 correctly.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
529 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
530 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
531 <b py:if="foo" py:strip="">${bar}</b>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
532 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
533 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
534 Hello
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
535 </doc>""", tmpl.generate(foo=True, bar='Hello').render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
536
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
537 def test_as_element(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
538 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
539 Verify that the directive can also be used as an element.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
540 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
541 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
542 <py:if test="foo">${bar}</py:if>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
543 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
544 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
545 Hello
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
546 </doc>""", tmpl.generate(foo=True, bar='Hello').render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
547
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
548
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
549 class MatchDirectiveTestCase(unittest.TestCase):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
550 """Tests for the `py:match` template directive."""
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
551
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
552 def test_with_strip(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
553 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
554 Verify that a match template can produce the same kind of element that
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
555 it matched without entering an infinite recursion.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
556 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
557 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
558 <elem py:match="elem" py:strip="">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
559 <div class="elem">${select('text()')}</div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
560 </elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
561 <elem>Hey Joe</elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
562 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
563 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
564 <div class="elem">Hey Joe</div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
565 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
566
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
567 def test_without_strip(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
568 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
569 Verify that a match template can produce the same kind of element that
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
570 it matched without entering an infinite recursion.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
571 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
572 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
573 <elem py:match="elem">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
574 <div class="elem">${select('text()')}</div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
575 </elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
576 <elem>Hey Joe</elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
577 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
578 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
579 <elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
580 <div class="elem">Hey Joe</div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
581 </elem>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
582 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
583
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
584 def test_as_element(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
585 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
586 Verify that the directive can also be used as an element.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
587 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
588 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
589 <py:match path="elem">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
590 <div class="elem">${select('text()')}</div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
591 </py:match>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
592 <elem>Hey Joe</elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
593 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
594 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
595 <div class="elem">Hey Joe</div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
596 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
597
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
598 def test_recursive_match_1(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
599 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
600 Match directives are applied recursively, meaning that they are also
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
601 applied to any content they may have produced themselves:
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
602 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
603 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
604 <elem py:match="elem">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
605 <div class="elem">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
606 ${select('*')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
607 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
608 </elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
609 <elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
610 <subelem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
611 <elem/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
612 </subelem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
613 </elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
614 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
615 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
616 <elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
617 <div class="elem">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
618 <subelem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
619 <elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
620 <div class="elem">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
621 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
622 </elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
623 </subelem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
624 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
625 </elem>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
626 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
627
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
628 def test_recursive_match_2(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
629 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
630 When two or more match templates match the same element and also
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
631 themselves output the element they match, avoiding recursion is even
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
632 more complex, but should work.
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
633 """
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
634 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
635 <body py:match="body">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
636 <div id="header"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
637 ${select('*')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
638 </body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
639 <body py:match="body">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
640 ${select('*')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
641 <div id="footer"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
642 </body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
643 <body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
644 <h1>Foo</h1>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
645 </body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
646 </html>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
647 self.assertEqual("""<html>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
648 <body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
649 <div id="header"/><h1>Foo</h1>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
650 <div id="footer"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
651 </body>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
652 </html>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
653
694
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
654 def test_recursive_match_3(self):
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
655 tmpl = MarkupTemplate("""<test xmlns:py="http://genshi.edgewall.org/">
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
656 <py:match path="b[@type='bullet']">
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
657 <bullet>${select('*|text()')}</bullet>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
658 </py:match>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
659 <py:match path="group[@type='bullet']">
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
660 <ul>${select('*')}</ul>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
661 </py:match>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
662 <py:match path="b">
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
663 <generic>${select('*|text()')}</generic>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
664 </py:match>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
665
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
666 <b>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
667 <group type="bullet">
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
668 <b type="bullet">1</b>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
669 <b type="bullet">2</b>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
670 </group>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
671 </b>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
672 </test>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
673 """)
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
674 self.assertEqual("""<test>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
675 <generic>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
676 <ul><bullet>1</bullet><bullet>2</bullet></ul>
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
677 </generic>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
678 </test>""", tmpl.generate().render(encoding=None))
694
812671b40022 Match templates are now applied in a more controlled fashion: in the order they are declared in the template source, all match templates up to (and including) the matching template itself are applied to the matched content, whereas the match templates declared after the matching template are only applied to the generated content. Fixes #186. Many thanks to Matt Chaput for reporting the problem and providing a test case.
cmlenz
parents: 657
diff changeset
679
364
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
680 def test_not_match_self(self):
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
681 """
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
682 See http://genshi.edgewall.org/ticket/77
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
683 """
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
684 tmpl = MarkupTemplate("""<html xmlns="http://www.w3.org/1999/xhtml"
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
685 xmlns:py="http://genshi.edgewall.org/">
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
686 <body py:match="body" py:content="select('*')" />
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
687 <h1 py:match="h1">
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
688 ${select('text()')}
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
689 Goodbye!
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
690 </h1>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
691 <body>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
692 <h1>Hello!</h1>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
693 </body>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
694 </html>""")
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
695 self.assertEqual("""<html xmlns="http://www.w3.org/1999/xhtml">
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
696 <body><h1>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
697 Hello!
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
698 Goodbye!
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
699 </h1></body>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
700 </html>""", tmpl.generate().render(encoding=None))
364
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
701
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
702 def test_select_text_in_element(self):
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
703 """
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
704 See http://genshi.edgewall.org/ticket/77#comment:1
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
705 """
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
706 tmpl = MarkupTemplate("""<html xmlns="http://www.w3.org/1999/xhtml"
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
707 xmlns:py="http://genshi.edgewall.org/">
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
708 <body py:match="body" py:content="select('*')" />
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
709 <h1 py:match="h1">
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
710 <text>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
711 ${select('text()')}
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
712 </text>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
713 Goodbye!
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
714 </h1>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
715 <body>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
716 <h1>Hello!</h1>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
717 </body>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
718 </html>""")
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
719 self.assertEqual("""<html xmlns="http://www.w3.org/1999/xhtml">
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
720 <body><h1>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
721 <text>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
722 Hello!
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
723 </text>
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
724 Goodbye!
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
725 </h1></body>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
726 </html>""", tmpl.generate().render(encoding=None))
364
41d6eb7885ec Fix for #77: match templates were matching their own output.
cmlenz
parents: 336
diff changeset
727
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
728 def test_select_all_attrs(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
729 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
730 <div py:match="elem" py:attrs="select('@*')">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
731 ${select('text()')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
732 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
733 <elem id="joe">Hey Joe</elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
734 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
735 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
736 <div id="joe">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
737 Hey Joe
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
738 </div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
739 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
740
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
741 def test_select_all_attrs_empty(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
742 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
743 <div py:match="elem" py:attrs="select('@*')">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
744 ${select('text()')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
745 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
746 <elem>Hey Joe</elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
747 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
748 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
749 <div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
750 Hey Joe
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
751 </div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
752 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
753
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
754 def test_select_all_attrs_in_body(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
755 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
756 <div py:match="elem">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
757 Hey ${select('text()')} ${select('@*')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
758 </div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
759 <elem title="Cool">Joe</elem>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
760 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
761 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
762 <div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
763 Hey Joe Cool
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
764 </div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
765 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
766
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
767 def test_def_in_match(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
768 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
769 <py:def function="maketitle(test)"><b py:replace="test" /></py:def>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
770 <head py:match="head">${select('*')}</head>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
771 <head><title>${maketitle(True)}</title></head>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
772 </doc>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
773 self.assertEqual("""<doc>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
774 <head><title>True</title></head>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
775 </doc>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
776
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
777 def test_match_with_xpath_variable(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
778 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
779 <span py:match="*[name()=$tagname]">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
780 Hello ${select('@name')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
781 </span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
782 <greeting name="Dude"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
783 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
784 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
785 <span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
786 Hello Dude
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
787 </span>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
788 </div>""", tmpl.generate(tagname='greeting').render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
789 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
790 <greeting name="Dude"/>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
791 </div>""", tmpl.generate(tagname='sayhello').render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
792
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
793 def test_content_directive_in_match(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
794 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
795 <div py:match="foo">I said <q py:content="select('text()')">something</q>.</div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
796 <foo>bar</foo>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
797 </html>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
798 self.assertEqual("""<html>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
799 <div>I said <q>bar</q>.</div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
800 </html>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
801
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
802 def test_cascaded_matches(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
803 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
804 <body py:match="body">${select('*')}</body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
805 <head py:match="head">${select('title')}</head>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
806 <body py:match="body">${select('*')}<hr /></body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
807 <head><title>Welcome to Markup</title></head>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
808 <body><h2>Are you ready to mark up?</h2></body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
809 </html>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
810 self.assertEqual("""<html>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
811 <head><title>Welcome to Markup</title></head>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
812 <body><h2>Are you ready to mark up?</h2><hr/></body>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
813 </html>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
814
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
815 def test_multiple_matches(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
816 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
817 <input py:match="form//input" py:attrs="select('@*')"
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
818 value="${values[str(select('@name'))]}" />
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
819 <form><p py:for="field in fields">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
820 <label>${field.capitalize()}</label>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
821 <input type="text" name="${field}" />
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
822 </p></form>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
823 </html>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
824 fields = ['hello_%s' % i for i in range(5)]
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
825 values = dict([('hello_%s' % i, i) for i in range(5)])
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
826 self.assertEqual("""<html>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
827 <form><p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
828 <label>Hello_0</label>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
829 <input value="0" type="text" name="hello_0"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
830 </p><p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
831 <label>Hello_1</label>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
832 <input value="1" type="text" name="hello_1"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
833 </p><p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
834 <label>Hello_2</label>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
835 <input value="2" type="text" name="hello_2"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
836 </p><p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
837 <label>Hello_3</label>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
838 <input value="3" type="text" name="hello_3"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
839 </p><p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
840 <label>Hello_4</label>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
841 <input value="4" type="text" name="hello_4"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
842 </p></form>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
843 </html>""", tmpl.generate(fields=fields, values=values)
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
844 .render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
845
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
846 def test_namespace_context(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
847 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
848 xmlns:x="http://www.example.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
849 <div py:match="x:foo">Foo</div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
850 <foo xmlns="http://www.example.org/"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
851 </html>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
852 # FIXME: there should be a way to strip out unwanted/unused namespaces,
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
853 # such as the "x" in this example
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
854 self.assertEqual("""<html xmlns:x="http://www.example.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
855 <div>Foo</div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
856 </html>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
857
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
858 def test_match_with_position_predicate(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
859 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
860 <p py:match="body/p[1]" class="first">${select('*|text()')}</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
861 <body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
862 <p>Foo</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
863 <p>Bar</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
864 </body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
865 </html>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
866 self.assertEqual("""<html>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
867 <body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
868 <p class="first">Foo</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
869 <p>Bar</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
870 </body>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
871 </html>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
872
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
873 def test_match_with_closure(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
874 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
875 <p py:match="body//p" class="para">${select('*|text()')}</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
876 <body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
877 <p>Foo</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
878 <div><p>Bar</p></div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
879 </body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
880 </html>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
881 self.assertEqual("""<html>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
882 <body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
883 <p class="para">Foo</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
884 <div><p class="para">Bar</p></div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
885 </body>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
886 </html>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
887
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
888 def test_match_without_closure(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
889 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
890 <p py:match="body/p" class="para">${select('*|text()')}</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
891 <body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
892 <p>Foo</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
893 <div><p>Bar</p></div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
894 </body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
895 </html>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
896 self.assertEqual("""<html>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
897 <body>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
898 <p class="para">Foo</p>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
899 <div><p>Bar</p></div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
900 </body>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
901 </html>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
902
602
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
903 def test_match_with_once_attribute(self):
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
904 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
905 <py:match path="body" once="true"><body>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
906 <div id="wrap">
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
907 ${select("*")}
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
908 </div>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
909 </body></py:match>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
910 <body>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
911 <p>Foo</p>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
912 </body>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
913 <body>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
914 <p>Bar</p>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
915 </body>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
916 </html>""")
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
917 self.assertEqual("""<html>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
918 <body>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
919 <div id="wrap">
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
920 <p>Foo</p>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
921 </div>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
922 </body>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
923 <body>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
924 <p>Bar</p>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
925 </body>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
926 </html>""", tmpl.generate().render(encoding=None))
602
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
927
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
928 def test_match_with_recursive_attribute(self):
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
929 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
930 <py:match path="elem" recursive="false"><elem>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
931 <div class="elem">
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
932 ${select('*')}
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
933 </div>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
934 </elem></py:match>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
935 <elem>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
936 <subelem>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
937 <elem/>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
938 </subelem>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
939 </elem>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
940 </doc>""")
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
941 self.assertEqual("""<doc>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
942 <elem>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
943 <div class="elem">
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
944 <subelem>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
945 <elem/>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
946 </subelem>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
947 </div>
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
948 </elem>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
949 </doc>""", tmpl.generate().render(encoding=None))
602
509b3a5e765e Add runtime optimization hints for match templates.
cmlenz
parents: 479
diff changeset
950
870
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
951 # See http://genshi.edgewall.org/ticket/254/
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
952 def test_triple_match_produces_no_duplicate_items(self):
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
953 tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
954 <div py:match="div[@id='content']" py:attrs="select('@*')" once="true">
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
955 <ul id="tabbed_pane" />
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
956 ${select('*')}
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
957 </div>
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
958
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
959 <body py:match="body" once="true" buffer="false">
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
960 ${select('*|text()')}
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
961 </body>
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
962 <body py:match="body" once="true" buffer="false">
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
963 ${select('*|text()')}
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
964 </body>
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
965
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
966 <body>
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
967 <div id="content">
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
968 <h1>Ticket X</h1>
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
969 </div>
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
970 </body>
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
971 </doc>""")
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
972 output = tmpl.generate().render('xhtml', doctype='xhtml')
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
973 matches = re.findall("tabbed_pane", output)
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
974 self.assertNotEqual(None, matches)
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
975 self.assertEqual(1, len(matches))
1ea88e82713d Apply patch Felix Schwarz that finally fixes the duplicated output in match template processing. Thanks so much!
cmlenz
parents: 865
diff changeset
976
874
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
977 def test_match_multiple_times1(self):
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
978 # See http://genshi.edgewall.org/ticket/370
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
979 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
980 <py:match path="body[@id='content']/h2" />
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
981 <head py:match="head" />
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
982 <head py:match="head" />
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
983 <head />
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
984 <body />
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
985 </html>""")
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
986 self.assertEqual("""<html>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
987 <head/>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
988 <body/>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
989 </html>""", tmpl.generate().render())
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
990
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
991 def test_match_multiple_times2(self):
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
992 # See http://genshi.edgewall.org/ticket/370
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
993 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
994 <py:match path="body/div[@id='properties']" />
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
995 <head py:match="head" />
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
996 <head py:match="head" />
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
997 <head/>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
998 <body>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
999 <div id="properties">Foo</div>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
1000 </body>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
1001 </html>""")
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
1002 self.assertEqual("""<html>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
1003 <head/>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
1004 <body>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
1005 </body>
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
1006 </html>""", tmpl.generate().render())
fcf378812238 Fix for match template processing involving multiple match directives targetting the same element. Should close #370.
cmlenz
parents: 870
diff changeset
1007
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1008 # FIXME
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1009 #def test_match_after_step(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1010 # tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1011 # <span py:match="div/greeting">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1012 # Hello ${select('@name')}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1013 # </span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1014 # <greeting name="Dude" />
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1015 # </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1016 # self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1017 # <span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1018 # Hello Dude
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1019 # </span>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1020 # </div>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1021
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1022
657
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1023 class ContentDirectiveTestCase(unittest.TestCase):
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1024 """Tests for the `py:content` template directive."""
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1025
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1026 def test_as_element(self):
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1027 try:
790
1b6968d31089 Merged the custom-directives branch back into trunk.
cmlenz
parents: 750
diff changeset
1028 MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
657
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1029 <py:content foo="">Foo</py:content>
790
1b6968d31089 Merged the custom-directives branch back into trunk.
cmlenz
parents: 750
diff changeset
1030 </doc>""", filename='test.html').generate()
657
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1031 self.fail('Expected TemplateSyntaxError')
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1032 except TemplateSyntaxError, e:
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1033 self.assertEqual('test.html', e.filename)
750
d007a0d7ba81 Remove some cruft for supporting Python 2.3.
cmlenz
parents: 719
diff changeset
1034 self.assertEqual(2, e.lineno)
657
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1035
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1036
436
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1037 class ReplaceDirectiveTestCase(unittest.TestCase):
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1038 """Tests for the `py:replace` template directive."""
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1039
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1040 def test_replace_with_empty_value(self):
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1041 """
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1042 Verify that the directive raises an apprioriate exception when an empty
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1043 expression is supplied.
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1044 """
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1045 try:
790
1b6968d31089 Merged the custom-directives branch back into trunk.
cmlenz
parents: 750
diff changeset
1046 MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
436
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1047 <elem py:replace="">Foo</elem>
790
1b6968d31089 Merged the custom-directives branch back into trunk.
cmlenz
parents: 750
diff changeset
1048 </doc>""", filename='test.html').generate()
436
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1049 self.fail('Expected TemplateSyntaxError')
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1050 except TemplateSyntaxError, e:
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1051 self.assertEqual('test.html', e.filename)
750
d007a0d7ba81 Remove some cruft for supporting Python 2.3.
cmlenz
parents: 719
diff changeset
1052 self.assertEqual(2, e.lineno)
436
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1053
657
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1054 def test_as_element(self):
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1055 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1056 <py:replace value="title" />
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1057 </div>""", filename='test.html')
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1058 self.assertEqual("""<div>
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1059 Test
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1060 </div>""", tmpl.generate(title='Test').render(encoding=None))
657
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1061
436
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1062
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1063 class StripDirectiveTestCase(unittest.TestCase):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1064 """Tests for the `py:strip` template directive."""
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1065
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1066 def test_strip_false(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1067 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1068 <div py:strip="False"><b>foo</b></div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1069 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1070 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1071 <div><b>foo</b></div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1072 </div>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1073
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1074 def test_strip_empty(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1075 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1076 <div py:strip=""><b>foo</b></div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1077 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1078 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1079 <b>foo</b>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1080 </div>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1081
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1082
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1083 class WithDirectiveTestCase(unittest.TestCase):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1084 """Tests for the `py:with` template directive."""
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1085
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1086 def test_shadowing(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1087 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1088 ${x}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1089 <span py:with="x = x * 2" py:replace="x"/>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1090 ${x}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1091 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1092 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1093 42
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1094 84
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1095 42
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1096 </div>""", tmpl.generate(x=42).render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1097
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1098 def test_as_element(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1099 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1100 <py:with vars="x = x * 2">${x}</py:with>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1101 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1102 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1103 84
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1104 </div>""", tmpl.generate(x=42).render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1105
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1106 def test_multiple_vars_same_name(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1107 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1108 <py:with vars="
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1109 foo = 'bar';
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1110 foo = foo.replace('r', 'z')
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1111 ">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1112 $foo
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1113 </py:with>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1114 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1115 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1116 baz
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1117 </div>""", tmpl.generate(x=42).render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1118
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1119 def test_multiple_vars_single_assignment(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1120 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1121 <py:with vars="x = y = z = 1">${x} ${y} ${z}</py:with>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1122 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1123 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1124 1 1 1
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1125 </div>""", tmpl.generate(x=42).render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1126
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1127 def test_nested_vars_single_assignment(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1128 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1129 <py:with vars="x, (y, z) = (1, (2, 3))">${x} ${y} ${z}</py:with>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1130 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1131 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1132 1 2 3
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1133 </div>""", tmpl.generate(x=42).render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1134
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1135 def test_multiple_vars_trailing_semicolon(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1136 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1137 <py:with vars="x = x * 2; y = x / 2;">${x} ${y}</py:with>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1138 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1139 self.assertEqual("""<div>
935
705727288d7e Merge r1143 from py3k:
hodgestar
parents: 897
diff changeset
1140 84 %s
705727288d7e Merge r1143 from py3k:
hodgestar
parents: 897
diff changeset
1141 </div>""" % (84 / 2), tmpl.generate(x=42).render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1142
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1143 def test_semicolon_escape(self):
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1144 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1145 <py:with vars="x = 'here is a semicolon: ;'; y = 'here are two semicolons: ;;' ;">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1146 ${x}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1147 ${y}
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1148 </py:with>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1149 </div>""")
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1150 self.assertEqual("""<div>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1151 here is a semicolon: ;
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1152 here are two semicolons: ;;
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1153 </div>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1154
604
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1155 def test_ast_transformation(self):
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1156 """
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1157 Verify that the usual template expression AST transformations are
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1158 applied despite the code being compiled to a `Suite` object.
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1159 """
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1160 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1161 <span py:with="bar=foo.bar">
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1162 $bar
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1163 </span>
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1164 </div>""")
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1165 self.assertEqual("""<div>
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1166 <span>
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1167 42
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1168 </span>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1169 </div>""", tmpl.generate(foo={'bar': 42}).render(encoding=None))
604
6d1fa718794f Fix bug that slipped into [717]: the code of a `py:with` directive was not being compiled with AST transformations applied.
cmlenz
parents: 602
diff changeset
1170
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1171 def test_unicode_expr(self):
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1172 tmpl = MarkupTemplate(u"""<div xmlns:py="http://genshi.edgewall.org/">
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1173 <span py:with="weeks=(u'一', u'二', u'三', u'四', u'五', u'六', u'日')">
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1174 $weeks
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1175 </span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1176 </div>""")
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1177 self.assertEqual(u"""<div>
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1178 <span>
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1179 一二三四五六日
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1180 </span>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1181 </div>""", tmpl.generate().render(encoding=None))
716
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
1182
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
1183 def test_with_empty_value(self):
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
1184 """
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
1185 Verify that an empty py:with works (useless, but legal)
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
1186 """
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
1187 tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
1188 <span py:with="">Text</span></div>""")
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
1189
fe05ebf91775 fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
aflett
parents: 707
diff changeset
1190 self.assertEqual("""<div>
865
6638c9db9e8c Also skip the encoding step in the template tests.
cmlenz
parents: 790
diff changeset
1191 <span>Text</span></div>""", tmpl.generate().render(encoding=None))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1192
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1193
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1194 def suite():
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1195 suite = unittest.TestSuite()
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1196 suite.addTest(doctest.DocTestSuite(directives))
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1197 suite.addTest(unittest.makeSuite(AttrsDirectiveTestCase, 'test'))
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1198 suite.addTest(unittest.makeSuite(ChooseDirectiveTestCase, 'test'))
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1199 suite.addTest(unittest.makeSuite(DefDirectiveTestCase, 'test'))
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1200 suite.addTest(unittest.makeSuite(ForDirectiveTestCase, 'test'))
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1201 suite.addTest(unittest.makeSuite(IfDirectiveTestCase, 'test'))
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1202 suite.addTest(unittest.makeSuite(MatchDirectiveTestCase, 'test'))
657
69b3b6ca968b Allow use of py:replace as element. Closes #144.
cmlenz
parents: 653
diff changeset
1203 suite.addTest(unittest.makeSuite(ContentDirectiveTestCase, 'test'))
436
85ae2dee949b Raise syntax error on empty value for `py:replace` directive.
cmlenz
parents: 365
diff changeset
1204 suite.addTest(unittest.makeSuite(ReplaceDirectiveTestCase, 'test'))
336
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1205 suite.addTest(unittest.makeSuite(StripDirectiveTestCase, 'test'))
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1206 suite.addTest(unittest.makeSuite(WithDirectiveTestCase, 'test'))
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1207 return suite
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1208
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1209 if __name__ == '__main__':
5f2c7782cd8a Refactoring: `genshi.template` is now a package, it was getting way to crowded in that file.
cmlenz
parents:
diff changeset
1210 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software