aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/conftest.py23
-rw-r--r--tests/test_escape.py39
-rw-r--r--tests/test_leak.py10
-rw-r--r--tests/test_markupsafe.py127
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&amp;&gt;&lt;&#39;&#34;efgh'),
- (u'&><\'"efgh', u'&amp;&gt;&lt;&#39;&#34;efgh'),
- (u'abcd&><\'"', u'abcd&amp;&gt;&lt;&#39;&#34;'),
- # 2 byte
- (u'こんにちは&><\'"こんばんは',
- u'こんにちは&amp;&gt;&lt;&#39;&#34;こんばんは'),
- (u'&><\'"こんばんは', u'&amp;&gt;&lt;&#39;&#34;こんばんは'),
- (u'こんにちは&><\'"', u'こんにちは&amp;&gt;&lt;&#39;&#34;'),
- # 4 byte
- (u'\U0001F363\U0001F362&><\'"\U0001F37A xyz', u'\U0001F363\U0001F362&amp;&gt;&lt;&#39;&#34;\U0001F37A xyz'),
- (u'&><\'"\U0001F37A xyz', u'&amp;&gt;&lt;&#39;&#34;\U0001F37A xyz'),
- (u'\U0001F363\U0001F362&><\'"', u'\U0001F363\U0001F362&amp;&gt;&lt;&#39;&#34;'),
-))
+@pytest.mark.parametrize(
+ ("value", "expect"),
+ (
+ # empty
+ (u"", u""),
+ # ascii
+ (u"abcd&><'\"efgh", u"abcd&amp;&gt;&lt;&#39;&#34;efgh"),
+ (u"&><'\"efgh", u"&amp;&gt;&lt;&#39;&#34;efgh"),
+ (u"abcd&><'\"", u"abcd&amp;&gt;&lt;&#39;&#34;"),
+ # 2 byte
+ (u"こんにちは&><'\"こんばんは", u"こんにちは&amp;&gt;&lt;&#39;&#34;こんばんは"),
+ (u"&><'\"こんばんは", u"&amp;&gt;&lt;&#39;&#34;こんばんは"),
+ (u"こんにちは&><'\"", u"こんにちは&amp;&gt;&lt;&#39;&#34;"),
+ # 4 byte
+ (
+ u"\U0001F363\U0001F362&><'\"\U0001F37A xyz",
+ u"\U0001F363\U0001F362&amp;&gt;&lt;&#39;&#34;\U0001F37A xyz",
+ ),
+ (u"&><'\"\U0001F37A xyz", u"&amp;&gt;&lt;&#39;&#34;\U0001F37A xyz"),
+ (u"\U0001F363\U0001F362&><'\"", u"\U0001F363\U0001F362&amp;&gt;&lt;&#39;&#34;"),
+ ),
+)
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>&lt;bad user&gt;</em>'),
+@pytest.mark.parametrize(
+ ("template", "data", "expect"),
(
- '<em>%(username)s</em>',
- {'username': '<bad user>'},
- '<em>&lt;bad user&gt;</em>'
+ ("<em>%s</em>", "<bad user>", "<em>&lt;bad user&gt;</em>"),
+ (
+ "<em>%(username)s</em>",
+ {"username": "<bad user>"},
+ "<em>&lt;bad user&gt;</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>&lt;foo&gt;:&lt;bar&gt;</em>')
+ result = Markup("<em>%s:%s</em>") % ("<foo>", "<bar>")
+ expect = Markup(u"<em>&lt;foo&gt;:&lt;bar&gt;</em>")
assert result == expect
def test_dict_interpol():
- result = Markup('<em>%(foo)s</em>') % {'foo': '<foo>'}
- expect = Markup(u'<em>&lt;foo&gt;</em>')
+ result = Markup("<em>%(foo)s</em>") % {"foo": "<foo>"}
+ expect = Markup(u"<em>&lt;foo&gt;</em>")
assert result == expect
- result = Markup('<em>%(foo)s:%(bar)s</em>') % {
- 'foo': '<foo>',
- 'bar': '<bar>',
- }
- expect = Markup(u'<em>&lt;foo&gt;:&lt;bar&gt;</em>')
+ result = Markup("<em>%(foo)s:%(bar)s</em>") % {"foo": "<foo>", "bar": "<bar>"}
+ expect = Markup(u"<em>&lt;foo&gt;:&lt;bar&gt;</em>")
assert result == expect
def test_escaping():
- assert escape('"<>&\'') == '&#34;&lt;&gt;&amp;&#39;'
+ assert escape("\"<>&'") == "&#34;&lt;&gt;&amp;&#39;"
assert Markup("<em>Foo &amp; 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&#x3b;'
+ original = "&foo&#x3b;"
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>&lt;awesome&gt;</em>'
+ result = Markup("<em>{awesome}</em>").format(awesome="<awesome>")
+ assert result == "<em>&lt;awesome&gt;</em>"
- result = Markup('{0[1][bar]}').format([0, {'bar': '<bar/>'}])
- assert result == '&lt;bar/&gt;'
+ result = Markup("{0[1][bar]}").format([0, {"bar": "<bar/>"}])
+ assert result == "&lt;bar/&gt;"
- 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'&lt;foo&gt;')
+ assert escape_silent("<foo>") == Markup(u"&lt;foo&gt;")
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)