")
def test_complex_custom_formatting() -> None:
class User:
def __init__(self, id: int, username: str) -> None:
self.id = id
self.username = username
def __html_format__(self, format_spec: str) -> Markup:
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) -> Markup:
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() -> None:
class Stringable:
def __str__(self) -> str:
return "строка"
assert Markup("{s}").format(s=Stringable()) == Markup("строка")
def test_escape_silent() -> None:
assert escape_silent(None) == Markup()
assert escape(None) == Markup(None)
assert escape_silent("") == Markup("<foo>")
def test_splitting() -> None:
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() -> None:
assert Markup("a") * 3 == Markup("aaa")
def test_escape_return_type() -> None:
assert isinstance(escape("a"), Markup)
assert isinstance(escape(Markup("a")), Markup)
class Foo:
def __html__(self) -> str:
return "Foo"
assert isinstance(escape(Foo()), Markup)
def test_soft_str() -> None:
assert type(soft_str("")) is str # noqa: E721
assert type(soft_str(Markup())) is Markup # noqa: E721
assert type(soft_str(15)) is str # noqa: E721