diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/conftest.py | 23 | ||||
-rw-r--r-- | tests/test_escape.py | 39 | ||||
-rw-r--r-- | tests/test_leak.py | 10 | ||||
-rw-r--r-- | tests/test_markupsafe.py | 127 |
4 files changed, 106 insertions, 93 deletions
diff --git a/tests/conftest.py b/tests/conftest.py index 06614cc..296cd58 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -8,27 +8,30 @@ except ImportError: _speedups = None -@pytest.fixture(scope='session', params=( - _native, - pytest.param(_speedups, marks=pytest.mark.skipif( - _speedups is None, - reason='speedups unavailable', - )) -)) +@pytest.fixture( + scope="session", + params=( + _native, + pytest.param( + _speedups, + marks=pytest.mark.skipif(_speedups is None, reason="speedups unavailable"), + ), + ), +) def _mod(request): return request.param -@pytest.fixture(scope='session') +@pytest.fixture(scope="session") def escape(_mod): return _mod.escape -@pytest.fixture(scope='session') +@pytest.fixture(scope="session") def escape_silent(_mod): return _mod.escape_silent -@pytest.fixture(scope='session') +@pytest.fixture(scope="session") def soft_str(_mod): return _mod.soft_unicode diff --git a/tests/test_escape.py b/tests/test_escape.py index 337cd19..788134a 100644 --- a/tests/test_escape.py +++ b/tests/test_escape.py @@ -4,22 +4,27 @@ import pytest from markupsafe import Markup -@pytest.mark.parametrize(('value', 'expect'), ( - # empty - (u'', u''), - # ascii - (u'abcd&><\'"efgh', u'abcd&><'"efgh'), - (u'&><\'"efgh', u'&><'"efgh'), - (u'abcd&><\'"', u'abcd&><'"'), - # 2 byte - (u'こんにちは&><\'"こんばんは', - u'こんにちは&><'"こんばんは'), - (u'&><\'"こんばんは', u'&><'"こんばんは'), - (u'こんにちは&><\'"', u'こんにちは&><'"'), - # 4 byte - (u'\U0001F363\U0001F362&><\'"\U0001F37A xyz', u'\U0001F363\U0001F362&><'"\U0001F37A xyz'), - (u'&><\'"\U0001F37A xyz', u'&><'"\U0001F37A xyz'), - (u'\U0001F363\U0001F362&><\'"', u'\U0001F363\U0001F362&><'"'), -)) +@pytest.mark.parametrize( + ("value", "expect"), + ( + # empty + (u"", u""), + # ascii + (u"abcd&><'\"efgh", u"abcd&><'"efgh"), + (u"&><'\"efgh", u"&><'"efgh"), + (u"abcd&><'\"", u"abcd&><'""), + # 2 byte + (u"こんにちは&><'\"こんばんは", u"こんにちは&><'"こんばんは"), + (u"&><'\"こんばんは", u"&><'"こんばんは"), + (u"こんにちは&><'\"", u"こんにちは&><'""), + # 4 byte + ( + u"\U0001F363\U0001F362&><'\"\U0001F37A xyz", + u"\U0001F363\U0001F362&><'"\U0001F37A xyz", + ), + (u"&><'\"\U0001F37A xyz", u"&><'"\U0001F37A xyz"), + (u"\U0001F363\U0001F362&><'\"", u"\U0001F363\U0001F362&><'""), + ), +) def test_escape(escape, value, expect): assert escape(value) == Markup(expect) diff --git a/tests/test_leak.py b/tests/test_leak.py index 29e1ec1..b36a4ce 100644 --- a/tests/test_leak.py +++ b/tests/test_leak.py @@ -8,20 +8,20 @@ from markupsafe import escape @pytest.mark.skipif( - escape.__module__ == 'markupsafe._native', - reason='only test memory leak with speedups' + escape.__module__ == "markupsafe._native", + reason="only test memory leak with speedups", ) def test_markup_leaks(): counts = set() - for count in range(20): - for item in range(1000): + for _i in range(20): + for _j in range(1000): escape("foo") escape("<foo>") escape(u"foo") escape(u"<foo>") - if hasattr(sys, 'pypy_version_info'): + if hasattr(sys, "pypy_version_info"): gc.collect() counts.add(len(gc.get_objects())) diff --git a/tests/test_markupsafe.py b/tests/test_markupsafe.py index ffbf8a3..5b08006 100644 --- a/tests/test_markupsafe.py +++ b/tests/test_markupsafe.py @@ -1,32 +1,38 @@ # -*- coding: utf-8 -*- import pytest -from markupsafe import Markup, escape, escape_silent -from markupsafe._compat import PY2, text_type +from markupsafe import escape +from markupsafe import escape_silent +from markupsafe import Markup +from markupsafe._compat import PY2 +from markupsafe._compat import text_type def test_adding(): unsafe = '<script type="application/x-some-script">alert("foo");</script>' - safe = Markup('<em>username</em>') + safe = Markup("<em>username</em>") assert unsafe + safe == text_type(escape(unsafe)) + text_type(safe) -@pytest.mark.parametrize(('template', 'data', 'expect'), ( - ('<em>%s</em>', '<bad user>', '<em><bad user></em>'), +@pytest.mark.parametrize( + ("template", "data", "expect"), ( - '<em>%(username)s</em>', - {'username': '<bad user>'}, - '<em><bad user></em>' + ("<em>%s</em>", "<bad user>", "<em><bad user></em>"), + ( + "<em>%(username)s</em>", + {"username": "<bad user>"}, + "<em><bad user></em>", + ), + ("%i", 3.14, "3"), + ("%.2f", 3.14, "3.14"), ), - ('%i', 3.14, '3'), - ('%.2f', 3.14, '3.14'), -)) +) def test_string_interpolation(template, data, expect): assert Markup(template) % data == expect def test_type_behavior(): - assert type(Markup('foo') + 'bar') is Markup + assert type(Markup("foo") + "bar") is Markup x = Markup("foo") assert x.__html__() is x @@ -34,39 +40,36 @@ def test_type_behavior(): def test_html_interop(): class Foo(object): def __html__(self): - return '<em>awesome</em>' + return "<em>awesome</em>" def __unicode__(self): - return 'awesome' + return "awesome" __str__ = __unicode__ - assert Markup(Foo()) == '<em>awesome</em>' - result = Markup('<strong>%s</strong>') % Foo() - assert result == '<strong><em>awesome</em></strong>' + assert Markup(Foo()) == "<em>awesome</em>" + result = Markup("<strong>%s</strong>") % Foo() + assert result == "<strong><em>awesome</em></strong>" def test_tuple_interpol(): - result = Markup('<em>%s:%s</em>') % ('<foo>', '<bar>') - expect = Markup(u'<em><foo>:<bar></em>') + result = Markup("<em>%s:%s</em>") % ("<foo>", "<bar>") + expect = Markup(u"<em><foo>:<bar></em>") assert result == expect def test_dict_interpol(): - result = Markup('<em>%(foo)s</em>') % {'foo': '<foo>'} - expect = Markup(u'<em><foo></em>') + result = Markup("<em>%(foo)s</em>") % {"foo": "<foo>"} + expect = Markup(u"<em><foo></em>") assert result == expect - result = Markup('<em>%(foo)s:%(bar)s</em>') % { - 'foo': '<foo>', - 'bar': '<bar>', - } - expect = Markup(u'<em><foo>:<bar></em>') + result = Markup("<em>%(foo)s:%(bar)s</em>") % {"foo": "<foo>", "bar": "<bar>"} + expect = Markup(u"<em><foo>:<bar></em>") assert result == expect def test_escaping(): - assert escape('"<>&\'') == '"<>&'' + assert escape("\"<>&'") == ""<>&'" assert Markup("<em>Foo & Bar</em>").striptags() == "Foo & Bar" @@ -77,7 +80,7 @@ def test_unescape(): expect = "jack & tavi are cooler than mike & russ" assert result == expect - original = '&foo;' + original = "&foo;" once = Markup(original).unescape() twice = Markup(once).unescape() expect = "&foo;" @@ -86,35 +89,35 @@ def test_unescape(): def test_format(): - result = Markup('<em>{awesome}</em>').format(awesome='<awesome>') - assert result == '<em><awesome></em>' + result = Markup("<em>{awesome}</em>").format(awesome="<awesome>") + assert result == "<em><awesome></em>" - result = Markup('{0[1][bar]}').format([0, {'bar': '<bar/>'}]) - assert result == '<bar/>' + result = Markup("{0[1][bar]}").format([0, {"bar": "<bar/>"}]) + assert result == "<bar/>" - result = Markup('{0[1][bar]}').format([0, {'bar': Markup('<bar/>')}]) - assert result == '<bar/>' + result = Markup("{0[1][bar]}").format([0, {"bar": Markup("<bar/>")}]) + assert result == "<bar/>" def test_formatting_empty(): - formatted = Markup('{}').format(0) - assert formatted == Markup('0') + formatted = Markup("{}").format(0) + assert formatted == Markup("0") def test_custom_formatting(): class HasHTMLOnly(object): def __html__(self): - return Markup('<foo>') + return Markup("<foo>") class HasHTMLAndFormat(object): def __html__(self): - return Markup('<foo>') + return Markup("<foo>") def __html_format__(self, spec): - return Markup('<FORMAT>') + return Markup("<FORMAT>") - assert Markup('{0}').format(HasHTMLOnly()) == Markup('<foo>') - assert Markup('{0}').format(HasHTMLAndFormat()) == Markup('<FORMAT>') + assert Markup("{0}").format(HasHTMLOnly()) == Markup("<foo>") + assert Markup("{0}").format(HasHTMLAndFormat()) == Markup("<FORMAT>") def test_complex_custom_formatting(): @@ -124,36 +127,38 @@ def test_complex_custom_formatting(): self.username = username def __html_format__(self, format_spec): - if format_spec == 'link': + if format_spec == "link": return Markup('<a href="/user/{0}">{1}</a>').format( - self.id, self.__html__()) + self.id, self.__html__() + ) elif format_spec: - raise ValueError('Invalid format spec') + raise ValueError("Invalid format spec") return self.__html__() def __html__(self): - return Markup('<span class=user>{0}</span>').format(self.username) + return Markup("<span class=user>{0}</span>").format(self.username) - user = User(1, 'foo') - result = Markup('<p>User: {0:link}').format(user) - expect = Markup( - '<p>User: <a href="/user/1"><span class=user>foo</span></a>') + user = User(1, "foo") + result = Markup("<p>User: {0:link}").format(user) + expect = Markup('<p>User: <a href="/user/1"><span class=user>foo</span></a>') assert result == expect def test_formatting_with_objects(): class Stringable(object): def __unicode__(self): - return u'строка' + return u"строка" if PY2: + def __str__(self): - return 'some other value' + return "some other value" + else: __str__ = __unicode__ - assert Markup('{s}').format(s=Stringable()) == Markup(u'строка') + assert Markup("{s}").format(s=Stringable()) == Markup(u"строка") def test_all_set(): @@ -166,26 +171,26 @@ def test_all_set(): def test_escape_silent(): assert escape_silent(None) == Markup() assert escape(None) == Markup(None) - assert escape_silent('<foo>') == Markup(u'<foo>') + assert escape_silent("<foo>") == Markup(u"<foo>") def test_splitting(): - expect = [Markup('a'), Markup('b')] - assert Markup('a b').split() == expect - assert Markup('a b').rsplit() == expect - assert Markup('a\nb').splitlines() == expect + expect = [Markup("a"), Markup("b")] + assert Markup("a b").split() == expect + assert Markup("a b").rsplit() == expect + assert Markup("a\nb").splitlines() == expect def test_mul(): - assert Markup('a') * 3 == Markup('aaa') + assert Markup("a") * 3 == Markup("aaa") def test_escape_return_type(): - assert isinstance(escape('a'), Markup) - assert isinstance(escape(Markup('a')), Markup) + assert isinstance(escape("a"), Markup) + assert isinstance(escape(Markup("a")), Markup) class Foo: def __html__(self): - return '<strong>Foo</strong>' + return "<strong>Foo</strong>" assert isinstance(escape(Foo()), Markup) |