1
// TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2015 - 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());
69 static void ReadAndCheckIndex(CGitIndexList
& indexList
, const CString
& gitdir
, int offset
= 0)
71 EXPECT_EQ(0, indexList
.ReadIndex(gitdir
));
72 ASSERT_EQ(14 + offset
, indexList
.size());
74 EXPECT_STREQ(L
"ansi.txt", indexList
[offset
].m_FileName
);
75 EXPECT_EQ(102, indexList
[offset
].m_Size
);
76 EXPECT_EQ(8, indexList
[offset
].m_Flags
);
77 EXPECT_STREQ(L
"961bdffbfce1bc617fb594091c3229f1cc674d76", indexList
[offset
].m_IndexHash
.ToString());
78 EXPECT_STREQ(L
"copy/ansi.txt", indexList
[1 + offset
].m_FileName
);
79 EXPECT_EQ(103, indexList
[1 + offset
].m_Size
);
80 EXPECT_EQ(13, indexList
[1 + offset
].m_Flags
);
81 EXPECT_STREQ(L
"4c44667203f943dc5dbdf3cb526cb7ec24f60c09", indexList
[1 + offset
].m_IndexHash
.ToString());
82 EXPECT_STREQ(L
"copy/utf16-le-nobom.txt", indexList
[5 + offset
].m_FileName
);
83 EXPECT_EQ(218, indexList
[5 + offset
].m_Size
);
84 EXPECT_EQ(23, indexList
[5 + offset
].m_Flags
);
85 EXPECT_STREQ(L
"fbea9ccd85c33fcdb542d8c73f910ea0e70c3ddc", indexList
[5 + offset
].m_IndexHash
.ToString());
86 EXPECT_STREQ(L
"utf8-nobom.txt", indexList
[13 + offset
].m_FileName
);
87 EXPECT_EQ(139, indexList
[13 + offset
].m_Size
);
88 EXPECT_EQ(14, indexList
[13 + offset
].m_Flags
);
89 EXPECT_STREQ(L
"c225b3f14869ec8b6da32d52bd15dba0b043031d", indexList
[13 + offset
].m_IndexHash
.ToString());
92 TEST_P(GitIndexCBasicGitWithTestRepoFixture
, ReadIndex
)
94 CGitIndexList indexList
;
95 ReadAndCheckIndex(indexList
, m_Dir
.GetTempDir());
97 CString testFile
= m_Dir
.GetTempDir() + L
"\\1.txt";
98 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)testFile
, L
"this is testing file."));
100 EXPECT_EQ(0, m_Git
.Run(_T("git.exe add 1.txt"), &output
, CP_UTF8
));
101 EXPECT_TRUE(output
.IsEmpty());
103 ReadAndCheckIndex(indexList
, m_Dir
.GetTempDir(), 1);
105 EXPECT_STREQ(L
"1.txt", indexList
[0].m_FileName
);
106 EXPECT_EQ(21, indexList
[0].m_Size
);
107 EXPECT_EQ(5, indexList
[0].m_Flags
);
108 EXPECT_STREQ(L
"e4aac1275dfc440ec521a76e9458476fe07038bb", indexList
[0].m_IndexHash
.ToString());
110 EXPECT_EQ(0, m_Git
.Run(_T("git.exe rm -f 1.txt"), &output
, CP_UTF8
));
112 ReadAndCheckIndex(indexList
, m_Dir
.GetTempDir());
115 TEST_P(GitIndexCBasicGitWithTestRepoFixture
, GetFileStatus
)
117 CGitIndexList indexList
;
118 ReadAndCheckIndex(indexList
, m_Dir
.GetTempDir());
120 git_wc_status_kind status
= git_wc_status_none
;
121 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"does-not-exist.txt", &status
, 10, 20));
122 EXPECT_EQ(git_wc_status_unversioned
, status
);
125 __int64 filesize
= -1;
126 status
= git_wc_status_none
;
127 bool skipworktree
= false;
128 EXPECT_EQ(-1, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"ansi.txt"), &time
, nullptr, &filesize
));
129 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"ansi.txt", &status
, time
, filesize
));
130 EXPECT_EQ(git_wc_status_modified
, status
);
133 EXPECT_EQ(0, m_Git
.Run(_T("git.exe reset --hard"), &output
, CP_UTF8
));
135 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"ansi.txt"), &time
, nullptr, &filesize
));
136 status
= git_wc_status_none
;
137 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"ansi.txt", &status
, time
, filesize
));
138 EXPECT_EQ(git_wc_status_normal
, status
);
140 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)CombinePath(m_Dir
.GetTempDir(), L
"ansi.txt"), L
"this is testing file."));
141 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"ansi.txt"), &time
, nullptr, &filesize
));
142 status
= git_wc_status_none
;
143 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"ansi.txt", &status
, time
, filesize
, nullptr, nullptr, nullptr, nullptr, &skipworktree
));
144 EXPECT_EQ(git_wc_status_modified
, status
);
145 EXPECT_FALSE(skipworktree
);
147 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)CombinePath(m_Dir
.GetTempDir(), L
"just-added.txt"), L
"this is testing file."));
148 EXPECT_EQ(0, m_Git
.Run(_T("git.exe add -- just-added.txt"), &output
, CP_UTF8
));
150 EXPECT_EQ(0, m_Git
.Run(_T("git.exe update-index --skip-worktree -- ansi.txt"), &output
, CP_UTF8
));
151 EXPECT_EQ(0, indexList
.ReadIndex(m_Dir
.GetTempDir()));
152 status
= git_wc_status_none
;
153 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"ansi.txt", &status
, time
, filesize
, nullptr, nullptr, nullptr, nullptr, &skipworktree
));
154 EXPECT_EQ(git_wc_status_normal
, status
);
155 EXPECT_TRUE(skipworktree
);
157 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"just-added.txt"), &time
, nullptr, &filesize
));
158 status
= git_wc_status_none
;
159 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"just-added.txt", &status
, time
, filesize
));
160 EXPECT_EQ(git_wc_status_normal
, status
);
162 EXPECT_EQ(0, m_Git
.Run(_T("git.exe update-index --no-skip-worktree ansi.txt"), &output
, CP_UTF8
));
165 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)CombinePath(m_Dir
.GetTempDir(), L
"just-added.txt"), L
"this IS testing file."));
166 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"just-added.txt"), &time
, nullptr, &filesize
));
167 status
= git_wc_status_none
;
168 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"just-added.txt", &status
, time
, filesize
));
169 EXPECT_EQ(git_wc_status_modified
, status
);
172 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout --force forconflict"), &output
, CP_UTF8
));
173 EXPECT_FALSE(output
.IsEmpty());
176 EXPECT_EQ(1, m_Git
.Run(_T("git.exe merge simple-conflict"), &output
, CP_UTF8
));
177 EXPECT_FALSE(output
.IsEmpty());
179 EXPECT_EQ(0, indexList
.ReadIndex(m_Dir
.GetTempDir()));
180 EXPECT_EQ(9, indexList
.size());
182 EXPECT_EQ(0, CGit::GetFileModifyTime(CombinePath(m_Dir
.GetTempDir(), L
"ansi.txt"), &time
, nullptr, &filesize
));
183 status
= git_wc_status_none
;
184 EXPECT_EQ(0, indexList
.GetFileStatus(m_Dir
.GetTempDir(), L
"ansi.txt", &status
, time
, filesize
));
185 EXPECT_EQ(git_wc_status_conflicted
, status
);
188 TEST(GitIndex
, SearchInSortVector
)
190 std::vector
<CGitFileName
> vector
;
191 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", 9));
192 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", 0));
193 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", -1));
195 vector
.push_back(CGitFileName(L
"One"));
196 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", 9));
197 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", -1));
198 EXPECT_EQ(0, SearchInSortVector(vector
, L
"something", 0)); // do we really need this behavior?
199 EXPECT_EQ(0, SearchInSortVector(vector
, L
"one", 3));
200 EXPECT_EQ(0, SearchInSortVector(vector
, L
"one", -1));
201 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"one/", 4));
202 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"One", 3));
204 vector
.push_back(CGitFileName(L
"tWo"));
205 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"something", 9));
206 EXPECT_EQ(0, SearchInSortVector(vector
, L
"one", 3));
207 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"One", 3));
208 EXPECT_EQ(1, SearchInSortVector(vector
, L
"two", 3));
209 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"tWo", 3));
210 EXPECT_EQ(1, SearchInSortVector(vector
, L
"t", 1));
211 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"0", 1));
212 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"z", 1));
214 vector
.push_back(CGitFileName(L
"a"));
215 vector
.push_back(CGitFileName(L
"b/1"));
216 vector
.push_back(CGitFileName(L
"b/2"));
217 vector
.push_back(CGitFileName(L
"b/3"));
218 vector
.push_back(CGitFileName(L
"b/4"));
219 vector
.push_back(CGitFileName(L
"b/5"));
220 std::sort(vector
.begin(), vector
.end(), SortCGitFileName
);
221 EXPECT_EQ(2, SearchInSortVector(vector
, L
"b/2", 3));
222 EXPECT_EQ(2, SearchInSortVector(vector
, L
"b/2", -1));
223 EXPECT_EQ(3, SearchInSortVector(vector
, L
"b/", 2));
224 EXPECT_EQ(-1, SearchInSortVector(vector
, L
"b/6", 3));
225 EXPECT_EQ(0, SearchInSortVector(vector
, L
"a", 1));
226 EXPECT_EQ(6, SearchInSortVector(vector
, L
"one", 3));
227 EXPECT_EQ(7, SearchInSortVector(vector
, L
"two", 3));
230 TEST(GitIndex
, GetRangeInSortVector
)
232 std::vector
<CGitFileName
> vector
;
236 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, &start
, &end
, -1));
237 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, &start
, &end
, 0));
238 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, &start
, nullptr, 0));
239 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, nullptr, &end
, 0));
240 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, nullptr, &end
, 1));
241 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"", 0, &start
, &end
, 0));
242 EXPECT_EQ(-1, start
);
245 vector
.push_back(CGitFileName(L
"a"));
247 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, &start
, &end
, -1));
248 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, &start
, nullptr, 0));
249 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, nullptr, &end
, 0));
250 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"something", 9, nullptr, &end
, 1));
252 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"a", 1, &start
, &end
, -1));
253 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"a", 1, &start
, nullptr, 0));
254 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"a", 1, nullptr, &end
, 0));
255 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"a", 1, nullptr, &end
, 1));
257 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"", 0, &start
, &end
, 0));
261 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"", 0, &start
, &end
, 1));
264 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"0", 1, &start
, &end
, 0));
265 EXPECT_EQ(-1, start
);
268 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"b", 1, &start
, &end
, 0));
269 EXPECT_EQ(-1, start
);
273 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"a", 1, &start
, &end
, 0));
277 vector
.push_back(CGitFileName(L
"b/1"));
278 vector
.push_back(CGitFileName(L
"b/2"));
279 vector
.push_back(CGitFileName(L
"b/3"));
280 vector
.push_back(CGitFileName(L
"b/4"));
281 vector
.push_back(CGitFileName(L
"b/5"));
284 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"a", 1, &start
, &end
, 0));
289 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 1));
294 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 2));
299 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 4));
304 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 5));
308 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 6)); // 6 is >= vector.size()
311 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"c/", 2, &start
, &end
, 0));
312 EXPECT_EQ(-1, start
);
316 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"c/", 2, &start
, &end
, 5));
317 EXPECT_EQ(-1, start
);
320 vector
.push_back(CGitFileName(L
"c"));
321 vector
.push_back(CGitFileName(L
"d"));
324 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 1));
329 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 2));
334 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 4));
339 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"b/", 2, &start
, &end
, 5));
344 EXPECT_EQ(-1, GetRangeInSortVector(vector
, L
"c/", 2, &start
, &end
, 6));
345 EXPECT_EQ(-1, start
);
349 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"c", 1, &start
, &end
, 6));
354 EXPECT_EQ(0, GetRangeInSortVector(vector
, L
"", 0, &start
, &end
, 0));
359 TEST(GitIndex
, CGitIgnoreItem
)
361 CAutoTempDir tempDir
;
362 CGitIgnoreItem ignoreItem
;
365 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
366 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
368 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
369 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
371 EXPECT_EQ(-1, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), L
"does-not-exist", false));
372 EXPECT_EQ(-1, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), L
"does-not-exist", true));
374 CString ignoreFile
= tempDir
.GetTempDir() + L
"\\.gitignore";
376 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
""));
377 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
378 EXPECT_STREQ("", ignoreItem
.m_BaseDir
);
379 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
380 EXPECT_STREQ("", ignoreItem
.m_BaseDir
);
382 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"#"));
383 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
384 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
386 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"# comment"));
387 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
388 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
390 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"\n"));
391 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
392 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
394 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"\n#"));
395 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
396 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
398 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"*.tmp\n"));
399 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
401 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
402 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("text.tmp", type
));
403 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/text.tmp", type
));
404 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("1.tmp.1", type
));
406 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
407 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("text.tmp", type
));
408 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/text.tmp", type
));
409 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("1.tmp.1", type
));
410 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
412 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
413 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("text.tmp", type
));
414 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/text.tmp", type
));
415 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("1.tmp.1", type
));
417 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
418 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("text.tmp", type
));
419 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/text.tmp", type
));
420 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("1.tmp.1", type
));
422 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"some-file\n"));
423 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
425 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
426 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
427 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
428 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
430 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
431 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
432 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
433 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
434 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
436 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
437 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
438 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
439 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
441 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("not-ignored", type
));
442 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/not-ignored", type
));
443 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
444 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
446 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"\n\nsome-file\n"));
447 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
449 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
450 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
452 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
453 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
454 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
456 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
457 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
459 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
460 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
462 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"/some-file"));
463 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
465 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
466 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
468 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
469 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
470 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
472 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
473 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
475 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
476 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-file", type
));
478 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"some-dir/"));
479 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
481 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
482 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/some-file", type
));
484 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-file", type
));
485 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
486 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/some-file", type
));
487 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
489 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
490 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/some-file", type
));
492 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-file", type
));
493 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
494 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/some-file", type
));
496 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"some-*\n!some-file"));
497 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
499 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
500 EXPECT_EQ(0, ignoreItem
.IsPathIgnored("some-file", type
));
501 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
503 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
504 EXPECT_EQ(0, ignoreItem
.IsPathIgnored("some-file", type
));
505 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
506 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
508 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
509 EXPECT_EQ(0, ignoreItem
.IsPathIgnored("some-file", type
));
510 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
512 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir", type
));
513 EXPECT_EQ(0, ignoreItem
.IsPathIgnored("some-file", type
));
514 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
516 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"some-file\nanother/dir/*"));
517 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
519 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
520 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
521 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another", type
));
522 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another/dir", type
));
523 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("another/dir/some", type
));
525 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
526 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
527 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another", type
));
528 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another/dir", type
));
529 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("another/dir/some", type
));
530 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
532 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
533 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
534 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another", type
));
535 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another/dir", type
));
536 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("another/dir/some", type
));
538 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir", type
));
539 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-file", type
));
540 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another", type
));
541 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("another/dir", type
));
542 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("another/dir/some", type
));
544 EXPECT_TRUE(::CreateDirectory(tempDir
.GetTempDir() + L
"\\subdir", nullptr));
545 ignoreFile
= tempDir
.GetTempDir() + L
"\\subdir\\.gitignore";
546 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"/something"));
547 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
548 EXPECT_STREQ("subdir/", ignoreItem
.m_BaseDir
);
550 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
551 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
552 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
553 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
554 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
555 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
557 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something", type
));
558 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
559 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
560 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
561 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
562 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
563 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
564 EXPECT_STREQ("", ignoreItem
.m_BaseDir
);
566 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
567 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
568 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
569 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something", type
));
570 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
571 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
573 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
574 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
575 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
576 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something", type
));
577 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
578 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
580 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)ignoreFile
, L
"something"));
581 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, false));
582 EXPECT_STREQ("subdir/", ignoreItem
.m_BaseDir
);
584 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
585 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
586 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
587 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
588 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
589 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
591 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
592 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
593 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
594 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
595 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
596 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
597 EXPECT_EQ(0, ignoreItem
.FetchIgnoreList(tempDir
.GetTempDir(), ignoreFile
, true));
598 EXPECT_STREQ("", ignoreItem
.m_BaseDir
);
600 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
601 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
602 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
603 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
604 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
605 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));
607 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("something", type
));
608 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("something/more", type
));
609 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("some-dir/something", type
));
610 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/something", type
));
611 EXPECT_EQ(-1, ignoreItem
.IsPathIgnored("subdir/something/more", type
));
612 EXPECT_EQ(1, ignoreItem
.IsPathIgnored("subdir/some-dir/something", type
));