From 3d2cedeec8c46c029f42fcea65db92a35ad4a28d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20Ram=C3=ADrez?= Date: Mon, 12 Jun 2017 12:54:40 -0600 Subject: [PATCH] Fix #39. Introducing new tests for _encode_escape_chars. --- secretary.py | 2 +- test_secretary.py | 27 +++++++++++++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/secretary.py b/secretary.py index 723b81b..0fae7ac 100644 --- a/secretary.py +++ b/secretary.py @@ -431,7 +431,7 @@ class Renderer(object): """ Replace line feed and/or tabs within text:span entities. """ - find_pattern = r'(?is)([^>]*?([\n|\t])[^<]*?)' + find_pattern = r'(?is)([^>]*?([\n\t])[^<]*?)' for m in re.findall(find_pattern, xml_text): replacement = m[1].replace('\n', '') replacement = replacement.replace('\t', '') diff --git a/test_secretary.py b/test_secretary.py index 9e21bca..9000a0b 100644 --- a/test_secretary.py +++ b/test_secretary.py @@ -79,12 +79,23 @@ class RenderTestCase(TestCase): def test_create_text_span_node(self): assert self.engine.create_text_span_node(self.document, 'text').toxml() == 'text' - def test_newline(self): - xml_text = 'Teststraße 5\n1234 Lünen' - result = Renderer._encode_escape_chars(xml_text) - assert result == 'Teststraße 51234 Lünen' - def test_evil_newline(self): - xml_text = '\n\n' - result = Renderer._encode_escape_chars(xml_text) - assert result == '\n' +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)