diff options
author | Armin Ronacher <armin.ronacher@active-4.com> | 2016-01-13 22:33:52 +0100 |
---|---|---|
committer | Armin Ronacher <armin.ronacher@active-4.com> | 2016-01-13 22:33:52 +0100 |
commit | d2bb5bdc882d091f2b9a2b819b61aba17cc461b7 (patch) | |
tree | dfc2c2791706d9f807976e5a4ccb68aabf01a495 | |
parent | 8c7ec9bb440593cb1d302f7ca84d157be8eb785c (diff) | |
parent | 810bae60461fd7c00c853b91c8e03dce3103b020 (diff) | |
download | markupsafe-d2bb5bdc882d091f2b9a2b819b61aba17cc461b7.tar.gz |
Merge pull request #20 from bukzor/idempotent-escape
idempotent unescape
-rw-r--r-- | markupsafe/__init__.py | 5 | ||||
-rw-r--r-- | markupsafe/tests.py | 14 |
2 files changed, 16 insertions, 3 deletions
diff --git a/markupsafe/__init__.py b/markupsafe/__init__.py index af896e8..ae4a118 100644 --- a/markupsafe/__init__.py +++ b/markupsafe/__init__.py @@ -20,7 +20,7 @@ __all__ = ['Markup', 'soft_unicode', 'escape', 'escape_silent'] _striptags_re = re.compile(r'(<!--.*?-->|<[^>]*>)') -_entity_re = re.compile(r'&([^;]+);') +_entity_re = re.compile(r'&([^& ;]+);') class Markup(text_type): @@ -143,7 +143,8 @@ class Markup(text_type): return unichr(int(name[1:])) except ValueError: pass - return u'' + # Don't modify unexpected input. + return m.group() return _entity_re.sub(handle_match, text_type(self)) def striptags(self): diff --git a/markupsafe/tests.py b/markupsafe/tests.py index e740cb3..62fb57d 100644 --- a/markupsafe/tests.py +++ b/markupsafe/tests.py @@ -61,10 +61,22 @@ class MarkupTestCase(unittest.TestCase): }, Markup(u'<em><foo>:<bar></em>')) def test_escaping(self): - # escaping and unescaping + # escaping assert escape('"<>&\'') == '"<>&'' assert Markup("<em>Foo & Bar</em>").striptags() == "Foo & Bar" + + def test_unescape(self): assert Markup("<test>").unescape() == "<test>" + assert "jack & tavi are cooler than mike & russ" == \ + Markup("jack & tavi are cooler than mike & russ").unescape(), \ + Markup("jack & tavi are cooler than mike & russ").unescape() + + # Test that unescape is idempotent + original = '&foo;' + once = Markup(original).unescape() + twice = Markup(once).unescape() + expected = "&foo;" + assert expected == once == twice, (once, twice) def test_formatting(self): for actual, expected in ( |