# -*- coding: utf-8 -*- from __future__ import unicode_literals import os from xml.dom.minidom import getDOMImplementation from unittest import TestCase from secretary import UndefinedSilently, pad_string, Renderer def test_undefined_silently(): undefined = UndefinedSilently() assert isinstance(undefined(), UndefinedSilently) assert isinstance(undefined.attribute, UndefinedSilently) assert str(undefined) == '' def test_pad_string(): assert pad_string('TEST') == '0TEST' assert pad_string('TEST', 4) == 'TEST' assert pad_string(1) == '00001' class RenderTestCase(TestCase): def setUp(self): root = os.path.dirname(__file__) impl = getDOMImplementation() template = os.path.join(root, 'simple_template.odt') self.document = impl.createDocument(None, "some_tag", None) self.engine = Renderer() self.engine.render(template) def test__unescape_entities(self): test_samples = { # test scaping of > '{{ "greater_than_1" if 1>0 }}' : '{{ "greater_than_1" if 1>0 }}', '{% a > b %}' : '{% a > b %}', '{{ a > b }}' : '{{ a > b }}', '{% a|filter > b %}' : '{% a|filter > b %}', '{% a == b %}{% else if a > b %}': '{% a == b %}{% else if a > b %}', # test scaping of < and " '{{ "lower_than_1" if 1<0 }}' : '{{ "lower_than_1" if 1<0 }}', '{% a < b %}' : '{% a < b %}', '{{ a < b }}' : '{{ a < b }}', '{% a|filter < b %}' : '{% a|filter < b %}', '{% a == b %}{% else if a < b %}': '{% a == b %}{% else if a < b %}', } for test, expect in test_samples.items(): assert self.engine._unescape_entities(test) == expect def test__encode_escape_chars(self): test_samples = { '\n': '', '\n': '', '\n': '', 'Hello\n': 'Hello', 'Hello\nWorld\n!': 'HelloWorld!', '\n': '', '\u0009': '', '\n': '', } for test, expect in test_samples.items(): assert self.engine._encode_escape_chars(test) == expect def _test_is_jinja_tag(self): assert self._is_jinja_tag('{{ foo }}')==True assert self._is_jinja_tag('{ foo }')==False def _test_is_block_tag(self): assert self._is_block_tag('{% if True %}')==True assert self._is_block_tag('{{ foo }}')==False assert self._is_block_tag('{ foo }')==False def test_create_test_node(self): assert self.engine.create_text_node(self.document, 'text').toxml() == 'text' def test_create_text_span_node(self): assert self.engine.create_text_span_node(self.document, 'text').toxml() == 'text' class EncodeLFAndFWithinTextNamespace(TestCase): """Test encoding of line feed and tab chars within text: namespace""" def test_encode_linefeed_char(self): xml = 'This\nLF' espected = 'ThisLF' assert (Renderer._encode_escape_chars(xml) == espected) def test_encode_tab_char(self): xml = 'This\tTab' espected = 'ThisTab' assert (Renderer._encode_escape_chars(xml) == espected) def test_escape_elem_with_attributes(self): """A bug in _encode_escape_chars was preventing it from escaping LF and tabs inside text elements with tag attributes. See: https://github.com/christopher-ramirez/secretary/issues/39""" xml = 'This\nLF' espected = 'ThisLF' assert (Renderer._encode_escape_chars(xml) == espected)