mirror of
https://github.com/pre-commit/pre-commit-hooks.git
synced 2026-04-02 10:56:52 +00:00
114 lines
3.3 KiB
Python
114 lines
3.3 KiB
Python
import ast
|
|
|
|
import pytest
|
|
|
|
from pre_commit_hooks.check_builtin_literals import BuiltinTypeCall
|
|
from pre_commit_hooks.check_builtin_literals import BuiltinTypeVisitor
|
|
from pre_commit_hooks.check_builtin_literals import main
|
|
from testing.util import get_resource_path
|
|
|
|
|
|
@pytest.fixture
|
|
def visitor():
|
|
return BuiltinTypeVisitor()
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('expression', 'calls'),
|
|
[
|
|
# complex
|
|
("0j", []),
|
|
("complex()", [BuiltinTypeCall('complex', 1, 0)]),
|
|
("complex(0, 0)", []),
|
|
("complex('0+0j')", []),
|
|
('builtins.complex()', []),
|
|
# float
|
|
("0.0", []),
|
|
("float()", [BuiltinTypeCall('float', 1, 0)]),
|
|
("float('0.0')", []),
|
|
('builtins.float()', []),
|
|
# int
|
|
("0", []),
|
|
("int()", [BuiltinTypeCall('int', 1, 0)]),
|
|
("int('0')", []),
|
|
('builtins.int()', []),
|
|
# list
|
|
("[]", []),
|
|
("list()", [BuiltinTypeCall('list', 1, 0)]),
|
|
("list('abc')", []),
|
|
("list([c for c in 'abc'])", []),
|
|
("list(c for c in 'abc')", []),
|
|
('builtins.list()', []),
|
|
# str
|
|
("''", []),
|
|
("str()", [BuiltinTypeCall('str', 1, 0)]),
|
|
("str('0')", []),
|
|
('builtins.str()', []),
|
|
# tuple
|
|
("()", []),
|
|
("tuple()", [BuiltinTypeCall('tuple', 1, 0)]),
|
|
("tuple('abc')", []),
|
|
("tuple([c for c in 'abc'])", []),
|
|
("tuple(c for c in 'abc')", []),
|
|
('builtins.tuple()', []),
|
|
],
|
|
)
|
|
def test_non_dict_exprs(visitor, expression, calls):
|
|
visitor.visit(ast.parse(expression))
|
|
assert visitor.builtin_type_calls == calls
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('expression', 'calls'),
|
|
[
|
|
("{}", []),
|
|
("dict()", [BuiltinTypeCall('dict', 1, 0)]),
|
|
("dict(a=1, b=2, c=3)", []),
|
|
("dict(**{'a': 1, 'b': 2, 'c': 3})", []),
|
|
("dict([(k, v) for k, v in [('a', 1), ('b', 2), ('c', 3)]])", []),
|
|
("dict((k, v) for k, v in [('a', 1), ('b', 2), ('c', 3)])", []),
|
|
('builtins.dict()', []),
|
|
],
|
|
)
|
|
def test_dict_allow_kwargs_exprs(visitor, expression, calls):
|
|
visitor.visit(ast.parse(expression))
|
|
assert visitor.builtin_type_calls == calls
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('expression', 'calls'),
|
|
[
|
|
("dict()", [BuiltinTypeCall('dict', 1, 0)]),
|
|
("dict(a=1, b=2, c=3)", [BuiltinTypeCall('dict', 1, 0)]),
|
|
("dict(**{'a': 1, 'b': 2, 'c': 3})", [BuiltinTypeCall('dict', 1, 0)]),
|
|
('builtins.dict()', []),
|
|
],
|
|
)
|
|
def test_dict_no_allow_kwargs_exprs(expression, calls):
|
|
visitor = BuiltinTypeVisitor(allow_dict_kwargs=False)
|
|
visitor.visit(ast.parse(expression))
|
|
assert visitor.builtin_type_calls == calls
|
|
|
|
|
|
def test_ignore_constructors():
|
|
visitor = BuiltinTypeVisitor(ignore=('complex', 'dict', 'float', 'int', 'list', 'str', 'tuple'))
|
|
visitor.visit(ast.parse(open(get_resource_path('builtin_constructors.py'), 'rb').read(), 'builtin_constructors.py'))
|
|
assert visitor.builtin_type_calls == []
|
|
|
|
|
|
def test_failing_file():
|
|
rc = main([get_resource_path('builtin_constructors.py')])
|
|
assert rc == 1
|
|
|
|
|
|
def test_passing_file():
|
|
rc = main([get_resource_path('builtin_literals.py')])
|
|
assert rc == 0
|
|
|
|
|
|
def test_failing_file_ignore_all():
|
|
rc = main([
|
|
'--ignore=complex,dict,float,int,list,str,tuple',
|
|
get_resource_path('builtin_constructors.py'),
|
|
])
|
|
assert rc == 0
|