debug-statements: detect python3.7+ breakpoint()

This commit is contained in:
Anthony Sottile 2018-05-13 15:24:42 -07:00
parent 6e2e83a409
commit 18b3ab7cd2
3 changed files with 58 additions and 49 deletions

View file

@ -4,48 +4,60 @@ from __future__ import unicode_literals
import ast
from pre_commit_hooks.debug_statement_hook import debug_statement_hook
from pre_commit_hooks.debug_statement_hook import DebugStatement
from pre_commit_hooks.debug_statement_hook import ImportStatementParser
from pre_commit_hooks.debug_statement_hook import Debug
from pre_commit_hooks.debug_statement_hook import DebugStatementParser
from pre_commit_hooks.debug_statement_hook import main
from testing.util import get_resource_path
def test_no_debug_imports():
visitor = ImportStatementParser()
def test_no_breakpoints():
visitor = DebugStatementParser()
visitor.visit(ast.parse('import os\nfrom foo import bar\n'))
assert visitor.debug_import_statements == []
assert visitor.breakpoints == []
def test_finds_debug_import_attribute_access():
visitor = ImportStatementParser()
visitor = DebugStatementParser()
visitor.visit(ast.parse('import ipdb; ipdb.set_trace()'))
assert visitor.debug_import_statements == [DebugStatement('ipdb', 1, 0)]
assert visitor.breakpoints == [Debug(1, 0, 'ipdb', 'imported')]
def test_finds_debug_import_from_import():
visitor = ImportStatementParser()
visitor = DebugStatementParser()
visitor.visit(ast.parse('from pudb import set_trace; set_trace()'))
assert visitor.debug_import_statements == [DebugStatement('pudb', 1, 0)]
assert visitor.breakpoints == [Debug(1, 0, 'pudb', 'imported')]
def test_finds_breakpoint():
visitor = DebugStatementParser()
visitor.visit(ast.parse('breakpoint()'))
assert visitor.breakpoints == [Debug(1, 0, 'breakpoint', 'called')]
def test_returns_one_for_failing_file(tmpdir):
f_py = tmpdir.join('f.py')
f_py.write('def f():\n import pdb; pdb.set_trace()')
ret = debug_statement_hook([f_py.strpath])
ret = main([f_py.strpath])
assert ret == 1
def test_returns_zero_for_passing_file():
ret = debug_statement_hook([__file__])
ret = main([__file__])
assert ret == 0
def test_syntaxerror_file():
ret = debug_statement_hook([get_resource_path('cannot_parse_ast.notpy')])
ret = main([get_resource_path('cannot_parse_ast.notpy')])
assert ret == 1
def test_non_utf8_file(tmpdir):
f_py = tmpdir.join('f.py')
f_py.write_binary('# -*- coding: cp1252 -*-\nx = ""\n'.encode('cp1252'))
assert debug_statement_hook((f_py.strpath,)) == 0
assert main((f_py.strpath,)) == 0
def test_py37_breakpoint(tmpdir):
f_py = tmpdir.join('f.py')
f_py.write('def f():\n breakpoint()\n')
assert main((f_py.strpath,)) == 1