1+ import sys
2+
3+ import pytest
4+
15from pre_commit_hooks .check_case_conflict import find_conflicting_filenames
26from pre_commit_hooks .check_case_conflict import main
7+ from pre_commit_hooks .check_case_conflict import parents
38from pre_commit_hooks .util import cmd_output
49
10+ skip_win32 = pytest .mark .skipif (
11+ sys .platform == 'win32' ,
12+ reason = 'case conflicts between directories and files' ,
13+ )
14+
15+
16+ def test_parents ():
17+ assert set (parents ('a' )) == set ()
18+ assert set (parents ('a/b' )) == {'a' }
19+ assert set (parents ('a/b/c' )) == {'a/b' , 'a' }
20+ assert set (parents ('a/b/c/d' )) == {'a/b/c' , 'a/b' , 'a' }
21+
522
623def test_nothing_added (temp_git_dir ):
724 with temp_git_dir .as_cwd ():
@@ -26,6 +43,36 @@ def test_adding_something_with_conflict(temp_git_dir):
2643 assert find_conflicting_filenames (['f.py' , 'F.py' ]) == 1
2744
2845
46+ @skip_win32 # pragma: win32 no cover
47+ def test_adding_files_with_conflicting_directories (temp_git_dir ):
48+ with temp_git_dir .as_cwd ():
49+ temp_git_dir .mkdir ('dir' ).join ('x' ).write ('foo' )
50+ temp_git_dir .mkdir ('DIR' ).join ('y' ).write ('foo' )
51+ cmd_output ('git' , 'add' , '-A' )
52+
53+ assert find_conflicting_filenames ([]) == 1
54+
55+
56+ @skip_win32 # pragma: win32 no cover
57+ def test_adding_files_with_conflicting_deep_directories (temp_git_dir ):
58+ with temp_git_dir .as_cwd ():
59+ temp_git_dir .mkdir ('x' ).mkdir ('y' ).join ('z' ).write ('foo' )
60+ temp_git_dir .join ('X' ).write ('foo' )
61+ cmd_output ('git' , 'add' , '-A' )
62+
63+ assert find_conflicting_filenames ([]) == 1
64+
65+
66+ @skip_win32 # pragma: win32 no cover
67+ def test_adding_file_with_conflicting_directory (temp_git_dir ):
68+ with temp_git_dir .as_cwd ():
69+ temp_git_dir .mkdir ('dir' ).join ('x' ).write ('foo' )
70+ temp_git_dir .join ('DIR' ).write ('foo' )
71+ cmd_output ('git' , 'add' , '-A' )
72+
73+ assert find_conflicting_filenames ([]) == 1
74+
75+
2976def test_added_file_not_in_pre_commits_list (temp_git_dir ):
3077 with temp_git_dir .as_cwd ():
3178 temp_git_dir .join ('f.py' ).write ("print('hello world')" )
@@ -46,6 +93,19 @@ def test_file_conflicts_with_committed_file(temp_git_dir):
4693 assert find_conflicting_filenames (['F.py' ]) == 1
4794
4895
96+ @skip_win32 # pragma: win32 no cover
97+ def test_file_conflicts_with_committed_dir (temp_git_dir ):
98+ with temp_git_dir .as_cwd ():
99+ temp_git_dir .mkdir ('dir' ).join ('x' ).write ('foo' )
100+ cmd_output ('git' , 'add' , '-A' )
101+ cmd_output ('git' , 'commit' , '--no-gpg-sign' , '-n' , '-m' , 'Add f.py' )
102+
103+ temp_git_dir .join ('DIR' ).write ('foo' )
104+ cmd_output ('git' , 'add' , '-A' )
105+
106+ assert find_conflicting_filenames ([]) == 1
107+
108+
49109def test_integration (temp_git_dir ):
50110 with temp_git_dir .as_cwd ():
51111 assert main (argv = []) == 0
0 commit comments