")
def test_complex_custom_formatting():
class User:
def __init__(self, id, username):
self.id = id
self.username = username
def __html_format__(self, format_spec):
if format_spec == "link":
return Markup('{1}').format(
self.id, self.__html__()
)
elif format_spec:
raise ValueError("Invalid format spec")
return self.__html__()
def __html__(self):
return Markup("{0}").format(self.username)
user = User(1, "foo")
result = Markup("User: {0:link}").format(user)
expect = Markup('
User: foo')
assert result == expect
def test_formatting_with_objects():
class Stringable:
def __str__(self):
return "строка"
assert Markup("{s}").format(s=Stringable()) == Markup("строка")
def test_escape_silent(escape, escape_silent):
assert escape_silent(None) == Markup()
assert escape(None) == Markup(None)
assert escape_silent("") == Markup("<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
def test_mul():
assert Markup("a") * 3 == Markup("aaa")
def test_escape_return_type(escape):
assert isinstance(escape("a"), Markup)
assert isinstance(escape(Markup("a")), Markup)
class Foo:
def __html__(self):
return "Foo"
assert isinstance(escape(Foo()), Markup)
def test_soft_str(soft_str):
assert type(soft_str("")) is str
assert type(soft_str(Markup())) is Markup
assert type(soft_str(15)) is str
def test_soft_unicode_deprecated(soft_unicode):
with pytest.warns(DeprecationWarning):
assert type(soft_unicode(Markup())) is Markup
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1614200118.0
MarkupSafe-2.0.1/tox.ini 0000644 0001750 0001750 00000001015 00000000000 014021 0 ustar 00david david [tox]
envlist =
py{39,38,37,36,py3}
style
typing
docs
skip_missing_interpreters = true
[testenv]
deps = -r requirements/tests.txt
commands = pytest -v --tb=short --basetemp={envtmpdir} {posargs}
[testenv:style]
deps = pre-commit
skip_install = true
commands = pre-commit run --all-files --show-diff-on-failure
[testenv:typing]
deps = -r requirements/typing.txt
commands = mypy
[testenv:docs]
deps = -r requirements/docs.txt
commands = sphinx-build -W -b html -d {envtmpdir}/doctrees docs {envtmpdir}/html