Beispiel #1
0
 def test_as_element(self):
     """
     Verify that the directive can also be used as an element.
     """
     tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
       <py:if test="foo">${bar}</py:if>
     </doc>""")
     self.assertEqual("""<doc>
       Hello
     </doc>""", str(tmpl.generate(foo=True, bar='Hello')))
Beispiel #2
0
 def test_def_in_match(self):
     tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
       <py:def function="maketitle(test)"><b py:replace="test" /></py:def>
       <head py:match="head">${select('*')}</head>
       <head><title>${maketitle(True)}</title></head>
     </doc>""")
     self.assertEqual(
         """<doc>
       <head><title>True</title></head>
     </doc>""", str(tmpl.generate()))
Beispiel #3
0
    def filter_stream(self, req, method, filename, stream, data):
        if req.perm.has_permission('TRAC_ADMIN') and filename.startswith(
                'template_admin'):
            script = '\n<script type="text/javascript">'\
                   + 'ticketext.TicketTemplate.setUp(\'' + req.base_path + '\');'\
                   + '</script>\n'
            return stream | Transformer('//div[@id="footer"]').before(
                MarkupTemplate(script).generate())

        return stream
Beispiel #4
0
 def test_invocation_in_attribute(self):
     tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
       <py:def function="echo(what)">${what or 'something'}</py:def>
       <p class="${echo('foo')}">bar</p>
     </doc>""")
     self.assertEqual(
         """<doc>
       <p class="foo">bar</p>
     </doc>""",
         tmpl.generate().render(encoding=None))
Beispiel #5
0
 def test_content_directive_in_match(self):
     tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
       <div py:match="foo">I said <q py:content="select('text()')">something</q>.</div>
       <foo>bar</foo>
     </html>""")
     self.assertEqual(
         """<html>
       <div>I said <q>bar</q>.</div>
     </html>""",
         tmpl.generate().render(encoding=None))
Beispiel #6
0
 def test_as_element(self):
     try:
         MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:content foo="">Foo</py:content>
         </doc>""",
                        filename='test.html').generate()
         self.fail('Expected TemplateSyntaxError')
     except TemplateSyntaxError, e:
         self.assertEqual('test.html', e.filename)
         self.assertEqual(2, e.lineno)
Beispiel #7
0
    def test_with_empty_value(self):
        """
        Verify that an empty py:with works (useless, but legal)
        """
        tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
          <span py:with="">Text</span></div>""")

        self.assertEqual("""<div>
          <span>Text</span></div>""",
                         tmpl.generate().render(encoding=None))
 def generateResponseStream(self, tree):
     template = MarkupTemplate("""<html xmlns="http://www.w3.org/1999/xhtml"
                             xmlns:py="http://genshi.edgewall.org/">
                             <head><script>${jsCode}</script></head>
                             <body></body>
                             </html>""")
     jsGenerator = TreeToJS()
     jsCode = jsGenerator.serialize(tree)
     stream = template.generate(jsCode = jsCode)
     return stream
Beispiel #9
0
 def test_otherwise(self):
     tmpl = MarkupTemplate(
         """<div xmlns:py="http://genshi.edgewall.org/" py:choose="">
       <span py:when="False">hidden</span>
       <span py:otherwise="">hello</span>
     </div>""")
     self.assertEqual(
         """<div>
       <span>hello</span>
     </div>""", str(tmpl.generate()))
Beispiel #10
0
 def test_extract_without_text(self):
     tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
       <p title="Bar">Foo</p>
       ${ngettext("Singular", "Plural", num)}
     </html>""")
     translator = Translator(extract_text=False)
     messages = list(translator.extract(tmpl.stream))
     self.assertEqual(1, len(messages))
     self.assertEqual((3, 'ngettext', (u'Singular', u'Plural')),
                      messages[0])
Beispiel #11
0
 def test_loop_with_strip(self):
     """
     Verify that the combining the `py:if` directive with `py:strip` works
     correctly.
     """
     tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
       <b py:if="foo" py:strip="">${bar}</b>
     </doc>""")
     self.assertEqual("""<doc>
       Hello
     </doc>""", str(tmpl.generate(foo=True, bar='Hello')))
Beispiel #12
0
 def test_remove_existing_attr(self):
     """
     Verify that an attribute value that evaluates to `None` removes an
     existing attribute of that name.
     """
     tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
       <elem class="foo" py:attrs="{'class': None}"/>
     </doc>""")
     self.assertEqual("""<doc>
       <elem/>
     </doc>""", str(tmpl.generate()))
Beispiel #13
0
 def test_function_with_default_arg(self):
     """
     Verify that keyword arguments work with `py:def` directives.
     """
     tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
       <b py:def="echo(what, bold=False)" py:strip="not bold">${what}</b>
       ${echo('foo')}
     </doc>""")
     self.assertEqual("""<doc>
       foo
     </doc>""", str(tmpl.generate()))
Beispiel #14
0
 def test_fill_option_segmented_text(self):
     html = MarkupTemplate("""<form>
       <select name="foo">
         <option value="1">foo $x</option>
       </select>
     </form>""").generate(x=1) | HTMLFormFiller(data={'foo': '1'})
     self.assertEquals("""<form>
       <select name="foo">
         <option value="1" selected="selected">foo 1</option>
       </select>
     </form>""", unicode(html))
Beispiel #15
0
    def test_function_raising_typeerror(self):
        def badfunc():
            raise TypeError

        tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
          <div py:def="dobadfunc()">
            ${badfunc()}
          </div>
          <div py:content="dobadfunc()"/>
        </html>""")
        self.assertRaises(TypeError, list, tmpl.generate(badfunc=badfunc))
Beispiel #16
0
 def check_content(self):
     if not self.content:
         return
     try:
         MarkupTemplate(self.content)
     except Exception as exception:
         raise TemplateError(
             gettext('marketing_email'
                     '.msg_message_invalid_content',
                     message=self.rec_name,
                     exception=exception)) from exception
Beispiel #17
0
 def test_extract_i18n_msg_with_two_params(self):
     tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
         xmlns:i18n="http://genshi.edgewall.org/i18n">
       <p i18n:msg="name, time">
         Posted by ${post.author} at ${entry.time.strftime('%H:%m')}
       </p>
     </html>""")
     translator = Translator()
     messages = list(translator.extract(tmpl.stream))
     self.assertEqual(1, len(messages))
     self.assertEqual('Posted by %(name)s at %(time)s', messages[0][2])
Beispiel #18
0
 def test_when_without_test(self):
     """
     Verify that an `when` directive that doesn't have a `test` attribute
     is reported as an error.
     """
     tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/">
       <div py:choose="" py:strip="">
         <py:when>foo</py:when>
       </div>
     </doc>""")
     self.assertRaises(TemplateRuntimeError, str, tmpl.generate())
Beispiel #19
0
 def test_fill_option_segmented_text_no_value(self):
     html = MarkupTemplate("""<form>
       <select name="foo">
         <option>foo $x bar</option>
       </select>
     </form>""").generate(x=1) | HTMLFormFiller(data={'foo': 'foo 1 bar'})
     self.assertEquals("""<form>
       <select name="foo">
         <option selected="selected">foo 1 bar</option>
       </select>
     </form>""", html.render())
Beispiel #20
0
 def test_translate_with_translations_object(self):
     tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
         xmlns:i18n="http://genshi.edgewall.org/i18n">
       <p i18n:msg="" i18n:comment="As in foo bar">Foo</p>
     </html>""")
     translator = Translator(DummyTranslations({'Foo': 'Voh'}))
     tmpl.filters.insert(0, translator)
     tmpl.add_directives(Translator.NAMESPACE, translator)
     self.assertEqual("""<html>
       <p>Voh</p>
     </html>""", tmpl.generate().render())
Beispiel #21
0
 def test_extract_i18n_msg_with_directive(self):
     tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
         xmlns:i18n="http://genshi.edgewall.org/i18n">
       <p i18n:msg="">
         Show me <input type="text" name="num" py:attrs="{'value': x}" /> entries per page.
       </p>
     </html>""")
     translator = Translator()
     messages = list(translator.extract(tmpl.stream))
     self.assertEqual(1, len(messages))
     self.assertEqual('Show me [1:] entries per page.', messages[0][2])
Beispiel #22
0
 def test_extract_i18n_msg_with_param(self):
     tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
         xmlns:i18n="http://genshi.edgewall.org/i18n">
       <p i18n:msg="name">
         Hello, ${user.name}!
       </p>
     </html>""")
     translator = Translator()
     messages = list(translator.extract(tmpl.stream))
     self.assertEqual(1, len(messages))
     self.assertEqual('Hello, %(name)s!', messages[0][2])
Beispiel #23
0
 def test_extract_i18n_msg_multiple(self):
     tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
         xmlns:i18n="http://genshi.edgewall.org/i18n">
       <p i18n:msg="">
         Please see <a href="help.html">Help</a> for <em>details</em>.
       </p>
     </html>""")
     translator = Translator()
     messages = list(translator.extract(tmpl.stream))
     self.assertEqual(1, len(messages))
     self.assertEqual('Please see [1:Help] for [2:details].', messages[0][2])
Beispiel #24
0
 def test_shadowing(self):
     tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
       ${x}
       <span py:with="x = x * 2" py:replace="x"/>
       ${x}
     </div>""")
     self.assertEqual(
         """<div>
       42
       84
       42
     </div>""", str(tmpl.generate(x=42)))
Beispiel #25
0
def write_test_file(script_dir, out_dir, tests, file_name, template_file_name):
    file_name = os.path.join(out_dir, file_name + ".html")
    short_name = os.path.basename(file_name)

    with open(os.path.join(script_dir, template_file_name), "r") as f:
        template = MarkupTemplate(f)

    stream = template.generate(file_name=short_name, tests=tests)

    with open(file_name, "w") as f:
        f.write(stream.render('html', doctype='html5', encoding="utf8"))
    return file_name
Beispiel #26
0
 def expand_macro(self, formatter, name, content):
     template = """
         <div>Hello World, args = ${args}</div>
         """
     if genshi:
         from genshi.template import MarkupTemplate
         tmpl = MarkupTemplate(template)
         return tmpl.generate(args=content)
     else:
         from trac.util.text import jinja2template
         tmpl = jinja2template(template.strip())
         return tmpl.render(args=content)
Beispiel #27
0
 def test_translate_i18n_msg_with_comment(self):
     tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
         xmlns:i18n="http://genshi.edgewall.org/i18n">
       <p i18n:msg="" i18n:comment="As in foo bar">Foo</p>
     </html>""")
     gettext = lambda s: u"Voh"
     translator = Translator(gettext)
     tmpl.filters.insert(0, translator)
     tmpl.add_directives(Translator.NAMESPACE, translator)
     self.assertEqual("""<html>
       <p>Voh</p>
     </html>""", tmpl.generate().render())
Beispiel #28
0
 def test_extract_i18n_msg_multiple_empty(self):
     tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
         xmlns:i18n="http://genshi.edgewall.org/i18n">
       <p i18n:msg="">
         Show me <input type="text" name="num" /> entries per page, starting at page <input type="text" name="num" />.
       </p>
     </html>""")
     translator = Translator()
     messages = list(translator.extract(tmpl.stream))
     self.assertEqual(1, len(messages))
     self.assertEqual('Show me [1:] entries per page, starting at page [2:].',
                      messages[0][2])
Beispiel #29
0
 def test_semicolon_escape(self):
     tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
       <py:with vars="x = 'here is a semicolon: ;'; y = 'here are two semicolons: ;;' ;">
         ${x}
         ${y}
       </py:with>
     </div>""")
     self.assertEqual(
         """<div>
         here is a semicolon: ;
         here are two semicolons: ;;
     </div>""", str(tmpl.generate()))
Beispiel #30
0
 def test_multiple_vars_same_name(self):
     tmpl = MarkupTemplate("""<div xmlns:py="http://genshi.edgewall.org/">
       <py:with vars="
         foo = 'bar';
         foo = foo.replace('r', 'z')
       ">
         $foo
       </py:with>
     </div>""")
     self.assertEqual("""<div>
         baz
     </div>""", str(tmpl.generate(x=42)))