Only check merge conflicts on conflict commits
diff --git a/tests/check_merge_conflict_test.py b/tests/check_merge_conflict_test.py
index bcf90eb..f3bd935 100644
--- a/tests/check_merge_conflict_test.py
+++ b/tests/check_merge_conflict_test.py
@@ -1,26 +1,71 @@
-import os.path
+from __future__ import absolute_import
+from __future__ import unicode_literals
+
+import io
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 write_file
-# Input, expected return value
-TESTS = (
- (b'<<<<<<< HEAD', 1),
- (b'=======', 1),
- (b'>>>>>>> master', 1),
- (b'# <<<<<<< HEAD', 0),
- (b'# =======', 0),
- (b'import my_module', 0),
- (b'', 0),
+
+# pylint:disable=unused-argument
+
+
+@pytest.yield_fixture
+def f1_is_a_conflict_file(in_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')
+
+ cmd_output('git', 'clone', 'repo1', 'repo2')
+
+ # Commit in master
+ with cwd('repo1'):
+ write_file('f1', 'parent\n')
+ cmd_output('git', 'commit', '-am', 'master commit2')
+
+ # Commit in clone and pull
+ with cwd('repo2'):
+ write_file('f1', 'child\n')
+ cmd_output('git', 'commit', '-am', 'clone commit2')
+ cmd_output('git', 'pull', retcode=None)
+ # We should end up in a merge conflict!
+ assert io.open('f1').read().startswith(
+ '<<<<<<< HEAD\n'
+ 'child\n'
+ '=======\n'
+ 'parent\n'
+ '>>>>>>>'
+ )
+ yield
+
+
+@pytest.mark.parametrize(
+ 'failing_contents', ('<<<<<<< HEAD', '=======', '>>>>>>> master'),
)
+@pytest.mark.usefixtures('f1_is_a_conflict_file')
+def test_merge_conflicts_failing(failing_contents):
+ write_file('f1', failing_contents)
+ assert detect_merge_conflict(['f1']) == 1
-@pytest.mark.parametrize(('input_s', 'expected_retval'), TESTS)
-def test_detect_merge_conflict(input_s, expected_retval, tmpdir):
- path = os.path.join(tmpdir.strpath, 'file.txt')
+@pytest.mark.parametrize(
+ 'ok_contents', ('# <<<<<<< HEAD', '# =======', 'import my_module', ''),
+)
+@pytest.mark.usefixtures('f1_is_a_conflict_file')
+def test_merge_conflicts_ok(ok_contents):
+ write_file('f1', ok_contents)
+ assert detect_merge_conflict(['f1']) == 0
- with open(path, 'wb') as file_obj:
- file_obj.write(input_s)
- assert detect_merge_conflict([path]) == expected_retval
+@pytest.mark.usefixtures('in_tmpdir')
+def test_does_not_care_when_not_in_a_conflict():
+ with io.open('README.md', 'w') as readme_file:
+ readme_file.write('pre-commit\n=================\n')
+ assert detect_merge_conflict(['README.md']) == 0