Simplify mixed-line-ending hook
diff --git a/tests/mixed_line_ending_test.py b/tests/mixed_line_ending_test.py
index 20fd22c..808295b 100644
--- a/tests/mixed_line_ending_test.py
+++ b/tests/mixed_line_ending_test.py
@@ -1,154 +1,103 @@
+from __future__ import absolute_import
+from __future__ import unicode_literals
+
 import pytest
 
-from pre_commit_hooks.mixed_line_ending import mixed_line_ending
-
-# Input, expected return value, expected output
-TESTS_FIX_AUTO = (
-    # only 'LF'
-    (b'foo\nbar\nbaz\n', 0, b'foo\nbar\nbaz\n'),
-    # only 'CRLF'
-    (b'foo\r\nbar\r\nbaz\r\n', 0, b'foo\r\nbar\r\nbaz\r\n'),
-    # only 'CR'
-    (b'foo\rbar\rbaz\r', 0, b'foo\rbar\rbaz\r'),
-    # mixed with majority of 'LF'
-    (b'foo\r\nbar\nbaz\n', 1, b'foo\nbar\nbaz\n'),
-    # mixed with majority of 'CRLF'
-    (b'foo\r\nbar\nbaz\r\n', 1, b'foo\r\nbar\r\nbaz\r\n'),
-    # mixed with majority of 'CR'
-    (b'foo\rbar\nbaz\r', 1, b'foo\rbar\rbaz\r'),
-    # mixed with as much 'LF' as 'CRLF'
-    (b'foo\r\nbar\nbaz', 1, b'foo\r\nbar\nbaz'),
-    # mixed with as much 'LF' as 'CR'
-    (b'foo\rbar\nbaz', 1, b'foo\rbar\nbaz'),
-    # mixed with as much 'CRLF' as 'CR'
-    (b'foo\r\nbar\nbaz', 1, b'foo\r\nbar\nbaz'),
-    # mixed with as much 'CRLF' as 'LF' as 'CR'
-    (b'foo\r\nbar\nbaz\r', 1, b'foo\r\nbar\nbaz\r'),
-)
+from pre_commit_hooks.mixed_line_ending import main
 
 
 @pytest.mark.parametrize(
-    ('input_s', 'expected_retval', 'output'),
-    TESTS_FIX_AUTO,
+    ('input_s', 'output'),
+    (
+        # mixed with majority of 'LF'
+        (b'foo\r\nbar\nbaz\n', b'foo\nbar\nbaz\n'),
+        # mixed with majority of 'CRLF'
+        (b'foo\r\nbar\nbaz\r\n', b'foo\r\nbar\r\nbaz\r\n'),
+        # mixed with majority of 'CR'
+        (b'foo\rbar\nbaz\r', b'foo\rbar\rbaz\r'),
+        # mixed with as much 'LF' as 'CRLF'
+        (b'foo\r\nbar\n', b'foo\nbar\n'),
+        # mixed with as much 'LF' as 'CR'
+        (b'foo\rbar\n', b'foo\nbar\n'),
+        # mixed with as much 'CRLF' as 'CR'
+        (b'foo\r\nbar\r', b'foo\r\nbar\r\n'),
+        # mixed with as much 'CRLF' as 'LF' as 'CR'
+        (b'foo\r\nbar\nbaz\r', b'foo\nbar\nbaz\n'),
+    ),
 )
-def test_mixed_line_ending_fix_auto(input_s, expected_retval, output, tmpdir):
+def test_mixed_line_ending_fixes_auto(input_s, output, tmpdir):
     path = tmpdir.join('file.txt')
     path.write_binary(input_s)
-    ret = mixed_line_ending(('--fix=auto', path.strpath))
+    ret = main((path.strpath,))
 
-    assert ret == expected_retval
+    assert ret == 1
     assert path.read_binary() == output
 
 
-# Input, expected return value, expected output
-TESTS_NO_FIX = (
-    # only 'LF'
-    (b'foo\nbar\nbaz\n', 0, b'foo\nbar\nbaz\n'),
-    # only 'CRLF'
-    (b'foo\r\nbar\r\nbaz\r\n', 0, b'foo\r\nbar\r\nbaz\r\n'),
-    # only 'CR'
-    (b'foo\rbar\rbaz\r', 0, b'foo\rbar\rbaz\r'),
-    # mixed with majority of 'LF'
-    (b'foo\r\nbar\nbaz\n', 1, b'foo\r\nbar\nbaz\n'),
-    # mixed with majority of 'CRLF'
-    (b'foo\r\nbar\nbaz\r\n', 1, b'foo\r\nbar\nbaz\r\n'),
-    # mixed with majority of 'CR'
-    (b'foo\rbar\nbaz\r', 1, b'foo\rbar\nbaz\r'),
-    # mixed with as much 'LF' as 'CR'
-    (b'foo\rbar\nbaz', 0, b'foo\rbar\nbaz'),
-    # mixed with as much 'CRLF' as 'CR'
-    (b'foo\r\nbar\nbaz', 0, b'foo\r\nbar\nbaz'),
-    # mixed with as much 'CRLF' as 'LF' as 'CR'
-    (b'foo\r\nbar\nbaz\r', 0, b'foo\r\nbar\nbaz\r'),
-)
+def test_non_mixed_no_newline_end_of_file(tmpdir):
+    path = tmpdir.join('f.txt')
+    path.write_binary(b'foo\nbar\nbaz')
+    assert not main((path.strpath,))
+    # the hook *could* fix the end of the file, but leaves it alone
+    # this is mostly to document the current behaviour
+    assert path.read_binary() == b'foo\nbar\nbaz'
+
+
+def test_mixed_no_newline_end_of_file(tmpdir):
+    path = tmpdir.join('f.txt')
+    path.write_binary(b'foo\r\nbar\nbaz')
+    assert main((path.strpath,))
+    # the hook rewrites the end of the file, this is slightly inconsistent
+    # with the non-mixed case but I think this is the better behaviour
+    # this is mostly to document the current behaviour
+    assert path.read_binary() == b'foo\nbar\nbaz\n'
 
 
 @pytest.mark.parametrize(
-    ('input_s', 'expected_retval', 'output'),
-    TESTS_NO_FIX,
+    ('fix_option', 'input_s'),
+    (
+        # All --fix=auto with uniform line endings should be ok
+        ('--fix=auto', b'foo\r\nbar\r\nbaz\r\n'),
+        ('--fix=auto', b'foo\rbar\rbaz\r'),
+        ('--fix=auto', b'foo\nbar\nbaz\n'),
+        # --fix=crlf with crlf endings
+        ('--fix=crlf', b'foo\r\nbar\r\nbaz\r\n'),
+        # --fix=lf with lf endings
+        ('--fix=lf', b'foo\nbar\nbaz\n'),
+    ),
 )
-def test_detect_mixed_line_ending(input_s, expected_retval, output, tmpdir):
-    path = tmpdir.join('file.txt')
+def test_line_endings_ok(fix_option, input_s, tmpdir):
+    path = tmpdir.join('input.txt')
     path.write_binary(input_s)
-    ret = mixed_line_ending(('--fix=no', path.strpath))
+    ret = main((fix_option, path.strpath))
 
-    assert ret == expected_retval
-    assert path.read_binary() == output
+    assert ret == 0
+    assert path.read_binary() == input_s
 
 
-# Input, expected return value, expected output
-TESTS_FIX_FORCE_LF = (
-    # only 'LF'
-    (b'foo\nbar\nbaz\n', 1, b'foo\nbar\nbaz\n'),
-    # only 'CRLF'
-    (b'foo\r\nbar\r\nbaz\r\n', 1, b'foo\nbar\nbaz\n'),
-    # only 'CR'
-    (b'foo\rbar\rbaz\r', 1, b'foo\nbar\nbaz\n'),
-    # mixed with majority of 'LF'
-    (b'foo\r\nbar\nbaz\n', 1, b'foo\nbar\nbaz\n'),
-    # mixed with majority of 'CRLF'
-    (b'foo\r\nbar\nbaz\r\n', 1, b'foo\nbar\nbaz\n'),
-    # mixed with majority of 'CR'
-    (b'foo\rbar\nbaz\r', 1, b'foo\nbar\nbaz\n'),
-    # mixed with as much 'LF' as 'CR'
-    (b'foo\rbar\nbaz', 1, b'foo\nbar\nbaz'),
-    # mixed with as much 'CRLF' as 'CR'
-    (b'foo\r\nbar\nbaz', 1, b'foo\nbar\nbaz'),
-    # mixed with as much 'CRLF' as 'LF' as 'CR'
-    (b'foo\r\nbar\nbaz\r', 1, b'foo\nbar\nbaz\n'),
-)
+def test_no_fix_does_not_modify(tmpdir):
+    path = tmpdir.join('input.txt')
+    contents = b'foo\r\nbar\rbaz\nwomp\n'
+    path.write_binary(contents)
+    ret = main(('--fix=no', path.strpath))
+
+    assert ret == 1
+    assert path.read_binary() == contents
 
 
-@pytest.mark.parametrize(
-    ('input_s', 'expected_retval', 'output'),
-    TESTS_FIX_FORCE_LF,
-)
-def test_mixed_line_ending_fix_force_lf(
-    input_s, expected_retval, output,
-    tmpdir,
-):
-    path = tmpdir.join('file.txt')
-    path.write_binary(input_s)
-    ret = mixed_line_ending(('--fix=lf', path.strpath))
+def test_fix_lf(tmpdir):
+    path = tmpdir.join('input.txt')
+    path.write_binary(b'foo\r\nbar\rbaz\n')
+    ret = main(('--fix=lf', path.strpath))
 
-    assert ret == expected_retval
-    assert path.read_binary() == output
+    assert ret == 1
+    assert path.read_binary() == b'foo\nbar\nbaz\n'
 
 
-# Input, expected return value, expected output
-TESTS_FIX_FORCE_CRLF = (
-    # only 'LF'
-    (b'foo\nbar\nbaz\n', 1, b'foo\r\nbar\r\nbaz\r\n'),
-    # only 'CRLF'
-    (b'foo\r\nbar\r\nbaz\r\n', 1, b'foo\r\nbar\r\nbaz\r\n'),
-    # only 'CR'
-    (b'foo\rbar\rbaz\r', 1, b'foo\r\nbar\r\nbaz\r\n'),
-    # mixed with majority of 'LF'
-    (b'foo\r\nbar\nbaz\n', 1, b'foo\r\nbar\r\nbaz\r\n'),
-    # mixed with majority of 'CRLF'
-    (b'foo\r\nbar\nbaz\r\n', 1, b'foo\r\nbar\r\nbaz\r\n'),
-    # mixed with majority of 'CR'
-    (b'foo\rbar\nbaz\r', 1, b'foo\r\nbar\r\nbaz\r\n'),
-    # mixed with as much 'LF' as 'CR'
-    (b'foo\rbar\nbaz', 1, b'foo\r\nbar\r\nbaz'),
-    # mixed with as much 'CRLF' as 'CR'
-    (b'foo\r\nbar\nbaz', 1, b'foo\r\nbar\r\nbaz'),
-    # mixed with as much 'CRLF' as 'LF' as 'CR'
-    (b'foo\r\nbar\nbaz\r', 1, b'foo\r\nbar\r\nbaz\r\n'),
-)
+def test_fix_crlf(tmpdir):
+    path = tmpdir.join('input.txt')
+    path.write_binary(b'foo\r\nbar\rbaz\n')
+    ret = main(('--fix=crlf', path.strpath))
 
-
-@pytest.mark.parametrize(
-    ('input_s', 'expected_retval', 'output'),
-    TESTS_FIX_FORCE_CRLF,
-)
-def test_mixed_line_ending_fix_force_crlf(
-    input_s, expected_retval, output,
-    tmpdir,
-):
-    path = tmpdir.join('file.txt')
-    path.write_binary(input_s)
-    ret = mixed_line_ending(('--fix=crlf', path.strpath))
-
-    assert ret == expected_retval
-    assert path.read_binary() == output
+    assert ret == 1
+    assert path.read_binary() == b'foo\r\nbar\r\nbaz\r\n'