Apply typing to all of pre-commit-hooks
diff --git a/tests/check_ast_test.py b/tests/check_ast_test.py
index 64916ba..c16f5fc 100644
--- a/tests/check_ast_test.py
+++ b/tests/check_ast_test.py
@@ -1,15 +1,15 @@
 from __future__ import absolute_import
 from __future__ import unicode_literals
 
-from pre_commit_hooks.check_ast import check_ast
+from pre_commit_hooks.check_ast import main
 from testing.util import get_resource_path
 
 
 def test_failing_file():
-    ret = check_ast([get_resource_path('cannot_parse_ast.notpy')])
+    ret = main([get_resource_path('cannot_parse_ast.notpy')])
     assert ret == 1
 
 
 def test_passing_file():
-    ret = check_ast([__file__])
+    ret = main([__file__])
     assert ret == 0
diff --git a/tests/check_builtin_literals_test.py b/tests/check_builtin_literals_test.py
index 86b79e3..d4ac30f 100644
--- a/tests/check_builtin_literals_test.py
+++ b/tests/check_builtin_literals_test.py
@@ -5,7 +5,35 @@
 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
+
+BUILTIN_CONSTRUCTORS = '''\
+from six.moves import builtins
+
+c1 = complex()
+d1 = dict()
+f1 = float()
+i1 = int()
+l1 = list()
+s1 = str()
+t1 = tuple()
+
+c2 = builtins.complex()
+d2 = builtins.dict()
+f2 = builtins.float()
+i2 = builtins.int()
+l2 = builtins.list()
+s2 = builtins.str()
+t2 = builtins.tuple()
+'''
+BUILTIN_LITERALS = '''\
+c1 = 0j
+d1 = {}
+f1 = 0.0
+i1 = 0
+l1 = []
+s1 = ''
+t1 = ()
+'''
 
 
 @pytest.fixture
@@ -94,24 +122,26 @@
 
 def test_ignore_constructors():
     visitor = BuiltinTypeVisitor(ignore=('complex', 'dict', 'float', 'int', 'list', 'str', 'tuple'))
-    with open(get_resource_path('builtin_constructors.py'), 'rb') as f:
-        visitor.visit(ast.parse(f.read(), 'builtin_constructors.py'))
+    visitor.visit(ast.parse(BUILTIN_CONSTRUCTORS))
     assert visitor.builtin_type_calls == []
 
 
-def test_failing_file():
-    rc = main([get_resource_path('builtin_constructors.py')])
+def test_failing_file(tmpdir):
+    f = tmpdir.join('f.py')
+    f.write(BUILTIN_CONSTRUCTORS)
+    rc = main([f.strpath])
     assert rc == 1
 
 
-def test_passing_file():
-    rc = main([get_resource_path('builtin_literals.py')])
+def test_passing_file(tmpdir):
+    f = tmpdir.join('f.py')
+    f.write(BUILTIN_LITERALS)
+    rc = main([f.strpath])
     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'),
-    ])
+def test_failing_file_ignore_all(tmpdir):
+    f = tmpdir.join('f.py')
+    f.write(BUILTIN_CONSTRUCTORS)
+    rc = main(['--ignore=complex,dict,float,int,list,str,tuple', f.strpath])
     assert rc == 0
diff --git a/tests/check_json_test.py b/tests/check_json_test.py
index 6ba26c1..6654ed1 100644
--- a/tests/check_json_test.py
+++ b/tests/check_json_test.py
@@ -1,6 +1,6 @@
 import pytest
 
-from pre_commit_hooks.check_json import check_json
+from pre_commit_hooks.check_json import main
 from testing.util import get_resource_path
 
 
@@ -11,8 +11,8 @@
         ('ok_json.json', 0),
     ),
 )
-def test_check_json(capsys, filename, expected_retval):
-    ret = check_json([get_resource_path(filename)])
+def test_main(capsys, filename, expected_retval):
+    ret = main([get_resource_path(filename)])
     assert ret == expected_retval
     if expected_retval == 1:
         stdout, _ = capsys.readouterr()
diff --git a/tests/check_merge_conflict_test.py b/tests/check_merge_conflict_test.py
index b04c70e..50e389c 100644
--- a/tests/check_merge_conflict_test.py
+++ b/tests/check_merge_conflict_test.py
@@ -6,7 +6,7 @@
 
 import pytest
 
-from pre_commit_hooks.check_merge_conflict import detect_merge_conflict
+from pre_commit_hooks.check_merge_conflict import main
 from pre_commit_hooks.util import cmd_output
 from testing.util import get_resource_path
 
@@ -102,7 +102,7 @@
 
 @pytest.mark.usefixtures('f1_is_a_conflict_file')
 def test_merge_conflicts_git():
-    assert detect_merge_conflict(['f1']) == 1
+    assert main(['f1']) == 1
 
 
 @pytest.mark.parametrize(
@@ -110,7 +110,7 @@
 )
 def test_merge_conflicts_failing(contents, repository_pending_merge):
     repository_pending_merge.join('f2').write_binary(contents)
-    assert detect_merge_conflict(['f2']) == 1
+    assert main(['f2']) == 1
 
 
 @pytest.mark.parametrize(
@@ -118,22 +118,22 @@
 )
 def test_merge_conflicts_ok(contents, f1_is_a_conflict_file):
     f1_is_a_conflict_file.join('f1').write_binary(contents)
-    assert detect_merge_conflict(['f1']) == 0
+    assert main(['f1']) == 0
 
 
 @pytest.mark.usefixtures('f1_is_a_conflict_file')
 def test_ignores_binary_files():
     shutil.copy(get_resource_path('img1.jpg'), 'f1')
-    assert detect_merge_conflict(['f1']) == 0
+    assert main(['f1']) == 0
 
 
 def test_does_not_care_when_not_in_a_merge(tmpdir):
     f = tmpdir.join('README.md')
     f.write_binary(b'problem\n=======\n')
-    assert detect_merge_conflict([str(f.realpath())]) == 0
+    assert main([str(f.realpath())]) == 0
 
 
 def test_care_when_assumed_merge(tmpdir):
     f = tmpdir.join('README.md')
     f.write_binary(b'problem\n=======\n')
-    assert detect_merge_conflict([str(f.realpath()), '--assume-in-merge']) == 1
+    assert main([str(f.realpath()), '--assume-in-merge']) == 1
diff --git a/tests/check_symlinks_test.py b/tests/check_symlinks_test.py
index 0414df5..ecbc7ae 100644
--- a/tests/check_symlinks_test.py
+++ b/tests/check_symlinks_test.py
@@ -2,7 +2,7 @@
 
 import pytest
 
-from pre_commit_hooks.check_symlinks import check_symlinks
+from pre_commit_hooks.check_symlinks import main
 
 
 xfail_symlink = pytest.mark.xfail(os.name == 'nt', reason='No symlink support')
@@ -12,12 +12,12 @@
 @pytest.mark.parametrize(
     ('dest', 'expected'), (('exists', 0), ('does-not-exist', 1)),
 )
-def test_check_symlinks(tmpdir, dest, expected):  # pragma: no cover (symlinks)
+def test_main(tmpdir, dest, expected):  # pragma: no cover (symlinks)
     tmpdir.join('exists').ensure()
     symlink = tmpdir.join('symlink')
     symlink.mksymlinkto(tmpdir.join(dest))
-    assert check_symlinks((symlink.strpath,)) == expected
+    assert main((symlink.strpath,)) == expected
 
 
-def test_check_symlinks_normal_file(tmpdir):
-    assert check_symlinks((tmpdir.join('f').ensure().strpath,)) == 0
+def test_main_normal_file(tmpdir):
+    assert main((tmpdir.join('f').ensure().strpath,)) == 0
diff --git a/tests/check_xml_test.py b/tests/check_xml_test.py
index 84e365d..357bad6 100644
--- a/tests/check_xml_test.py
+++ b/tests/check_xml_test.py
@@ -1,6 +1,6 @@
 import pytest
 
-from pre_commit_hooks.check_xml import check_xml
+from pre_commit_hooks.check_xml import main
 from testing.util import get_resource_path
 
 
@@ -10,6 +10,6 @@
         ('ok_xml.xml', 0),
     ),
 )
-def test_check_xml(filename, expected_retval):
-    ret = check_xml([get_resource_path(filename)])
+def test_main(filename, expected_retval):
+    ret = main([get_resource_path(filename)])
     assert ret == expected_retval
diff --git a/tests/check_yaml_test.py b/tests/check_yaml_test.py
index aa357f1..d267150 100644
--- a/tests/check_yaml_test.py
+++ b/tests/check_yaml_test.py
@@ -3,7 +3,7 @@
 
 import pytest
 
-from pre_commit_hooks.check_yaml import check_yaml
+from pre_commit_hooks.check_yaml import main
 from testing.util import get_resource_path
 
 
@@ -13,29 +13,29 @@
         ('ok_yaml.yaml', 0),
     ),
 )
-def test_check_yaml(filename, expected_retval):
-    ret = check_yaml([get_resource_path(filename)])
+def test_main(filename, expected_retval):
+    ret = main([get_resource_path(filename)])
     assert ret == expected_retval
 
 
-def test_check_yaml_allow_multiple_documents(tmpdir):
+def test_main_allow_multiple_documents(tmpdir):
     f = tmpdir.join('test.yaml')
     f.write('---\nfoo\n---\nbar\n')
 
     # should fail without the setting
-    assert check_yaml((f.strpath,))
+    assert main((f.strpath,))
 
     # should pass when we allow multiple documents
-    assert not check_yaml(('--allow-multiple-documents', f.strpath))
+    assert not main(('--allow-multiple-documents', f.strpath))
 
 
 def test_fails_even_with_allow_multiple_documents(tmpdir):
     f = tmpdir.join('test.yaml')
     f.write('[')
-    assert check_yaml(('--allow-multiple-documents', f.strpath))
+    assert main(('--allow-multiple-documents', f.strpath))
 
 
-def test_check_yaml_unsafe(tmpdir):
+def test_main_unsafe(tmpdir):
     f = tmpdir.join('test.yaml')
     f.write(
         'some_foo: !vault |\n'
@@ -43,12 +43,12 @@
         '    deadbeefdeadbeefdeadbeef\n',
     )
     # should fail "safe" check
-    assert check_yaml((f.strpath,))
+    assert main((f.strpath,))
     # should pass when we allow unsafe documents
-    assert not check_yaml(('--unsafe', f.strpath))
+    assert not main(('--unsafe', f.strpath))
 
 
-def test_check_yaml_unsafe_still_fails_on_syntax_errors(tmpdir):
+def test_main_unsafe_still_fails_on_syntax_errors(tmpdir):
     f = tmpdir.join('test.yaml')
     f.write('[')
-    assert check_yaml(('--unsafe', f.strpath))
+    assert main(('--unsafe', f.strpath))
diff --git a/tests/detect_private_key_test.py b/tests/detect_private_key_test.py
index fdd63a2..9266f2b 100644
--- a/tests/detect_private_key_test.py
+++ b/tests/detect_private_key_test.py
@@ -1,6 +1,6 @@
 import pytest
 
-from pre_commit_hooks.detect_private_key import detect_private_key
+from pre_commit_hooks.detect_private_key import main
 
 # Input, expected return value
 TESTS = (
@@ -18,7 +18,7 @@
 
 
 @pytest.mark.parametrize(('input_s', 'expected_retval'), TESTS)
-def test_detect_private_key(input_s, expected_retval, tmpdir):
+def test_main(input_s, expected_retval, tmpdir):
     path = tmpdir.join('file.txt')
     path.write_binary(input_s)
-    assert detect_private_key([path.strpath]) == expected_retval
+    assert main([path.strpath]) == expected_retval
diff --git a/tests/end_of_file_fixer_test.py b/tests/end_of_file_fixer_test.py
index f8710af..7f644e7 100644
--- a/tests/end_of_file_fixer_test.py
+++ b/tests/end_of_file_fixer_test.py
@@ -2,8 +2,8 @@
 
 import pytest
 
-from pre_commit_hooks.end_of_file_fixer import end_of_file_fixer
 from pre_commit_hooks.end_of_file_fixer import fix_file
+from pre_commit_hooks.end_of_file_fixer import main
 
 
 # Input, expected return value, expected output
@@ -35,7 +35,7 @@
     path = tmpdir.join('file.txt')
     path.write_binary(input_s)
 
-    ret = end_of_file_fixer([path.strpath])
+    ret = main([path.strpath])
     file_output = path.read_binary()
 
     assert file_output == output
diff --git a/tests/no_commit_to_branch_test.py b/tests/no_commit_to_branch_test.py
index c275bf7..e978ba2 100644
--- a/tests/no_commit_to_branch_test.py
+++ b/tests/no_commit_to_branch_test.py
@@ -11,24 +11,24 @@
 def test_other_branch(temp_git_dir):
     with temp_git_dir.as_cwd():
         cmd_output('git', 'checkout', '-b', 'anotherbranch')
-        assert is_on_branch(('master',)) is False
+        assert is_on_branch({'master'}) is False
 
 
 def test_multi_branch(temp_git_dir):
     with temp_git_dir.as_cwd():
         cmd_output('git', 'checkout', '-b', 'another/branch')
-        assert is_on_branch(('master',)) is False
+        assert is_on_branch({'master'}) is False
 
 
 def test_multi_branch_fail(temp_git_dir):
     with temp_git_dir.as_cwd():
         cmd_output('git', 'checkout', '-b', 'another/branch')
-        assert is_on_branch(('another/branch',)) is True
+        assert is_on_branch({'another/branch'}) is True
 
 
 def test_master_branch(temp_git_dir):
     with temp_git_dir.as_cwd():
-        assert is_on_branch(('master',)) is True
+        assert is_on_branch({'master'}) is True
 
 
 def test_main_branch_call(temp_git_dir):
diff --git a/tests/pretty_format_json_test.py b/tests/pretty_format_json_test.py
index 7ce7e16..8d82d74 100644
--- a/tests/pretty_format_json_test.py
+++ b/tests/pretty_format_json_test.py
@@ -3,8 +3,8 @@
 import pytest
 from six import PY2
 
+from pre_commit_hooks.pretty_format_json import main
 from pre_commit_hooks.pretty_format_json import parse_num_to_int
-from pre_commit_hooks.pretty_format_json import pretty_format_json
 from testing.util import get_resource_path
 
 
@@ -23,8 +23,8 @@
         ('pretty_formatted_json.json', 0),
     ),
 )
-def test_pretty_format_json(filename, expected_retval):
-    ret = pretty_format_json([get_resource_path(filename)])
+def test_main(filename, expected_retval):
+    ret = main([get_resource_path(filename)])
     assert ret == expected_retval
 
 
@@ -36,8 +36,8 @@
         ('pretty_formatted_json.json', 0),
     ),
 )
-def test_unsorted_pretty_format_json(filename, expected_retval):
-    ret = pretty_format_json(['--no-sort-keys', get_resource_path(filename)])
+def test_unsorted_main(filename, expected_retval):
+    ret = main(['--no-sort-keys', get_resource_path(filename)])
     assert ret == expected_retval
 
 
@@ -51,17 +51,17 @@
         ('tab_pretty_formatted_json.json', 0),
     ),
 )
-def test_tab_pretty_format_json(filename, expected_retval):  # pragma: no cover
-    ret = pretty_format_json(['--indent', '\t', get_resource_path(filename)])
+def test_tab_main(filename, expected_retval):  # pragma: no cover
+    ret = main(['--indent', '\t', get_resource_path(filename)])
     assert ret == expected_retval
 
 
-def test_non_ascii_pretty_format_json():
-    ret = pretty_format_json(['--no-ensure-ascii', get_resource_path('non_ascii_pretty_formatted_json.json')])
+def test_non_ascii_main():
+    ret = main(['--no-ensure-ascii', get_resource_path('non_ascii_pretty_formatted_json.json')])
     assert ret == 0
 
 
-def test_autofix_pretty_format_json(tmpdir):
+def test_autofix_main(tmpdir):
     srcfile = tmpdir.join('to_be_json_formatted.json')
     shutil.copyfile(
         get_resource_path('not_pretty_formatted_json.json'),
@@ -69,30 +69,30 @@
     )
 
     # now launch the autofix on that file
-    ret = pretty_format_json(['--autofix', srcfile.strpath])
+    ret = main(['--autofix', srcfile.strpath])
     # it should have formatted it
     assert ret == 1
 
     # file was formatted (shouldn't trigger linter again)
-    ret = pretty_format_json([srcfile.strpath])
+    ret = main([srcfile.strpath])
     assert ret == 0
 
 
 def test_orderfile_get_pretty_format():
-    ret = pretty_format_json(['--top-keys=alist', get_resource_path('pretty_formatted_json.json')])
+    ret = main(['--top-keys=alist', get_resource_path('pretty_formatted_json.json')])
     assert ret == 0
 
 
 def test_not_orderfile_get_pretty_format():
-    ret = pretty_format_json(['--top-keys=blah', get_resource_path('pretty_formatted_json.json')])
+    ret = main(['--top-keys=blah', get_resource_path('pretty_formatted_json.json')])
     assert ret == 1
 
 
 def test_top_sorted_get_pretty_format():
-    ret = pretty_format_json(['--top-keys=01-alist,alist', get_resource_path('top_sorted_json.json')])
+    ret = main(['--top-keys=01-alist,alist', get_resource_path('top_sorted_json.json')])
     assert ret == 0
 
 
-def test_badfile_pretty_format_json():
-    ret = pretty_format_json([get_resource_path('ok_yaml.yaml')])
+def test_badfile_main():
+    ret = main([get_resource_path('ok_yaml.yaml')])
     assert ret == 1
diff --git a/tests/requirements_txt_fixer_test.py b/tests/requirements_txt_fixer_test.py
index 437cebd..b3a7942 100644
--- a/tests/requirements_txt_fixer_test.py
+++ b/tests/requirements_txt_fixer_test.py
@@ -1,7 +1,7 @@
 import pytest
 
 from pre_commit_hooks.requirements_txt_fixer import FAIL
-from pre_commit_hooks.requirements_txt_fixer import fix_requirements_txt
+from pre_commit_hooks.requirements_txt_fixer import main
 from pre_commit_hooks.requirements_txt_fixer import PASS
 from pre_commit_hooks.requirements_txt_fixer import Requirement
 
@@ -36,7 +36,7 @@
     path = tmpdir.join('file.txt')
     path.write_binary(input_s)
 
-    output_retval = fix_requirements_txt([path.strpath])
+    output_retval = main([path.strpath])
 
     assert path.read_binary() == output
     assert output_retval == expected_retval
@@ -44,7 +44,7 @@
 
 def test_requirement_object():
     top_of_file = Requirement()
-    top_of_file.comments.append('#foo')
+    top_of_file.comments.append(b'#foo')
     top_of_file.value = b'\n'
 
     requirement_foo = Requirement()
diff --git a/tests/sort_simple_yaml_test.py b/tests/sort_simple_yaml_test.py
index 176d12f..72f5bec 100644
--- a/tests/sort_simple_yaml_test.py
+++ b/tests/sort_simple_yaml_test.py
@@ -110,9 +110,9 @@
     lines = ['# some comment', '"a": 42', 'b: 17', '', 'c: 19']
     assert first_key(lines) == 'a": 42'
 
-    # no lines
+    # no lines (not a real situation)
     lines = []
-    assert first_key(lines) is None
+    assert first_key(lines) == ''
 
 
 @pytest.mark.parametrize('bad_lines,good_lines,_', TEST_SORTS)
diff --git a/tests/tests_should_end_in_test_test.py b/tests/tests_should_end_in_test_test.py
index dc686a5..4eb98e7 100644
--- a/tests/tests_should_end_in_test_test.py
+++ b/tests/tests_should_end_in_test_test.py
@@ -1,36 +1,36 @@
-from pre_commit_hooks.tests_should_end_in_test import validate_files
+from pre_commit_hooks.tests_should_end_in_test import main
 
 
-def test_validate_files_all_pass():
-    ret = validate_files(['foo_test.py', 'bar_test.py'])
+def test_main_all_pass():
+    ret = main(['foo_test.py', 'bar_test.py'])
     assert ret == 0
 
 
-def test_validate_files_one_fails():
-    ret = validate_files(['not_test_ending.py', 'foo_test.py'])
+def test_main_one_fails():
+    ret = main(['not_test_ending.py', 'foo_test.py'])
     assert ret == 1
 
 
-def test_validate_files_django_all_pass():
-    ret = validate_files(['--django', 'tests.py', 'test_foo.py', 'test_bar.py', 'tests/test_baz.py'])
+def test_main_django_all_pass():
+    ret = main(['--django', 'tests.py', 'test_foo.py', 'test_bar.py', 'tests/test_baz.py'])
     assert ret == 0
 
 
-def test_validate_files_django_one_fails():
-    ret = validate_files(['--django', 'not_test_ending.py', 'test_foo.py'])
+def test_main_django_one_fails():
+    ret = main(['--django', 'not_test_ending.py', 'test_foo.py'])
     assert ret == 1
 
 
 def test_validate_nested_files_django_one_fails():
-    ret = validate_files(['--django', 'tests/not_test_ending.py', 'test_foo.py'])
+    ret = main(['--django', 'tests/not_test_ending.py', 'test_foo.py'])
     assert ret == 1
 
 
-def test_validate_files_not_django_fails():
-    ret = validate_files(['foo_test.py', 'bar_test.py', 'test_baz.py'])
+def test_main_not_django_fails():
+    ret = main(['foo_test.py', 'bar_test.py', 'test_baz.py'])
     assert ret == 1
 
 
-def test_validate_files_django_fails():
-    ret = validate_files(['--django', 'foo_test.py', 'test_bar.py', 'test_baz.py'])
+def test_main_django_fails():
+    ret = main(['--django', 'foo_test.py', 'test_bar.py', 'test_baz.py'])
     assert ret == 1