pre-commit-hooks/tests/debug_statement_hook_test.py
2023-07-05 23:50:20 +02:00

76 lines
2.2 KiB
Python

from __future__ import annotations
import ast
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_breakpoints():
visitor = DebugStatementParser()
visitor.visit(ast.parse("import os\nfrom foo import bar\n"))
assert visitor.breakpoints == []
def test_finds_debug_import_attribute_access():
visitor = DebugStatementParser()
visitor.visit(ast.parse("import ipdb; ipdb.set_trace()"))
assert visitor.breakpoints == [Debug(1, 0, "ipdb", "imported")]
def test_finds_debug_import_from_import():
visitor = DebugStatementParser()
visitor.visit(ast.parse("from pudb import set_trace; set_trace()"))
assert visitor.breakpoints == [Debug(1, 0, "pudb", "imported")]
def test_finds_debug_import_from_dunder_import():
visitor = DebugStatementParser()
visitor.visit(ast.parse("__import__('pdb').set_trace()"))
assert visitor.breakpoints == [Debug(1, 0, "pdb", "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 = main([str(f_py)])
assert ret == 1
def test_returns_one_for_failing_file_inline_pdb(tmpdir):
f_py = tmpdir.join("f.py")
f_py.write('def f():\n __import__("pdb").set_trace()')
ret = main([str(f_py)])
assert ret == 1
def test_returns_zero_for_passing_file():
ret = main([__file__])
assert ret == 0
def test_syntaxerror_file():
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 main((str(f_py),)) == 0
def test_py37_breakpoint(tmpdir, capsys):
f_py = tmpdir.join("f.py")
f_py.write("def f():\n breakpoint()\n")
assert main((str(f_py),)) == 1
out, _ = capsys.readouterr()
assert out == f"{f_py}:2:4: breakpoint called\n"