1
+ import sys
2
+
3
+ import pytest
4
+
1
5
from pre_commit_hooks .check_case_conflict import find_conflicting_filenames
2
6
from pre_commit_hooks .check_case_conflict import main
7
+ from pre_commit_hooks .check_case_conflict import parents
3
8
from pre_commit_hooks .util import cmd_output
4
9
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
+
5
22
6
23
def test_nothing_added (temp_git_dir ):
7
24
with temp_git_dir .as_cwd ():
@@ -26,6 +43,36 @@ def test_adding_something_with_conflict(temp_git_dir):
26
43
assert find_conflicting_filenames (['f.py' , 'F.py' ]) == 1
27
44
28
45
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
+
29
76
def test_added_file_not_in_pre_commits_list (temp_git_dir ):
30
77
with temp_git_dir .as_cwd ():
31
78
temp_git_dir .join ('f.py' ).write ("print('hello world')" )
@@ -46,6 +93,19 @@ def test_file_conflicts_with_committed_file(temp_git_dir):
46
93
assert find_conflicting_filenames (['F.py' ]) == 1
47
94
48
95
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
+
49
109
def test_integration (temp_git_dir ):
50
110
with temp_git_dir .as_cwd ():
51
111
assert main (argv = []) == 0
0 commit comments