blob: 8832245faff37b18060afb8c67fe595bb9fb4fc2 [file] [log] [blame]
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import unicode_literals
import ast
import pytest
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 testing.util import get_resource_path
@pytest.fixture
def ast_with_no_debug_imports():
return ast.parse(
"""
import foo
import bar
import baz
from foo import bar
""",
)
@pytest.fixture
def ast_with_debug_import_form_1():
return ast.parse(
"""
import ipdb; ipdb.set_trace()
""",
)
@pytest.fixture
def ast_with_debug_import_form_2():
return ast.parse(
"""
from pudb import set_trace; set_trace()
""",
)
def test_returns_no_debug_statements(ast_with_no_debug_imports):
visitor = ImportStatementParser()
visitor.visit(ast_with_no_debug_imports)
assert visitor.debug_import_statements == []
def test_returns_one_form_1(ast_with_debug_import_form_1):
visitor = ImportStatementParser()
visitor.visit(ast_with_debug_import_form_1)
assert visitor.debug_import_statements == [
DebugStatement('ipdb', 3, 0),
]
def test_returns_one_form_2(ast_with_debug_import_form_2):
visitor = ImportStatementParser()
visitor.visit(ast_with_debug_import_form_2)
assert visitor.debug_import_statements == [
DebugStatement('pudb', 3, 0),
]
def test_returns_one_for_failing_file():
ret = debug_statement_hook([get_resource_path('file_with_debug.notpy')])
assert ret == 1
def test_returns_zero_for_passing_file():
ret = debug_statement_hook([__file__])
assert ret == 0
def test_syntaxerror_file():
ret = debug_statement_hook([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