diff --git a/CHANGELOG b/CHANGELOG
index c378c5d..3654101 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,8 @@
+0.5.1
+=====
+- Add a --no-sort-keys to json pretty formatter
+- Add a --remove to fix-encoding-pragma
+
 0.5.0
 =====
 - Add check-byte-order-marker
diff --git a/pre_commit_hooks/check_merge_conflict.py b/pre_commit_hooks/check_merge_conflict.py
index ec09473..4a98843 100644
--- a/pre_commit_hooks/check_merge_conflict.py
+++ b/pre_commit_hooks/check_merge_conflict.py
@@ -5,10 +5,10 @@
 import sys
 
 CONFLICT_PATTERNS = [
-    '<<<<<<< ',
-    '======= ',
-    '=======\n',
-    '>>>>>>> '
+    b'<<<<<<< ',
+    b'======= ',
+    b'=======\n',
+    b'>>>>>>> '
 ]
 WARNING_MSG = 'Merge conflict string "{0}" found in {1}:{2}'
 
@@ -30,11 +30,13 @@
 
     retcode = 0
     for filename in args.filenames:
-        with open(filename) as inputfile:
+        with open(filename, 'rb') as inputfile:
             for i, line in enumerate(inputfile):
                 for pattern in CONFLICT_PATTERNS:
                     if line.startswith(pattern):
-                        print(WARNING_MSG.format(pattern, filename, i + 1))
+                        print(WARNING_MSG.format(
+                            pattern.decode(), filename, i + 1,
+                        ))
                         retcode = 1
 
     return retcode
diff --git a/setup.py b/setup.py
index f254067..e0478b7 100644
--- a/setup.py
+++ b/setup.py
@@ -6,7 +6,7 @@
     name='pre_commit_hooks',
     description='Some out-of-the-box hooks for pre-commit.',
     url='https://github.com/pre-commit/pre-commit-hooks',
-    version='0.5.0',
+    version='0.5.1',
 
     author='Anthony Sottile',
     author_email='asottile@umich.edu',
diff --git a/testing/resources/img1.jpg b/testing/resources/img1.jpg
new file mode 100644
index 0000000..dea4262
--- /dev/null
+++ b/testing/resources/img1.jpg
Binary files differ
diff --git a/testing/util.py b/testing/util.py
index 3b90631..837a3cb 100644
--- a/testing/util.py
+++ b/testing/util.py
@@ -1,7 +1,6 @@
 from __future__ import absolute_import
 from __future__ import unicode_literals
 
-import contextlib
 import io
 import os.path
 
@@ -9,21 +8,11 @@
 TESTING_DIR = os.path.abspath(os.path.dirname(__file__))
 
 
-@contextlib.contextmanager
-def cwd(path):
-    pwd = os.getcwd()
-    os.chdir(path)
-    try:
-        yield
-    finally:
-        os.chdir(pwd)
-
-
 def get_resource_path(path):
     return os.path.join(TESTING_DIR, 'resources', path)
 
 
 def write_file(filename, contents):
     """Hax because coveragepy chokes on nested context managers."""
-    with io.open(filename, 'w') as file_obj:
+    with io.open(filename, 'w', newline='') as file_obj:
         file_obj.write(contents)
diff --git a/tests/autopep8_wrapper_test.py b/tests/autopep8_wrapper_test.py
index a218e4b..5eb4df2 100644
--- a/tests/autopep8_wrapper_test.py
+++ b/tests/autopep8_wrapper_test.py
@@ -1,8 +1,6 @@
 from __future__ import absolute_import
 from __future__ import unicode_literals
 
-import io
-
 import pytest
 
 from pre_commit_hooks.autopep8_wrapper import main
@@ -16,20 +14,15 @@
     ),
 )
 def test_main_failing(tmpdir, input_src, expected_ret, output_src):
-    filename = tmpdir.join('test.py').strpath
-    with io.open(filename, 'w') as file_obj:
-        file_obj.write(input_src)
-    ret = main([filename, '-i', '-v'])
+    path = tmpdir.join('test.py')
+    path.write(input_src)
+    ret = main([path.strpath, '-i', '-v'])
     assert ret == expected_ret
-    assert io.open(filename).read() == output_src
+    assert path.read() == output_src
 
 
-@pytest.mark.usefixtures('in_tmpdir')
-def test_respects_config_file():
-    with io.open('setup.cfg', 'w') as setup_cfg:
-        setup_cfg.write('[pep8]\nignore=E221')
-
-    with io.open('test.py', 'w') as test_py:
-        test_py.write('print(1    + 2)\n')
-
-    assert main(['test.py', '-i', '-v']) == 0
+def test_respects_config_file(tmpdir):
+    with tmpdir.as_cwd():
+        tmpdir.join('setup.cfg').write('[pep8]\nignore=E221')
+        tmpdir.join('test.py').write('print(1    + 2)\n')
+        assert main(['test.py', '-i', '-v']) == 0
diff --git a/tests/check_added_large_files_test.py b/tests/check_added_large_files_test.py
index caf3e68..ce15f5c 100644
--- a/tests/check_added_large_files_test.py
+++ b/tests/check_added_large_files_test.py
@@ -8,18 +8,16 @@
 from pre_commit_hooks.check_added_large_files import find_large_added_files
 from pre_commit_hooks.check_added_large_files import main
 from pre_commit_hooks.util import cmd_output
-from testing.util import cwd
-from testing.util import write_file
 
 
 def test_nothing_added(temp_git_dir):
-    with cwd(temp_git_dir):
+    with temp_git_dir.as_cwd():
         assert find_large_added_files(['f.py'], 0) == 0
 
 
 def test_adding_something(temp_git_dir):
-    with cwd(temp_git_dir):
-        write_file('f.py', "print('hello world')")
+    with temp_git_dir.as_cwd():
+        temp_git_dir.join('f.py').write("print('hello world')")
         cmd_output('git', 'add', 'f.py')
 
         # Should fail with max size of 0
@@ -27,8 +25,8 @@
 
 
 def test_add_something_giant(temp_git_dir):
-    with cwd(temp_git_dir):
-        write_file('f.py', 'a' * 10000)
+    with temp_git_dir.as_cwd():
+        temp_git_dir.join('f.py').write('a' * 10000)
 
         # Should not fail when not added
         assert find_large_added_files(['f.py'], 0) == 0
@@ -46,8 +44,8 @@
 
 
 def test_added_file_not_in_pre_commits_list(temp_git_dir):
-    with cwd(temp_git_dir):
-        write_file('f.py', "print('hello world')")
+    with temp_git_dir.as_cwd():
+        temp_git_dir.join('f.py').write("print('hello world')")
         cmd_output('git', 'add', 'f.py')
 
         # Should pass even with a size of 0
@@ -55,10 +53,10 @@
 
 
 def test_integration(temp_git_dir):
-    with cwd(temp_git_dir):
+    with temp_git_dir.as_cwd():
         assert main(argv=[]) == 0
 
-        write_file('f.py', 'a' * 10000)
+        temp_git_dir.join('f.py').write('a' * 10000)
         cmd_output('git', 'add', 'f.py')
 
         # Should not fail with default
@@ -80,26 +78,33 @@
 
 @xfailif_no_gitlfs
 def test_allows_gitlfs(temp_git_dir):  # pragma: no cover
-    with cwd(temp_git_dir):
+    with temp_git_dir.as_cwd():
         # Work around https://github.com/github/git-lfs/issues/913
-        cmd_output('git', 'commit', '--allow-empty', '-m', 'foo')
+        cmd_output(
+            'git',
+            'commit',
+            '--no-gpg-sign',
+            '--allow-empty',
+            '-m',
+            'foo',
+        )
         cmd_output('git', 'lfs', 'install')
-        write_file('f.py', 'a' * 10000)
+        temp_git_dir.join('f.py').write('a' * 10000)
         cmd_output('git', 'lfs', 'track', 'f.py')
-        cmd_output('git', 'add', '.')
+        cmd_output('git', 'add', '--', '.')
         # Should succeed
         assert main(('--maxkb', '9', 'f.py')) == 0
 
 
 @xfailif_no_gitlfs
 def test_moves_with_gitlfs(temp_git_dir):  # pragma: no cover
-    with cwd(temp_git_dir):
+    with temp_git_dir.as_cwd():
         cmd_output('git', 'lfs', 'install')
         cmd_output('git', 'lfs', 'track', 'a.bin', 'b.bin')
         # First add the file we're going to move
-        write_file('a.bin', 'a' * 10000)
-        cmd_output('git', 'add', '.')
-        cmd_output('git', 'commit', '-am', 'foo')
+        temp_git_dir.join('a.bin').write('a' * 10000)
+        cmd_output('git', 'add', '--', '.')
+        cmd_output('git', 'commit', '--no-gpg-sign', '-am', 'foo')
         # Now move it and make sure the hook still succeeds
         cmd_output('git', 'mv', 'a.bin', 'b.bin')
         assert main(('--maxkb', '9', 'b.bin')) == 0
diff --git a/tests/check_case_conflict_test.py b/tests/check_case_conflict_test.py
index 2a32918..077b41b 100644
--- a/tests/check_case_conflict_test.py
+++ b/tests/check_case_conflict_test.py
@@ -4,63 +4,61 @@
 from pre_commit_hooks.check_case_conflict import find_conflicting_filenames
 from pre_commit_hooks.check_case_conflict import main
 from pre_commit_hooks.util import cmd_output
-from testing.util import cwd
-from testing.util import write_file
 
 
 def test_nothing_added(temp_git_dir):
-    with cwd(temp_git_dir):
+    with temp_git_dir.as_cwd():
         assert find_conflicting_filenames(['f.py']) == 0
 
 
 def test_adding_something(temp_git_dir):
-    with cwd(temp_git_dir):
-        write_file('f.py', "print('hello world')")
+    with temp_git_dir.as_cwd():
+        temp_git_dir.join('f.py').write("print('hello world')")
         cmd_output('git', 'add', 'f.py')
 
         assert find_conflicting_filenames(['f.py']) == 0
 
 
 def test_adding_something_with_conflict(temp_git_dir):
-    with cwd(temp_git_dir):
-        write_file('f.py', "print('hello world')")
+    with temp_git_dir.as_cwd():
+        temp_git_dir.join('f.py').write("print('hello world')")
         cmd_output('git', 'add', 'f.py')
-        write_file('F.py', "print('hello world')")
+        temp_git_dir.join('F.py').write("print('hello world')")
         cmd_output('git', 'add', 'F.py')
 
         assert find_conflicting_filenames(['f.py', 'F.py']) == 1
 
 
 def test_added_file_not_in_pre_commits_list(temp_git_dir):
-    with cwd(temp_git_dir):
-        write_file('f.py', "print('hello world')")
+    with temp_git_dir.as_cwd():
+        temp_git_dir.join('f.py').write("print('hello world')")
         cmd_output('git', 'add', 'f.py')
 
         assert find_conflicting_filenames(['g.py']) == 0
 
 
 def test_file_conflicts_with_committed_file(temp_git_dir):
-    with cwd(temp_git_dir):
-        write_file('f.py', "print('hello world')")
+    with temp_git_dir.as_cwd():
+        temp_git_dir.join('f.py').write("print('hello world')")
         cmd_output('git', 'add', 'f.py')
-        cmd_output('git', 'commit', '--no-verify', '-m', 'Add f.py')
+        cmd_output('git', 'commit', '--no-gpg-sign', '-n', '-m', 'Add f.py')
 
-        write_file('F.py', "print('hello world')")
+        temp_git_dir.join('F.py').write("print('hello world')")
         cmd_output('git', 'add', 'F.py')
 
         assert find_conflicting_filenames(['F.py']) == 1
 
 
 def test_integration(temp_git_dir):
-    with cwd(temp_git_dir):
+    with temp_git_dir.as_cwd():
         assert main(argv=[]) == 0
 
-        write_file('f.py', "print('hello world')")
+        temp_git_dir.join('f.py').write("print('hello world')")
         cmd_output('git', 'add', 'f.py')
 
         assert main(argv=['f.py']) == 0
 
-        write_file('F.py', "print('hello world')")
+        temp_git_dir.join('F.py').write("print('hello world')")
         cmd_output('git', 'add', 'F.py')
 
         assert main(argv=['F.py']) == 1
diff --git a/tests/check_docstring_first_test.py b/tests/check_docstring_first_test.py
index f57e695..f14880b 100644
--- a/tests/check_docstring_first_test.py
+++ b/tests/check_docstring_first_test.py
@@ -1,8 +1,6 @@
 from __future__ import absolute_import
 from __future__ import unicode_literals
 
-import io
-
 import pytest
 
 from pre_commit_hooks.check_docstring_first import check_docstring_first
@@ -59,9 +57,7 @@
 
 @all_tests
 def test_integration(tmpdir, capsys, contents, expected, expected_out):
-    tmpfilename = tmpdir.join('test.py').strpath
-    with io.open(tmpfilename, 'w') as tmpfile:
-        tmpfile.write(contents)
-
-    assert main([tmpfilename]) == expected
-    assert capsys.readouterr()[0] == expected_out.format(filename=tmpfilename)
+    f = tmpdir.join('test.py')
+    f.write(contents)
+    assert main([f.strpath]) == expected
+    assert capsys.readouterr()[0] == expected_out.format(filename=f.strpath)
diff --git a/tests/check_merge_conflict_test.py b/tests/check_merge_conflict_test.py
index 3d719bd..8141ade 100644
--- a/tests/check_merge_conflict_test.py
+++ b/tests/check_merge_conflict_test.py
@@ -1,14 +1,14 @@
 from __future__ import absolute_import
 from __future__ import unicode_literals
 
-import io
 import os
+import shutil
 
 import pytest
 
 from pre_commit_hooks.check_merge_conflict import detect_merge_conflict
 from pre_commit_hooks.util import cmd_output
-from testing.util import cwd
+from testing.util import get_resource_path
 from testing.util import write_file
 
 
@@ -16,63 +16,82 @@
 
 
 @pytest.yield_fixture
-def f1_is_a_conflict_file(in_tmpdir):
+def f1_is_a_conflict_file(tmpdir):
     # Make a merge conflict
-    cmd_output('git', 'init', 'repo1')
-    with cwd('repo1'):
-        io.open('f1', 'w').close()
-        cmd_output('git', 'add', 'f1')
-        cmd_output('git', 'commit', '-m' 'commit1')
+    repo1 = tmpdir.join('repo1')
+    repo1_f1 = repo1.join('f1')
+    repo2 = tmpdir.join('repo2')
+    repo2_f1 = repo2.join('f1')
 
-    cmd_output('git', 'clone', 'repo1', 'repo2')
+    cmd_output('git', 'init', '--', repo1.strpath)
+    with repo1.as_cwd():
+        repo1_f1.ensure()
+        cmd_output('git', 'add', '--', repo1_f1.strpath)
+        cmd_output('git', 'commit', '--no-gpg-sign', '-m', 'commit1')
+
+    cmd_output('git', 'clone', repo1.strpath, repo2.strpath)
 
     # Commit in master
-    with cwd('repo1'):
-        write_file('f1', 'parent\n')
-        cmd_output('git', 'commit', '-am', 'master commit2')
+    with repo1.as_cwd():
+        repo1_f1.write('parent\n')
+        cmd_output('git', 'commit', '--no-gpg-sign', '-am', 'master commit2')
 
     # Commit in clone and pull
-    with cwd('repo2'):
-        write_file('f1', 'child\n')
-        cmd_output('git', 'commit', '-am', 'clone commit2')
+    with repo2.as_cwd():
+        repo2_f1.write('child\n')
+        cmd_output('git', 'commit', '--no-gpg-sign', '-am', 'clone commit2')
         cmd_output('git', 'pull', retcode=None)
         # We should end up in a merge conflict!
-        assert io.open('f1').read().startswith(
+        f1 = repo2_f1.read()
+        assert f1.startswith(
             '<<<<<<< HEAD\n'
             'child\n'
             '=======\n'
             'parent\n'
             '>>>>>>>'
+        ) or f1.startswith(
+            '<<<<<<< HEAD\n'
+            'child\n'
+            # diff3 conflict style git merges add this line:
+            '||||||| merged common ancestors\n'
+            '=======\n'
+            'parent\n'
+            '>>>>>>>'
         )
         assert os.path.exists(os.path.join('.git', 'MERGE_MSG'))
         yield
 
 
 @pytest.yield_fixture
-def repository_is_pending_merge(in_tmpdir):
+def repository_is_pending_merge(tmpdir):
     # Make a (non-conflicting) merge
-    cmd_output('git', 'init', 'repo1')
-    with cwd('repo1'):
-        io.open('f1', 'w').close()
-        cmd_output('git', 'add', 'f1')
-        cmd_output('git', 'commit', '-m' 'commit1')
+    repo1 = tmpdir.join('repo1')
+    repo1_f1 = repo1.join('f1')
+    repo2 = tmpdir.join('repo2')
+    repo2_f1 = repo2.join('f1')
+    repo2_f2 = repo2.join('f2')
+    cmd_output('git', 'init', repo1.strpath)
+    with repo1.as_cwd():
+        repo1_f1.ensure()
+        cmd_output('git', 'add', '--', repo1_f1.strpath)
+        cmd_output('git', 'commit', '--no-gpg-sign', '-m', 'commit1')
 
-    cmd_output('git', 'clone', 'repo1', 'repo2')
+    cmd_output('git', 'clone', repo1.strpath, repo2.strpath)
 
     # Commit in master
-    with cwd('repo1'):
-        write_file('f1', 'parent\n')
-        cmd_output('git', 'commit', '-am', 'master commit2')
+    with repo1.as_cwd():
+        repo1_f1.write('parent\n')
+        cmd_output('git', 'commit', '--no-gpg-sign', '-am', 'master commit2')
 
     # Commit in clone and pull without committing
-    with cwd('repo2'):
-        write_file('f2', 'child\n')
-        cmd_output('git', 'add', 'f2')
-        cmd_output('git', 'commit', '-m', 'clone commit2')
+    with repo2.as_cwd():
+        repo2_f2.write('child\n')
+        cmd_output('git', 'add', '--', repo2_f2.strpath)
+        cmd_output('git', 'commit', '--no-gpg-sign', '-m', 'clone commit2')
         cmd_output('git', 'pull', '--no-commit')
         # We should end up in a pending merge
-        assert io.open('f1').read().startswith('parent\n')
-        assert io.open('f2').read().startswith('child\n')
+        assert repo2_f1.read() == 'parent\n'
+        assert repo2_f2.read() == 'child\n'
         assert os.path.exists(os.path.join('.git', 'MERGE_HEAD'))
         yield
 
@@ -100,8 +119,12 @@
     assert detect_merge_conflict(['f1']) == 0
 
 
-@pytest.mark.usefixtures('in_tmpdir')
-def test_does_not_care_when_not_in_a_merge():
-    with io.open('README.md', 'w') as readme_file:
-        readme_file.write('problem\n=======\n')
+@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
+
+
+def test_does_not_care_when_not_in_a_merge(tmpdir):
+    tmpdir.join('README.md').write('problem\n=======\n')
     assert detect_merge_conflict(['README.md']) == 0
diff --git a/tests/conftest.py b/tests/conftest.py
index de9c2fe..87fec70 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -5,17 +5,10 @@
 import pytest
 
 from pre_commit_hooks.util import cmd_output
-from testing.util import cwd
-
-
-@pytest.yield_fixture
-def in_tmpdir(tmpdir):
-    with cwd(tmpdir.strpath):
-        yield tmpdir
 
 
 @pytest.yield_fixture
 def temp_git_dir(tmpdir):
-    git_dir = tmpdir.join('gits').strpath
-    cmd_output('git', 'init', git_dir)
+    git_dir = tmpdir.join('gits')
+    cmd_output('git', 'init', '--', git_dir.strpath)
     yield git_dir
diff --git a/tests/detect_aws_credentials_test.py b/tests/detect_aws_credentials_test.py
index 2fbb2da..66513fe 100644
--- a/tests/detect_aws_credentials_test.py
+++ b/tests/detect_aws_credentials_test.py
@@ -16,9 +16,10 @@
 @pytest.mark.parametrize(('filename', 'expected_retval'), TESTS)
 def test_detect_aws_credentials(filename, expected_retval):
     # with a valid credentials file
-    ret = main(
-        [get_resource_path(filename), "--credentials-file=testing/resources/sample_aws_credentials"]
-    )
+    ret = main((
+        get_resource_path(filename),
+        "--credentials-file=testing/resources/sample_aws_credentials",
+    ))
     assert ret == expected_retval
 
 
diff --git a/tests/detect_private_key_test.py b/tests/detect_private_key_test.py
index d976472..4f2bb93 100644
--- a/tests/detect_private_key_test.py
+++ b/tests/detect_private_key_test.py
@@ -1,5 +1,3 @@
-import os.path
-
 import pytest
 
 from pre_commit_hooks.detect_private_key import detect_private_key
@@ -18,9 +16,6 @@
 
 @pytest.mark.parametrize(('input_s', 'expected_retval'), TESTS)
 def test_detect_private_key(input_s, expected_retval, tmpdir):
-    path = os.path.join(tmpdir.strpath, 'file.txt')
-
-    with open(path, 'wb') as file_obj:
-        file_obj.write(input_s)
-
-    assert detect_private_key([path]) == expected_retval
+    path = tmpdir.join('file.txt')
+    path.write_binary(input_s)
+    assert detect_private_key([path.strpath]) == expected_retval
diff --git a/tests/end_of_file_fixer_test.py b/tests/end_of_file_fixer_test.py
index 5135cd7..ae899d2 100644
--- a/tests/end_of_file_fixer_test.py
+++ b/tests/end_of_file_fixer_test.py
@@ -1,5 +1,4 @@
 import io
-import os.path
 
 import pytest
 
@@ -21,8 +20,7 @@
 
 @pytest.mark.parametrize(('input_s', 'expected_retval', 'output'), TESTS)
 def test_fix_file(input_s, expected_retval, output):
-    file_obj = io.BytesIO()
-    file_obj.write(input_s)
+    file_obj = io.BytesIO(input_s)
     ret = fix_file(file_obj)
     assert file_obj.getvalue() == output
     assert ret == expected_retval
@@ -30,13 +28,11 @@
 
 @pytest.mark.parametrize(('input_s', 'expected_retval', 'output'), TESTS)
 def test_integration(input_s, expected_retval, output, tmpdir):
-    file_path = os.path.join(tmpdir.strpath, 'file.txt')
+    path = tmpdir.join('file.txt')
+    path.write_binary(input_s)
 
-    with open(file_path, 'wb') as file_obj:
-        file_obj.write(input_s)
-
-    ret = end_of_file_fixer([file_path])
-    file_output = open(file_path, 'rb').read()
+    ret = end_of_file_fixer([path.strpath])
+    file_output = path.read_binary()
 
     assert file_output == output
     assert ret == expected_retval
diff --git a/tests/pretty_format_json_test.py b/tests/pretty_format_json_test.py
index 5161611..d9061d3 100644
--- a/tests/pretty_format_json_test.py
+++ b/tests/pretty_format_json_test.py
@@ -1,4 +1,4 @@
-import io
+import shutil
 
 import pytest
 
@@ -50,8 +50,10 @@
 
 def test_autofix_pretty_format_json(tmpdir):
     srcfile = tmpdir.join('to_be_json_formatted.json')
-    with io.open(get_resource_path('not_pretty_formatted_json.json')) as f:
-        srcfile.write_text(f.read(), 'UTF-8')
+    shutil.copyfile(
+        get_resource_path('not_pretty_formatted_json.json'),
+        srcfile.strpath,
+    )
 
     # now launch the autofix on that file
     ret = pretty_format_json(['--autofix', srcfile.strpath])
diff --git a/tests/requirements_txt_fixer_test.py b/tests/requirements_txt_fixer_test.py
index 3680733..fe51f4a 100644
--- a/tests/requirements_txt_fixer_test.py
+++ b/tests/requirements_txt_fixer_test.py
@@ -1,5 +1,3 @@
-import os.path
-
 import pytest
 
 from pre_commit_hooks.requirements_txt_fixer import fix_requirements_txt
@@ -22,13 +20,11 @@
 
 @pytest.mark.parametrize(('input_s', 'expected_retval', 'output'), TESTS)
 def test_integration(input_s, expected_retval, output, tmpdir):
-    path = os.path.join(tmpdir.strpath, 'file.txt')
+    path = tmpdir.join('file.txt')
+    path.write_binary(input_s)
 
-    with open(path, 'wb') as file_obj:
-        file_obj.write(input_s)
-
-    assert fix_requirements_txt([path]) == expected_retval
-    assert open(path, 'rb').read() == output
+    assert fix_requirements_txt([path.strpath]) == expected_retval
+    assert path.read_binary() == output
 
 
 def test_requirement_object():
diff --git a/tests/string_fixer_test.py b/tests/string_fixer_test.py
index 6305618..0429b95 100644
--- a/tests/string_fixer_test.py
+++ b/tests/string_fixer_test.py
@@ -40,11 +40,8 @@
 
 @pytest.mark.parametrize(('input_s', 'output', 'expected_retval'), TESTS)
 def test_rewrite(input_s, output, expected_retval, tmpdir):
-    tmpfile = tmpdir.join('file.txt')
-
-    with open(tmpfile.strpath, 'w') as f:
-        f.write(input_s)
-
-    retval = main([tmpfile.strpath])
-    assert tmpfile.read() == output
+    path = tmpdir.join('file.txt')
+    path.write(input_s)
+    retval = main([path.strpath])
+    assert path.read() == output
     assert retval == expected_retval
diff --git a/tests/trailing_whitespace_fixer_test.py b/tests/trailing_whitespace_fixer_test.py
index 4b5b9a1..6f4fdfd 100644
--- a/tests/trailing_whitespace_fixer_test.py
+++ b/tests/trailing_whitespace_fixer_test.py
@@ -1,31 +1,23 @@
 from __future__ import absolute_import
 from __future__ import unicode_literals
 
-import sys
-
 import pytest
 
 from pre_commit_hooks.trailing_whitespace_fixer import fix_trailing_whitespace
-from testing.util import cwd
 
 
-def test_fixes_trailing_whitespace(tmpdir):
-    with cwd(tmpdir.strpath):
-        for filename, contents in (
-                ('foo.py', 'foo \nbar \n'),
-                ('bar.py', 'bar\t\nbaz\t\n'),
-        ):
-            with open(filename, 'w') as file_obj:
-                file_obj.write(contents)  # pragma: no branch (26 coverage bug)
-
-        ret = fix_trailing_whitespace(['foo.py', 'bar.py'])
-        assert ret == 1
-
-        for filename, after_contents in (
-                ('foo.py', 'foo\nbar\n'),
-                ('bar.py', 'bar\nbaz\n'),
-        ):
-            assert open(filename).read() == after_contents
+@pytest.mark.parametrize(
+    ('input_s', 'expected'),
+    (
+        ('foo \nbar \n', 'foo\nbar\n'),
+        ('bar\t\nbaz\t\n', 'bar\nbaz\n'),
+    ),
+)
+def test_fixes_trailing_whitespace(input_s, expected, tmpdir):
+    path = tmpdir.join('file.txt')
+    path.write(input_s)
+    assert fix_trailing_whitespace((path.strpath,)) == 1
+    assert path.read() == expected
 
 
 # filename, expected input, expected output
@@ -39,13 +31,11 @@
 
 @pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_1)
 def test_fixes_trailing_markdown_whitespace(filename, input_s, output, tmpdir):
-    with cwd(tmpdir.strpath):
-        with open(filename, 'w') as file_obj:
-            file_obj.write(input_s)  # pragma: no branch (26 coverage bug)
-
-        ret = fix_trailing_whitespace([filename])
-        assert ret == 1
-        assert open(filename).read() == output
+    path = tmpdir.join(filename)
+    path.write(input_s)
+    ret = fix_trailing_whitespace([path.strpath])
+    assert ret == 1
+    assert path.read() == output
 
 
 # filename, expected input, expected output
@@ -60,14 +50,13 @@
 
 @pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_2)
 def test_markdown_linebreak_ext_opt(filename, input_s, output, tmpdir):
-    with cwd(tmpdir.strpath):
-        with open(filename, 'w') as file_obj:
-            file_obj.write(input_s)  # pragma: no branch (26 coverage bug)
-
-        ret = fix_trailing_whitespace(['--markdown-linebreak-ext=TxT',
-                                       filename])
-        assert ret == 1
-        assert open(filename).read() == output
+    path = tmpdir.join(filename)
+    path.write(input_s)
+    ret = fix_trailing_whitespace((
+        '--markdown-linebreak-ext=TxT', path.strpath
+    ))
+    assert ret == 1
+    assert path.read() == output
 
 
 # filename, expected input, expected output
@@ -79,25 +68,21 @@
 
 @pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_3)
 def test_markdown_linebreak_ext_opt_all(filename, input_s, output, tmpdir):
-    with cwd(tmpdir.strpath):
-        with open(filename, 'w') as file_obj:
-            file_obj.write(input_s)  # pragma: no branch (26 coverage bug)
-
-        # need to make sure filename is not treated as argument to option
-        ret = fix_trailing_whitespace(['--markdown-linebreak-ext=*',
-                                       filename])
-        assert ret == 1
-        assert open(filename).read() == output
+    path = tmpdir.join(filename)
+    path.write(input_s)
+    # need to make sure filename is not treated as argument to option
+    ret = fix_trailing_whitespace([
+        '--markdown-linebreak-ext=*', path.strpath,
+    ])
+    assert ret == 1
+    assert path.read() == output
 
 
 @pytest.mark.parametrize(('arg'), ('--', 'a.b', 'a/b'))
 def test_markdown_linebreak_ext_badopt(arg):
-    try:
-        ret = fix_trailing_whitespace(['--markdown-linebreak-ext', arg])
-    except SystemExit:
-        ret = sys.exc_info()[1].code
-    finally:
-        assert ret == 2
+    with pytest.raises(SystemExit) as excinfo:
+        fix_trailing_whitespace(['--markdown-linebreak-ext', arg])
+    assert excinfo.value.code == 2
 
 
 # filename, expected input, expected output
@@ -109,13 +94,11 @@
 
 @pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_4)
 def test_no_markdown_linebreak_ext_opt(filename, input_s, output, tmpdir):
-    with cwd(tmpdir.strpath):
-        with open(filename, 'w') as file_obj:
-            file_obj.write(input_s)  # pragma: no branch (26 coverage bug)
-
-        ret = fix_trailing_whitespace(['--no-markdown-linebreak-ext', filename])
-        assert ret == 1
-        assert open(filename).read() == output
+    path = tmpdir.join(filename)
+    path.write(input_s)
+    ret = fix_trailing_whitespace(['--no-markdown-linebreak-ext', path.strpath])
+    assert ret == 1
+    assert path.read() == output
 
 
 def test_returns_zero_for_no_changes():
