forked from Rust-related/RustPython
42 lines
998 B
Python
42 lines
998 B
Python
foo = 'bar'
|
|
|
|
assert f"{''}" == ''
|
|
assert f"{f'{foo}'}" == 'bar'
|
|
assert f"foo{foo}" == 'foobar'
|
|
assert f"{foo}foo" == 'barfoo'
|
|
assert f"foo{foo}foo" == 'foobarfoo'
|
|
assert f"{{foo}}" == '{foo}'
|
|
assert f"{ {foo} }" == "{'bar'}"
|
|
assert f"{f'{{}}'}" == '{}' # don't include escaped braces in nested f-strings
|
|
assert f'{f"{{"}' == '{'
|
|
assert f'{f"}}"}' == '}'
|
|
assert f'{foo}' f"{foo}" 'foo' == 'barbarfoo'
|
|
assert f'{"!:"}' == '!:'
|
|
assert fr'x={4*10}\n' == 'x=40\\n'
|
|
assert f'{16:0>+#10x}' == '00000+0x10'
|
|
assert f"{{{(lambda x: f'hello, {x}')('world}')}" == '{hello, world}'
|
|
|
|
# Normally `!` cannot appear outside of delimiters in the expression but
|
|
# cpython makes an exception for `!=`, so we should too.
|
|
|
|
# assert f'{1 != 2}' == 'True'
|
|
|
|
|
|
# conversion flags
|
|
|
|
class Value:
|
|
def __format__(self, spec):
|
|
return "foo"
|
|
|
|
def __repr__(self):
|
|
return "bar"
|
|
|
|
def __str__(self):
|
|
return "baz"
|
|
|
|
v = Value()
|
|
|
|
assert f'{v}' == 'foo'
|
|
assert f'{v!r}' == 'bar'
|
|
assert f'{v!s}' == 'baz'
|