diff options
Diffstat (limited to 'Lib/test/test_ast.py')
-rw-r--r-- | Lib/test/test_ast.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index f35d9e6..3d12397 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -3,6 +3,7 @@ import dis import os import sys import unittest +import warnings import weakref from textwrap import dedent @@ -1662,6 +1663,56 @@ class EndPositionTests(unittest.TestCase): self.assertEqual(ast.get_source_segment(s, cdef.body[0], padded=True), s_method) +class NodeVisitorTests(unittest.TestCase): + def test_old_constant_nodes(self): + class Visitor(ast.NodeVisitor): + def visit_Num(self, node): + log.append((node.lineno, 'Num', node.n)) + def visit_Str(self, node): + log.append((node.lineno, 'Str', node.s)) + def visit_Bytes(self, node): + log.append((node.lineno, 'Bytes', node.s)) + def visit_NameConstant(self, node): + log.append((node.lineno, 'NameConstant', node.value)) + def visit_Ellipsis(self, node): + log.append((node.lineno, 'Ellipsis', ...)) + mod = ast.parse(dedent('''\ + i = 42 + f = 4.25 + c = 4.25j + s = 'string' + b = b'bytes' + t = True + n = None + e = ... + ''')) + visitor = Visitor() + log = [] + with warnings.catch_warnings(record=True) as wlog: + warnings.filterwarnings('always', '', DeprecationWarning) + visitor.visit(mod) + self.assertEqual(log, [ + (1, 'Num', 42), + (2, 'Num', 4.25), + (3, 'Num', 4.25j), + (4, 'Str', 'string'), + (5, 'Bytes', b'bytes'), + (6, 'NameConstant', True), + (7, 'NameConstant', None), + (8, 'Ellipsis', ...), + ]) + self.assertEqual([str(w.message) for w in wlog], [ + 'visit_Num is deprecated; add visit_Constant', + 'visit_Num is deprecated; add visit_Constant', + 'visit_Num is deprecated; add visit_Constant', + 'visit_Str is deprecated; add visit_Constant', + 'visit_Bytes is deprecated; add visit_Constant', + 'visit_NameConstant is deprecated; add visit_Constant', + 'visit_NameConstant is deprecated; add visit_Constant', + 'visit_Ellipsis is deprecated; add visit_Constant', + ]) + + def main(): if __name__ != '__main__': return |