| assert_eq('abc'.format(), "abc") |
| |
| # named arguments |
| assert_eq('x{key}x'.format(key = 2), "x2x") |
| assert_eq('x{key}x'.format(key = 'abc'), "xabcx") |
| assert_eq('{a}{b}{a}{b}'.format(a = 3, b = True), "3True3True") |
| assert_eq('{a}{b}{a}{b}'.format(a = 3, b = True), "3True3True") |
| assert_eq('{s1}{s2}'.format(s1 = ['a'], s2 = 'a'), "[\"a\"]a") |
| assert_eq('{a}'.format(a = '$'), "$") |
| assert_eq('{a}'.format(a = '$a'), "$a") |
| assert_eq('{a}$'.format(a = '$a'), "$a$") |
| assert_eq('{(}'.format(**{'(': 2}), "2") |
| |
| # curly brace escaping |
| assert_eq('{{}}'.format(), "{}") |
| assert_eq('{{}}'.format(42), "{}") |
| assert_eq('{{ }}'.format(), "{ }") |
| assert_eq('{{ }}'.format(42), "{ }") |
| assert_eq('{{{{}}}}'.format(), "{{}}") |
| assert_eq('{{{{}}}}'.format(42), "{{}}") |
| assert_eq('{{0}}'.format(42), "{0}") |
| assert_eq('{{}}'.format(42), "{}") |
| assert_eq('{{{}}}'.format(42), "{42}") |
| assert_eq('{{ '.format(42), "{ " ) |
| assert_eq(' }}'.format(42), " }") |
| assert_eq('{{ {}'.format(42), "{ 42") |
| assert_eq('{} }}'.format(42), "42 }") |
| assert_eq('{{0}}'.format(42), "{0}") |
| assert_eq('{{{0}}}'.format(42), "{42}") |
| assert_eq('{{ 0'.format(42), "{ 0") |
| assert_eq('0 }}'.format(42), "0 }") |
| assert_eq('{{ {0}'.format(42), "{ 42") |
| assert_eq('{0} }}'.format(42), "42 }") |
| assert_eq('{{test}}'.format(test = 42), "{test}") |
| assert_eq('{{{test}}}'.format(test = 42), "{42}") |
| assert_eq('{{ test'.format(test = 42), "{ test") |
| assert_eq('test }}'.format(test = 42), "test }") |
| assert_eq('{{ {test}'.format(test = 42), "{ 42") |
| assert_eq('{test} }}'.format(test = 42), "42 }") |
| |
| |
| # Automatic positionals |
| assert_eq('{}, {} {} {} test'.format('hi', 'this', 'is', 'a'), "hi, this is a test") |
| assert_eq('skip some {}'.format('arguments', 'obsolete', 'deprecated'), "skip some arguments") |
| |
| # with numbered positions |
| assert_eq('{0}, {1} {2} {3} test'.format('hi', 'this', 'is', 'a'), "hi, this is a test") |
| assert_eq('{3}, {2} {1} {0} test'.format('a', 'is', 'this', 'hi'), "hi, this is a test") |
| assert_eq('skip some {0}'.format('arguments', 'obsolete', 'deprecated'), "skip some arguments") |
| assert_eq('{0} can be reused: {0}'.format('this', 'obsolete'), "this can be reused: this") |
| |
| # Mixed fields |
| assert_eq('{test} and {}'.format(2, test = 1), "1 and 2") |
| assert_eq('{test} and {0}'.format(2, test = 1), "1 and 2") |
| |
| --- |
| '{{}'.format(1) ### Found '}' without matching '{' |
| --- |
| '{}}'.format(1) ### Found '}' without matching '{' |
| --- |
| '{0}'.format() ### No replacement found for index 0 |
| --- |
| '{0} and {1}'.format('this') ### No replacement found for index 1 |
| --- |
| '{0} and {2}'.format('this', 'that') ### No replacement found for index 2 |
| --- |
| '{-0} and {-1}'.format('this', 'that') ### No replacement found for index -1 |
| --- |
| '{0,1} and {1}'.format('this', 'that') ### Invalid character ',' inside replacement field |
| --- |
| '{0.1} and {1}'.format('this', 'that') ### Invalid character '.' inside replacement field |
| --- |
| '{}'.format() ### No replacement found for index 0 |
| --- |
| '{} and {}'.format('this') ### No replacement found for index 1 |
| --- |
| '{test} and {}'.format(test = 1, 2) ### non-keyword arg after keyword arg |
| --- |
| '{test} and {0}'.format(test = 1, 2) ### non-keyword arg after keyword arg |
| --- |
| '{} and {1}'.format(1, 2) ### Cannot mix manual and automatic numbering of positional fields |
| --- |
| '{1} and {}'.format(1, 2) ### Cannot mix manual and automatic numbering of positional fields |
| --- |
| '{test.}'.format(test = 1) ### Invalid character '.' inside replacement field |
| --- |
| '{test[}'.format(test = 1) ### Invalid character '\[' inside replacement field |
| --- |
| '{test,}'.format(test = 1) ### Invalid character ',' inside replacement field |
| --- |
| '{ {} }'.format(42) ### Nested replacement fields are not supported |
| --- |
| '{a}{b}'.format(a = 5) ### Missing argument 'b' |