1
// TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2015-2016 - TortoiseGit
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #include "RepositoryFixtures.h"
25 extern CGitAdminDirMap g_AdminDirMap
; // not optimal yet
27 class GitIndexCBasicGitFixture
: public CBasicGitFixture
32 CBasicGitFixture::SetUp();
33 g_AdminDirMap
.clear();
37 class GitIndexCBasicGitWithEmptyRepositoryFixture
: public CBasicGitWithEmptyRepositoryFixture
42 CBasicGitWithEmptyRepositoryFixture::SetUp();
43 g_AdminDirMap
.clear();
47 class GitIndexCBasicGitWithTestRepoFixture
: public CBasicGitWithTestRepoFixture
52 CBasicGitWithTestRepoFixture::SetUp();
53 g_AdminDirMap
.clear();
57 INSTANTIATE_TEST_CASE_P(GitIndex
, GitIndexCBasicGitFixture
, testing::Values(LIBGIT2
));
58 INSTANTIATE_TEST_CASE_P(GitIndex
, GitIndexCBasicGitWithEmptyRepositoryFixture
, testing::Values(LIBGIT2
));
59 INSTANTIATE_TEST_CASE_P(GitIndex
, GitIndexCBasicGitWithTestRepoFixture
, testing::Values(LIBGIT2
));
61 TEST_P(GitIndexCBasicGitFixture
, EmptyDir
)
63 CGitIndexList indexList
;
64 EXPECT_EQ(-1, indexList
.ReadIndex(m_Dir
.GetTempDir()));
65 EXPECT_EQ(0, indexList
.size());
66 EXPECT_FALSE(indexList
.m_bHasConflicts
);
70 static void ReadAndCheckIndex(CGitIndexList
& indexList
, const CString
& gitdir
, int offset
= 0)
72 EXPECT_EQ(0, indexList
.ReadIndex(gitdir
));
73 ASSERT_EQ(14 + offset
, indexList
.size());
75 EXPECT_STREQ(L
"ansi.txt", indexList
[offset
].m_FileName
);
76 EXPECT_EQ(102, indexList
[offset
].m_Size
);
77 EXPECT_EQ(8, indexList
[offset
].m_Flags
);
78 EXPECT_EQ(0, indexList
[offset
].m_FlagsExtended
);
79 EXPECT_STREQ(L
"961bdffbfce1bc617fb594091c3229f1cc674d76", indexList
[offset
].m_IndexHash
.ToString());
80 EXPECT_STREQ(L
"copy/ansi.txt", indexList
[1 + offset
].m_FileName
);
81 EXPECT_EQ(103, indexList
[1 + offset
].m_Size
);
82 EXPECT_EQ(13, indexList
[1 + offset
].m_Flags
);
83 EXPECT_EQ(0, indexList
[1 + offset
].m_FlagsExtended
);
84 EXPECT_STREQ(L
"4c44667203f943dc5dbdf3cb526cb7ec24f60c09", indexList
[1 + offset
].m_IndexHash
.ToString());
85 EXPECT_STREQ(L
"copy/utf16-le-nobom.txt", indexList
[5 + offset
].m_FileName
);
86 EXPECT_EQ(218, indexList
[5 + offset
].m_Size
);
87 EXPECT_EQ(23, indexList
[5 + offset
].m_Flags
);
88 EXPECT_EQ(0, indexList
[5 + offset
].m_FlagsExtended
);
89 EXPECT_STREQ(L
"fbea9ccd85c33fcdb542d8c73f910ea0e70c3ddc", indexList
[5 + offset
].m_IndexHash
.ToString());
90 EXPECT_STREQ(L
"utf8-nobom.txt", indexList
[13 + offset
].m_FileName
);
91 EXPECT_EQ(139, indexList
[13 + offset
].m_Size
);
92 EXPECT_EQ(14, indexList
[13 + offset
].m_Flags
);
93 EXPECT_EQ(0, indexList
[13 + offset
].m_FlagsExtended
);
94 EXPECT_STREQ(L
"c225b3f14869ec8b6da32d52bd15dba0b043031d", indexList
[13 + offset
].m_IndexHash
.ToString());
95 EXPECT_FALSE(indexList
.m_bHasConflicts
);
98 TEST_P(GitIndexCBasicGitWithTestRepoFixture
, ReadIndex
)
100 CGitIndexList indexList
;
101 ReadAndCheckIndex(indexList
, m_Dir
.GetTempDir());
103 CString testFile
= m_Dir
.GetTempDir() + L
"\\1.txt";
104 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)testFile
, L
"this is testing file."));
106 EXPECT_EQ(0, m_Git
.Run(_T("git.exe add 1.txt"), &output
, CP_UTF8
));
107 EXPECT_TRUE(output
.IsEmpty());
109 ReadAndCheckIndex(indexList
, m_Dir
.GetTempDir(), 1);
111 EXPECT_STREQ(L
"1.txt", indexList
[0].m_FileName
);
112 EXPECT_EQ(21, indexList
[0].m_Size
);
113 EXPECT_EQ(5, indexList
[0].m_Flags
);
114 EXPECT_EQ(0, indexList
[0].m_FlagsExtended
);
115 EXPECT_STREQ(L
"e4aac1275dfc440ec521a76e9458476fe07038bb", indexList
[0].m_IndexHash
.ToString());
117 EXPECT_EQ(0, m_Git
.Run(_T("git.exe rm -f 1.txt"), &output
, CP_UTF8
));
119 ReadAndCheckIndex(indexList
, m_Dir
.GetTempDir());
122 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)testFile
, L
"this is testing file."));
123 EXPECT_EQ(0, m_Git
.Run(_T("git.exe add -N 1.txt"), &output
, CP_UTF8
));
124 EXPECT_TRUE(output
.IsEmpty());
126 ReadAndCheckIndex(indexList
, m_Dir
.GetTempDir(), 1);
128 EXPECT_STREQ(L
"1.txt", indexList
[0].m_FileName
);
129 EXPECT_EQ(0, indexList
[0].m_Size
);
130 EXPECT_EQ(16389, indexList
[0].m_Flags
);
131 EXPECT_EQ(GIT_IDXENTRY_INTENT_TO_ADD
, indexList
[0].m_FlagsExtended
);
132 EXPECT_STREQ(L
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", indexList
[0].m_IndexHash
.ToString());
135 TEST_P(GitIndexCBasicGitWithTestRepoFixture
, GetFileStatus
)
137 CGitIndexList indexList
;
138 ReadAndCheckIndex(indexList
, m_Dir
.GetTempDir());
140 git_wc_status_kind status
= git_wc_status_none
;
141 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"does-not-exist.txt", &status
, 10, 20));
142 EXPECT_EQ(git_wc_status_unversioned
, status
);
145 __int64 filesize
= -1;
146 status
= git_wc_status_none
;
147 bool skipworktree
= false;
148 EXPECT_EQ(-1, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"ansi.txt"), &time
, nullptr, &filesize
));
149 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"ansi.txt", &status
, time
, filesize
));
150 EXPECT_EQ(git_wc_status_modified
, status
);
153 EXPECT_EQ(0, m_Git
.Run(_T("git.exe reset --hard"), &output
, CP_UTF8
));
155 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"ansi.txt"), &time
, nullptr, &filesize
));
156 status
= git_wc_status_none
;
157 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"ansi.txt", &status
, time
, filesize
));
158 EXPECT_EQ(git_wc_status_normal
, status
);
160 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)CombinePath(m_Dir
.GetTempDir(), L
"ansi.txt"), L
"this is testing file."));
161 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"ansi.txt"), &time
, nullptr, &filesize
));
162 status
= git_wc_status_none
;
163 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"ansi.txt", &status
, time
, filesize
, nullptr, nullptr, nullptr, nullptr, &skipworktree
));
164 EXPECT_EQ(git_wc_status_modified
, status
);
165 EXPECT_FALSE(skipworktree
);
167 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)CombinePath(m_Dir
.GetTempDir(), L
"just-added.txt"), L
"this is testing file."));
168 EXPECT_EQ(0, m_Git
.Run(_T("git.exe add -- just-added.txt"), &output
, CP_UTF8
));
170 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)CombinePath(m_Dir
.GetTempDir(), L
"noted-as-added.txt"), L
"this is testing file."));
171 EXPECT_EQ(0, m_Git
.Run(_T("git.exe add -N -- noted-as-added.txt"), &output
, CP_UTF8
));
173 EXPECT_EQ(0, m_Git
.Run(_T("git.exe update-index --skip-worktree -- ansi.txt"), &output
, CP_UTF8
));
174 EXPECT_EQ(0, indexList
.ReadIndex(m_Dir
.GetTempDir()));
175 EXPECT_FALSE(indexList
.m_bHasConflicts
);
176 status
= git_wc_status_none
;
177 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"ansi.txt", &status
, time
, filesize
, nullptr, nullptr, nullptr, nullptr, &skipworktree
));
178 EXPECT_EQ(git_wc_status_normal
, status
);
179 EXPECT_TRUE(skipworktree
);
181 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"just-added.txt"), &time
, nullptr, &filesize
));
182 status
= git_wc_status_none
;
183 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"just-added.txt", &status
, time
, filesize
));
184 EXPECT_EQ(git_wc_status_normal
, status
);
186 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"noted-as-added.txt"), &time
, nullptr, &filesize
));
187 status
= git_wc_status_none
;
188 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"noted-as-added.txt", &status
, time
, filesize
));
189 EXPECT_EQ(git_wc_status_added
, status
);
191 EXPECT_EQ(0, m_Git
.Run(_T("git.exe update-index --no-skip-worktree ansi.txt"), &output
, CP_UTF8
));
194 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)CombinePath(m_Dir
.GetTempDir(), L
"just-added.txt"), L
"this IS testing file."));
195 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"just-added.txt"), &time
, nullptr, &filesize
));
196 status
= git_wc_status_none
;
197 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"just-added.txt", &status
, time
, filesize
));
198 EXPECT_EQ(git_wc_status_modified
, status
);
201 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout --force forconflict"), &output
, CP_UTF8
));
202 EXPECT_FALSE(output
.IsEmpty());
205 EXPECT_EQ(1, m_Git
.Run(_T("git.exe merge simple-conflict"), &output
, CP_UTF8
));
206 EXPECT_FALSE(output
.IsEmpty());
208 EXPECT_EQ(0, indexList
.ReadIndex(m_Dir
.GetTempDir()));
209 EXPECT_EQ(9, indexList
.size());
210 EXPECT_TRUE(indexList
.m_bHasConflicts
);
212 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"ansi.txt"), &time
, nullptr, &filesize
));
213 status
= git_wc_status_none
;
214 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"ansi.txt", &status
, time
, filesize
));
215 EXPECT_EQ(git_wc_status_conflicted
, status
);
218 TEST(GitIndex
, SearchInSortVector
)
220 std::vector
<CGitFileName
> vector
;
221 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", 9));
222 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", 0));
223 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", -1));
225 vector
.push_back(CGitFileName(L
"One"));
226 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", 9));
227 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", -1));
228 EXPECT_EQ(0, SearchInSortVector(vector
, L
"something", 0)); // do we really need this behavior?
229 EXPECT_EQ(0, SearchInSortVector(vector
, L
"one", 3));
230 EXPECT_EQ(0, SearchInSortVector(vector
, L
"one", -1));
231 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"one/", 4));
232 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"One", 3));
234 vector
.push_back(CGitFileName(L
"tWo"));
235 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", 9));
236 EXPECT_EQ(0, SearchInSortVector(vector
, L
"one", 3));
237 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"One", 3));
238 EXPECT_EQ(1, SearchInSortVector(vector
, L
"two", 3));
239 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"tWo", 3));
240 EXPECT_EQ(1, SearchInSortVector(vector
, L
"t", 1));
241 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"0", 1));
242 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"z", 1));
244 vector
.push_back(CGitFileName(L
"a"));
245 vector
.push_back(CGitFileName(L
"b/1"));
246 vector
.push_back(CGitFileName(L
"b/2"));
247 vector
.push_back(CGitFileName(L
"b/3"));
248 vector
.push_back(CGitFileName(L
"b/4"));
249 vector
.push_back(CGitFileName(L
"b/5"));
250 std::sort(vector
.begin(), vector
.end(), SortCGitFileName
);
251 EXPECT_EQ(2, SearchInSortVector(vector
, L
"b/2", 3));
252 EXPECT_EQ(2, SearchInSortVector(vector
, L
"b/2", -1));
253 EXPECT_EQ(3, SearchInSortVector(vector
, L
"b/", 2));
254 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"b/6", 3));
255 EXPECT_EQ(0, SearchInSortVector(vector
, L
"a", 1));
256 EXPECT_EQ(6, SearchInSortVector(vector
, L
"one", 3));
257 EXPECT_EQ(7, SearchInSortVector(vector
, L
"two", 3));
260 TEST(GitIndex
, GetRangeInSortVector
)
262 std::vector
<CGitFileName
> vector
;
266 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, &start
, &end
, -1));
267 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, &start
, &end
, 0));
268 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, &start
, nullptr, 0));
269 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, nullptr, &end
, 0));
270 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, nullptr, &end
, 1));
271 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"", 0, &start
, &end
, 0));
272 EXPECT_EQ(-1, start
);
275 vector
.push_back(CGitFileName(L
"a"));
277 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, &start
, &end
, -1));
278 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, &start
, nullptr, 0));
279 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, nullptr, &end
, 0));
280 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, nullptr, &end
, 1));
282 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"a", 1, &start
, &end
, -1));
283 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"a", 1, &start
, nullptr, 0));
284 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"a", 1, nullptr, &end
, 0));
285 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"a", 1, nullptr, &end
, 1));
287 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"", 0, &start
, &end
, 0));
291 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"", 0, &start
, &end
, 1));
294 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"0", 1, &start
, &end
, 0));
295 EXPECT_EQ(-1, start
);
298 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"b", 1, &start
, &end
, 0));
299 EXPECT_EQ(-1, start
);
303 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"a", 1, &start
, &end
, 0));
307 vector
.push_back(CGitFileName(L
"b/1"));
308 vector
.push_back(CGitFileName(L
"b/2"));
309 vector
.push_back(CGitFileName(L
"b/3"));
310 vector
.push_back(CGitFileName(L
"b/4"));
311 vector
.push_back(CGitFileName(L
"b/5"));
314 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"a", 1, &start
, &end
, 0));
319 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 1));
324 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 2));
329 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 4));
334 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 5));
338 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 6)); // 6 is >= vector.size()
341 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"c/", 2, &start
, &end
, 0));
342 EXPECT_EQ(-1, start
);
346 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"c/", 2, &start
, &end
, 5));
347 EXPECT_EQ(-1, start
);
350 vector
.push_back(CGitFileName(L
"c"));
351 vector
.push_back(CGitFileName(L
"d"));
354 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 1));
359 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 2));
364 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 4));
369 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 5));
374 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"c/", 2, &start
, &end
, 6));
375 EXPECT_EQ(-1, start
);
379 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"c", 1, &start
, &end
, 6));
384 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"", 0, &start
, &end
, 0));
389 TEST(GitIndex
, CGitIgnoreItem
)
391 CAutoTempDir tempDir
;
392 CGitIgnoreItem ignoreItem
;
395 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
396 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
398 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
399 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
401 EXPECT_EQ(-1, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), L
"does-not-exist", false));
402 EXPECT_EQ(-1, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), L
"does-not-exist", true));
404 CString ignoreFile
= tempDir
.GetTempDir() + L
"\\.gitignore";
406 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
""));
407 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
408 EXPECT_STREQ("", ignoreItem
.m_BaseDir
);
409 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
410 EXPECT_STREQ("", ignoreItem
.m_BaseDir
);
412 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"#"));
413 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
414 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
416 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"# comment"));
417 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
418 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
420 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"\n"));
421 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
422 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
424 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"\n#"));
425 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
426 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
428 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"*.tmp\n"));
429 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
431 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
432 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("text.tmp", type
));
433 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/text.tmp", type
));
434 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("1.tmp.1", type
));
436 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
437 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("text.tmp", type
));
438 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/text.tmp", type
));
439 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("1.tmp.1", type
));
440 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
442 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
443 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("text.tmp", type
));
444 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/text.tmp", type
));
445 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("1.tmp.1", type
));
447 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
448 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("text.tmp", type
));
449 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/text.tmp", type
));
450 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("1.tmp.1", type
));
452 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"some-file\n"));
453 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
455 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
456 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
457 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
458 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
460 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
461 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
462 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
463 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
464 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
466 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
467 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
468 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
469 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
471 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
472 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
473 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
474 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
476 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"\n\nsome-file\n"));
477 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
479 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
480 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
482 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
483 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
484 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
486 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
487 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
489 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
490 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
492 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"/some-file"));
493 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
495 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
496 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
498 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
499 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
500 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
502 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
503 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
505 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
506 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
508 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"some-dir/"));
509 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
511 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
512 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/some-file", type
));
514 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-file", type
));
515 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
516 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/some-file", type
));
517 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
519 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
520 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/some-file", type
));
522 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-file", type
));
523 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
524 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/some-file", type
));
526 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"some-*\n!some-file"));
527 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
529 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
530 EXPECT_EQ(0, ignoreItem
.IsPathIgnored("some-file", type
));
531 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
533 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
534 EXPECT_EQ(0, ignoreItem
.IsPathIgnored("some-file", type
));
535 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
536 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
538 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
539 EXPECT_EQ(0, ignoreItem
.IsPathIgnored("some-file", type
));
540 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
542 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
543 EXPECT_EQ(0, ignoreItem
.IsPathIgnored("some-file", type
));
544 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
546 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"some-file\nanother/dir/*"));
547 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
549 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
550 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
551 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another", type
));
552 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another/dir", type
));
553 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("another/dir/some", type
));
555 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
556 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
557 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another", type
));
558 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another/dir", type
));
559 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("another/dir/some", type
));
560 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
562 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
563 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
564 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another", type
));
565 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another/dir", type
));
566 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("another/dir/some", type
));
568 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
569 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
570 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another", type
));
571 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another/dir", type
));
572 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("another/dir/some", type
));
574 EXPECT_TRUE(::CreateDirectory(tempDir
.GetTempDir() + L
"\\subdir", nullptr));
575 ignoreFile
= tempDir
.GetTempDir() + L
"\\subdir\\.gitignore";
576 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"/something"));
577 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
578 EXPECT_STREQ("subdir/", ignoreItem
.m_BaseDir
);
580 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
581 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
582 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
583 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
584 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
585 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
587 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
588 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
589 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
590 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
591 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
592 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
593 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
594 EXPECT_STREQ("", ignoreItem
.m_BaseDir
);
596 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
597 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
598 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
599 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something", type
));
600 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
601 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
603 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
604 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
605 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
606 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something", type
));
607 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
608 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
610 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"something"));
611 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
612 EXPECT_STREQ("subdir/", ignoreItem
.m_BaseDir
);
614 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
615 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
616 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
617 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
618 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
619 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
621 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
622 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
623 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
624 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
625 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
626 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
627 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
628 EXPECT_STREQ("", ignoreItem
.m_BaseDir
);
630 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
631 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
632 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
633 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
634 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
635 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
637 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
638 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
639 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
640 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
641 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
642 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));