MCPcopy Index your code
hub / github.com/python/cpython / test_debug_conversion

Method test_debug_conversion

Lib/test/test_fstring.py:1547–1673  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

1545 self.assertEqual(eval('f"\\\r"'), '')
1546
1547 def test_debug_conversion(self):
1548 x = 'A string'
1549 self.assertEqual(f'{x=}', 'x=' + repr(x))
1550 self.assertEqual(f'{x =}', 'x =' + repr(x))
1551 self.assertEqual(f'{x=!s}', 'x=' + str(x))
1552 self.assertEqual(f'{x=!r}', 'x=' + repr(x))
1553 self.assertEqual(f'{x=!a}', 'x=' + ascii(x))
1554
1555 x = 2.71828
1556 self.assertEqual(f'{x=:.2f}', 'x=' + format(x, '.2f'))
1557 self.assertEqual(f'{x=:}', 'x=' + format(x, ''))
1558 self.assertEqual(f'{x=!r:^20}', 'x=' + format(repr(x), '^20'))
1559 self.assertEqual(f'{x=!s:^20}', 'x=' + format(str(x), '^20'))
1560 self.assertEqual(f'{x=!a:^20}', 'x=' + format(ascii(x), '^20'))
1561
1562 x = 9
1563 self.assertEqual(f'{3*x+15=}', '3*x+15=42')
1564
1565 # There is code in ast.c that deals with non-ascii expression values. So,
1566 # use a unicode identifier to trigger that.
1567 tenπ = 31.4
1568 self.assertEqual(f'{tenπ=:.2f}', 'tenπ=31.40')
1569
1570 # Also test with Unicode in non-identifiers.
1571 self.assertEqual(f'{"Σ"=}', '"Σ"=\'Σ\'')
1572
1573 # Make sure nested fstrings still work.
1574 self.assertEqual(f'{f"{3.1415=:.1f}":*^20}', '*****3.1415=3.1*****')
1575
1576 # Make sure text before and after an expression with = works
1577 # correctly.
1578 pi = 'π'
1579 self.assertEqual(f'alpha α {pi=} ω omega', "alpha α pi='π' ω omega")
1580
1581 # Check multi-line expressions.
1582 self.assertEqual(f'''{
15833
1584=}''', '\n3\n=3')
1585
1586 # Since = is handled specially, make sure all existing uses of
1587 # it still work.
1588
1589 self.assertEqual(f'{0==1}', 'False')
1590 self.assertEqual(f'{0!=1}', 'True')
1591 self.assertEqual(f'{0<=1}', 'True')
1592 self.assertEqual(f'{0>=1}', 'False')
1593 self.assertEqual(f'{(x:="5")}', '5')
1594 self.assertEqual(x, '5')
1595 self.assertEqual(f'{(x:=5)}', '5')
1596 self.assertEqual(x, 5)
1597 self.assertEqual(f'{"="}', '=')
1598
1599 x = 20
1600 # This isn't an assignment expression, it's 'x', with a format
1601 # spec of '=10'. See test_walrus: you need to use parens.
1602 self.assertEqual(f'{x:=10}', ' 20')
1603
1604 # Test named function parameters, to make sure '=' parsing works

Callers

nothing calls this directly

Calls 8

assertEqualMethod · 0.95
assertRaisesMethod · 0.95
strFunction · 0.85
asciiFunction · 0.85
formatFunction · 0.85
nowMethod · 0.80
fFunction · 0.70
CClass · 0.70

Tested by

no test coverage detected