Fix '==': signed/unsigned mismatch warning
[TortoiseGit.git] / test / UnitTests / GitWCRevStatusTest.cpp
blob4ac0d2a76e8f9040ec51cf3fbdb6cc84ac98f512
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2018 - 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.
20 #include "stdafx.h"
21 #include "RepositoryFixtures.h"
22 #include "StringUtils.h"
23 #include "status.h"
25 class GitWCRevStatusCBasicGitWithTestRepoFixture : public CBasicGitWithTestRepoFixture
29 class GitWCRevStatusCBasicGitWithEmptyRepositoryFixture : public CBasicGitWithEmptyRepositoryFixture
33 class GitWCRevStatusCBasicGitWithTestBareRepositoryFixture : public CBasicGitWithTestRepoBareFixture
37 INSTANTIATE_TEST_CASE_P(GitWCRevStatus, GitWCRevStatusCBasicGitWithTestRepoFixture, testing::Values(LIBGIT2));
38 INSTANTIATE_TEST_CASE_P(GitWCRevStatus, GitWCRevStatusCBasicGitWithEmptyRepositoryFixture, testing::Values(LIBGIT2));
39 INSTANTIATE_TEST_CASE_P(GitWCRevStatus, GitWCRevStatusCBasicGitWithTestBareRepositoryFixture, testing::Values(LIBGIT2));
41 TEST(GitWCRevStatus, NotExists)
43 GitWCRev_t GitStat;
44 EXPECT_EQ(ERR_NOWC, GetStatus(L"C:\\Windows\\does-not-exist", GitStat));
47 TEST(GitWCRevStatus, NoWorkingTree)
49 GitWCRev_t GitStat;
50 EXPECT_EQ(ERR_NOWC, GetStatus(L"C:\\Windows", GitStat));
53 TEST(GitWCRevStatus, EmptyBareRepo)
55 CAutoTempDir tempdir;
57 git_repository_init_options options = GIT_REPOSITORY_INIT_OPTIONS_INIT;
58 options.flags = GIT_REPOSITORY_INIT_MKPATH | GIT_REPOSITORY_INIT_BARE | GIT_REPOSITORY_INIT_NO_DOTGIT_DIR;
59 CAutoRepository repo;
60 ASSERT_EQ(0, git_repository_init_ext(repo.GetPointer(), CUnicodeUtils::GetUTF8(tempdir.GetTempDir()), &options));
62 GitWCRev_t GitStat;
63 EXPECT_EQ(ERR_NOWC, GetStatus(tempdir.GetTempDir(), GitStat));
66 TEST_P(GitWCRevStatusCBasicGitWithTestBareRepositoryFixture, BareRepo)
68 GitWCRev_t GitStat;
69 EXPECT_EQ(ERR_NOWC, GetStatus(m_Dir.GetTempDir(), GitStat));
72 TEST_P(GitWCRevStatusCBasicGitWithEmptyRepositoryFixture, EmptyRepo)
74 GitWCRev_t GitStat;
75 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat));
76 EXPECT_TRUE(GitStat.bIsGitItem);
77 EXPECT_TRUE(GitStat.bIsUnborn);
78 EXPECT_STREQ("master", GitStat.CurrentBranch.c_str());
79 EXPECT_FALSE(GitStat.bHasSubmodule);
80 EXPECT_FALSE(GitStat.HasMods);
81 EXPECT_FALSE(GitStat.HasUnversioned);
82 EXPECT_EQ(0u, GitStat.NumCommits);
83 EXPECT_FALSE(GitStat.bHasSubmoduleMods);
84 EXPECT_FALSE(GitStat.bHasSubmoduleNewCommits);
85 EXPECT_FALSE(GitStat.bHasSubmoduleUnversioned);
86 EXPECT_FALSE(GitStat.bIsTagged);
87 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat.HeadHashReadable);
88 EXPECT_STREQ("", GitStat.HeadAuthor.c_str());
91 TEST_P(GitWCRevStatusCBasicGitWithEmptyRepositoryFixture, EmptyRepoFile)
93 CString file = m_Dir.GetTempDir() + L"\\somefile.txt";
95 GitWCRev_t GitStat;
96 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(file, L"something\n"));
97 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat));
98 EXPECT_TRUE(GitStat.bIsGitItem);
99 EXPECT_TRUE(GitStat.bIsUnborn);
100 EXPECT_STREQ("master", GitStat.CurrentBranch.c_str());
101 EXPECT_FALSE(GitStat.bHasSubmodule);
102 EXPECT_FALSE(GitStat.HasMods);
103 EXPECT_TRUE(GitStat.HasUnversioned);
104 EXPECT_EQ(0u, GitStat.NumCommits);
105 EXPECT_FALSE(GitStat.bHasSubmoduleMods);
106 EXPECT_FALSE(GitStat.bHasSubmoduleNewCommits);
107 EXPECT_FALSE(GitStat.bHasSubmoduleUnversioned);
108 EXPECT_FALSE(GitStat.bIsTagged);
109 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat.HeadHashReadable);
110 EXPECT_STREQ("", GitStat.HeadAuthor.c_str());
112 GitWCRev_t GitStat2;
113 EXPECT_EQ(0, GetStatus(file, GitStat2));
114 EXPECT_FALSE(GitStat2.bIsGitItem);
115 EXPECT_TRUE(GitStat2.bIsUnborn);
116 EXPECT_STREQ("master", GitStat2.CurrentBranch.c_str());
117 EXPECT_FALSE(GitStat2.bHasSubmodule);
118 EXPECT_FALSE(GitStat2.HasMods);
119 EXPECT_TRUE(GitStat2.HasUnversioned);
120 EXPECT_EQ(0u, GitStat2.NumCommits);
121 EXPECT_FALSE(GitStat2.bHasSubmoduleMods);
122 EXPECT_FALSE(GitStat2.bHasSubmoduleNewCommits);
123 EXPECT_FALSE(GitStat2.bHasSubmoduleUnversioned);
124 EXPECT_FALSE(GitStat2.bIsTagged);
125 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat2.HeadHashReadable);
126 EXPECT_STREQ("", GitStat2.HeadAuthor.c_str());
129 TEST_P(GitWCRevStatusCBasicGitWithEmptyRepositoryFixture, EmptyRepoStagedFile)
131 CString file = m_Dir.GetTempDir() + L"\\somefile.txt";
133 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(file, L"something\n"));
135 CAutoRepository repo;
136 ASSERT_EQ(0, git_repository_open(repo.GetPointer(), CUnicodeUtils::GetUTF8(m_Dir.GetTempDir())));
137 CAutoIndex index;
138 ASSERT_EQ(0, git_repository_index(index.GetPointer(), repo));
139 ASSERT_EQ(0, git_index_add_bypath(index, "somefile.txt"));
140 ASSERT_EQ(0, git_index_write(index));
142 GitWCRev_t GitStat3;
143 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(file, L"something\n"));
144 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat3));
145 EXPECT_TRUE(GitStat3.bIsGitItem);
146 EXPECT_TRUE(GitStat3.bIsUnborn);
147 EXPECT_STREQ("master", GitStat3.CurrentBranch.c_str());
148 EXPECT_FALSE(GitStat3.bHasSubmodule);
149 EXPECT_FALSE(GitStat3.HasMods);
150 EXPECT_TRUE(GitStat3.HasUnversioned);
151 EXPECT_EQ(0u, GitStat3.NumCommits);
152 EXPECT_FALSE(GitStat3.bHasSubmoduleMods);
153 EXPECT_FALSE(GitStat3.bHasSubmoduleNewCommits);
154 EXPECT_FALSE(GitStat3.bHasSubmoduleUnversioned);
155 EXPECT_FALSE(GitStat3.bIsTagged);
156 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat3.HeadHashReadable);
157 EXPECT_STREQ("", GitStat3.HeadAuthor.c_str());
159 GitWCRev_t GitStat4;
160 EXPECT_EQ(0, GetStatus(file, GitStat4));
161 EXPECT_FALSE(GitStat4.bIsGitItem);
162 EXPECT_TRUE(GitStat4.bIsUnborn);
163 EXPECT_STREQ("master", GitStat4.CurrentBranch.c_str());
164 EXPECT_FALSE(GitStat4.bHasSubmodule);
165 EXPECT_FALSE(GitStat4.HasMods);
166 EXPECT_TRUE(GitStat4.HasUnversioned);
167 EXPECT_EQ(0u, GitStat4.NumCommits);
168 EXPECT_FALSE(GitStat4.bHasSubmoduleMods);
169 EXPECT_FALSE(GitStat4.bHasSubmoduleNewCommits);
170 EXPECT_FALSE(GitStat4.bHasSubmoduleUnversioned);
171 EXPECT_FALSE(GitStat4.bIsTagged);
172 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat4.HeadHashReadable);
173 EXPECT_STREQ("", GitStat4.HeadAuthor.c_str());
176 TEST_P(GitWCRevStatusCBasicGitWithEmptyRepositoryFixture, EmptyRepoFolder)
178 CString folder = m_Dir.GetTempDir() + L"\\folder";
179 GitWCRev_t GitStat;
180 ASSERT_TRUE(CreateDirectory(folder, nullptr));
181 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat));
182 EXPECT_TRUE(GitStat.bIsGitItem);
183 EXPECT_TRUE(GitStat.bIsUnborn);
184 EXPECT_STREQ("master", GitStat.CurrentBranch.c_str());
185 EXPECT_FALSE(GitStat.bHasSubmodule);
186 EXPECT_FALSE(GitStat.HasMods);
187 EXPECT_FALSE(GitStat.HasUnversioned);
188 EXPECT_EQ(0u, GitStat.NumCommits);
189 EXPECT_FALSE(GitStat.bHasSubmoduleMods);
190 EXPECT_FALSE(GitStat.bHasSubmoduleNewCommits);
191 EXPECT_FALSE(GitStat.bHasSubmoduleUnversioned);
192 EXPECT_FALSE(GitStat.bIsTagged);
193 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat.HeadHashReadable);
194 EXPECT_STREQ("", GitStat.HeadAuthor.c_str());
196 GitWCRev_t GitStat2;
197 EXPECT_EQ(0, GetStatus(folder, GitStat2));
198 EXPECT_FALSE(GitStat2.bIsGitItem);
199 EXPECT_TRUE(GitStat2.bIsUnborn);
200 EXPECT_STREQ("master", GitStat2.CurrentBranch.c_str());
201 EXPECT_FALSE(GitStat2.bHasSubmodule);
202 EXPECT_FALSE(GitStat2.HasMods);
203 EXPECT_FALSE(GitStat2.HasUnversioned);
204 EXPECT_EQ(0u, GitStat2.NumCommits);
205 EXPECT_FALSE(GitStat2.bHasSubmoduleMods);
206 EXPECT_FALSE(GitStat2.bHasSubmoduleNewCommits);
207 EXPECT_FALSE(GitStat2.bHasSubmoduleUnversioned);
208 EXPECT_FALSE(GitStat2.bIsTagged);
209 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat2.HeadHashReadable);
210 EXPECT_STREQ("", GitStat2.HeadAuthor.c_str());
213 TEST_P(GitWCRevStatusCBasicGitWithEmptyRepositoryFixture, EmptyRepoFolderFile)
215 CString folder = m_Dir.GetTempDir() + L"\\folder";
217 GitWCRev_t GitStat;
218 ASSERT_TRUE(CreateDirectory(folder, nullptr));
219 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(folder + L"\\somefile.txt", L"something\n"));
220 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat));
221 EXPECT_TRUE(GitStat.bIsGitItem);
222 EXPECT_TRUE(GitStat.bIsUnborn);
223 EXPECT_STREQ("master", GitStat.CurrentBranch.c_str());
224 EXPECT_FALSE(GitStat.bHasSubmodule);
225 EXPECT_FALSE(GitStat.HasMods);
226 EXPECT_TRUE(GitStat.HasUnversioned);
227 EXPECT_EQ(0u, GitStat.NumCommits);
228 EXPECT_FALSE(GitStat.bHasSubmoduleMods);
229 EXPECT_FALSE(GitStat.bHasSubmoduleNewCommits);
230 EXPECT_FALSE(GitStat.bHasSubmoduleUnversioned);
231 EXPECT_FALSE(GitStat.bIsTagged);
232 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat.HeadHashReadable);
233 EXPECT_STREQ("", GitStat.HeadAuthor.c_str());
235 GitWCRev_t GitStat2;
236 EXPECT_EQ(0, GetStatus(folder, GitStat2));
237 EXPECT_FALSE(GitStat2.bIsGitItem);
238 EXPECT_TRUE(GitStat2.bIsUnborn);
239 EXPECT_STREQ("master", GitStat2.CurrentBranch.c_str());
240 EXPECT_FALSE(GitStat2.bHasSubmodule);
241 EXPECT_FALSE(GitStat2.HasMods);
242 EXPECT_TRUE(GitStat2.HasUnversioned);
243 EXPECT_EQ(0u, GitStat2.NumCommits);
244 EXPECT_FALSE(GitStat2.bHasSubmoduleMods);
245 EXPECT_FALSE(GitStat2.bHasSubmoduleNewCommits);
246 EXPECT_FALSE(GitStat2.bHasSubmoduleUnversioned);
247 EXPECT_FALSE(GitStat2.bIsTagged);
248 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat2.HeadHashReadable);
249 EXPECT_STREQ("", GitStat2.HeadAuthor.c_str());
251 GitWCRev_t GitStat3;
252 EXPECT_EQ(0, GetStatus(folder + L"\\somefile.txt", GitStat3));
253 EXPECT_FALSE(GitStat3.bIsGitItem);
254 EXPECT_TRUE(GitStat3.bIsUnborn);
255 EXPECT_STREQ("master", GitStat3.CurrentBranch.c_str());
256 EXPECT_FALSE(GitStat3.bHasSubmodule);
257 EXPECT_FALSE(GitStat3.HasMods);
258 EXPECT_TRUE(GitStat3.HasUnversioned);
259 EXPECT_EQ(0u, GitStat3.NumCommits);
260 EXPECT_FALSE(GitStat3.bHasSubmoduleMods);
261 EXPECT_FALSE(GitStat3.bHasSubmoduleNewCommits);
262 EXPECT_FALSE(GitStat3.bHasSubmoduleUnversioned);
263 EXPECT_FALSE(GitStat3.bIsTagged);
264 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat3.HeadHashReadable);
265 EXPECT_STREQ("", GitStat3.HeadAuthor.c_str());
267 CString folder2 = folder + L"2";
268 ASSERT_TRUE(CreateDirectory(folder2, nullptr));
269 GitWCRev_t GitStat4;
270 EXPECT_EQ(0, GetStatus(folder2, GitStat4));
271 EXPECT_FALSE(GitStat4.bIsGitItem);
272 EXPECT_TRUE(GitStat4.bIsUnborn);
273 EXPECT_STREQ("master", GitStat4.CurrentBranch.c_str());
274 EXPECT_FALSE(GitStat4.bHasSubmodule);
275 EXPECT_FALSE(GitStat4.HasMods);
276 EXPECT_FALSE(GitStat4.HasUnversioned);
277 EXPECT_EQ(0u, GitStat4.NumCommits);
278 EXPECT_FALSE(GitStat4.bHasSubmoduleMods);
279 EXPECT_FALSE(GitStat4.bHasSubmoduleNewCommits);
280 EXPECT_FALSE(GitStat4.bHasSubmoduleUnversioned);
281 EXPECT_FALSE(GitStat4.bIsTagged);
282 EXPECT_STREQ(GIT_REV_ZERO_C, GitStat4.HeadHashReadable);
283 EXPECT_STREQ("", GitStat4.HeadAuthor.c_str());
286 TEST_P(GitWCRevStatusCBasicGitWithTestRepoFixture, Basic)
288 GitWCRev_t GitStat;
289 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat));
290 EXPECT_TRUE(GitStat.bIsGitItem);
291 EXPECT_FALSE(GitStat.bIsUnborn);
292 EXPECT_STREQ("master", GitStat.CurrentBranch.c_str());
293 EXPECT_FALSE(GitStat.bHasSubmodule);
294 EXPECT_TRUE(GitStat.HasMods);
295 EXPECT_FALSE(GitStat.HasUnversioned);
296 EXPECT_EQ(12u, GitStat.NumCommits);
297 EXPECT_FALSE(GitStat.bHasSubmoduleMods);
298 EXPECT_FALSE(GitStat.bHasSubmoduleNewCommits);
299 EXPECT_FALSE(GitStat.bHasSubmoduleUnversioned);
300 EXPECT_FALSE(GitStat.bIsTagged);
301 EXPECT_STREQ("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", GitStat.HeadHashReadable);
302 EXPECT_STREQ("Sven Strickroth", GitStat.HeadAuthor.c_str());
303 EXPECT_STREQ("email@cs-ware.de", GitStat.HeadEmail.c_str());
305 CString output;
306 EXPECT_EQ(0, m_Git.Run(L"git.exe checkout -f master2", &output, nullptr, CP_UTF8));
307 EXPECT_STREQ(L"", output);
309 GitWCRev_t GitStat2;
310 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat2));
311 EXPECT_TRUE(GitStat2.bIsGitItem);
312 EXPECT_FALSE(GitStat2.bIsUnborn);
313 EXPECT_STREQ("master2", GitStat2.CurrentBranch.c_str());
314 EXPECT_FALSE(GitStat2.bHasSubmodule);
315 EXPECT_FALSE(GitStat2.HasMods);
316 EXPECT_FALSE(GitStat2.HasUnversioned);
317 EXPECT_EQ(10u, GitStat2.NumCommits);
318 EXPECT_FALSE(GitStat2.bHasSubmoduleMods);
319 EXPECT_FALSE(GitStat2.bHasSubmoduleNewCommits);
320 EXPECT_FALSE(GitStat2.bHasSubmoduleUnversioned);
321 EXPECT_TRUE(GitStat2.bIsTagged);
322 EXPECT_STREQ("49ecdfff36bfe2b9b499b33e5034f427e2fa54dd", GitStat2.HeadHashReadable);
323 EXPECT_STREQ("Sven Strickroth", GitStat2.HeadAuthor.c_str());
324 EXPECT_STREQ("email@cs-ware.de", GitStat2.HeadEmail.c_str());
326 EXPECT_TRUE(DeleteFile(m_Dir.GetTempDir() + L"\\utf8-bom.txt"));
328 GitWCRev_t GitStat3;
329 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir() + L"\\ansi.txt", GitStat3));
330 EXPECT_TRUE(GitStat3.bIsGitItem);
331 EXPECT_FALSE(GitStat3.bIsUnborn);
332 EXPECT_STREQ("master2", GitStat3.CurrentBranch.c_str());
333 EXPECT_FALSE(GitStat3.bHasSubmodule);
334 EXPECT_FALSE(GitStat3.HasMods);
335 EXPECT_FALSE(GitStat3.HasUnversioned);
336 EXPECT_EQ(10u, GitStat3.NumCommits);
337 EXPECT_FALSE(GitStat3.bHasSubmoduleMods);
338 EXPECT_FALSE(GitStat3.bHasSubmoduleNewCommits);
339 EXPECT_FALSE(GitStat3.bHasSubmoduleUnversioned);
340 EXPECT_TRUE(GitStat3.bIsTagged);
341 EXPECT_STREQ("49ecdfff36bfe2b9b499b33e5034f427e2fa54dd", GitStat3.HeadHashReadable);
342 EXPECT_STREQ("Sven Strickroth", GitStat3.HeadAuthor.c_str());
343 EXPECT_STREQ("email@cs-ware.de", GitStat3.HeadEmail.c_str());
345 GitWCRev_t GitStat4;
346 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat4));
347 EXPECT_TRUE(GitStat4.bIsGitItem);
348 EXPECT_FALSE(GitStat4.bIsUnborn);
349 EXPECT_STREQ("master2", GitStat4.CurrentBranch.c_str());
350 EXPECT_FALSE(GitStat4.bHasSubmodule);
351 EXPECT_TRUE(GitStat4.HasMods); // missing file: utf8-bom.txt
352 EXPECT_FALSE(GitStat4.HasUnversioned);
353 EXPECT_EQ(10u, GitStat4.NumCommits);
354 EXPECT_FALSE(GitStat4.bHasSubmoduleMods);
355 EXPECT_FALSE(GitStat4.bHasSubmoduleNewCommits);
356 EXPECT_FALSE(GitStat4.bHasSubmoduleUnversioned);
357 EXPECT_TRUE(GitStat4.bIsTagged);
358 EXPECT_STREQ("49ecdfff36bfe2b9b499b33e5034f427e2fa54dd", GitStat4.HeadHashReadable);
359 EXPECT_STREQ("Sven Strickroth", GitStat4.HeadAuthor.c_str());
360 EXPECT_STREQ("email@cs-ware.de", GitStat4.HeadEmail.c_str());
362 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(m_Dir.GetTempDir() + L"\\copy\\ba.txt", L"something\n"));
363 GitWCRev_t GitStat5;
364 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir() + L"\\copy", GitStat5));
365 EXPECT_FALSE(GitStat5.bIsGitItem);
366 EXPECT_FALSE(GitStat5.bIsUnborn);
367 EXPECT_STREQ("master2", GitStat5.CurrentBranch.c_str());
368 EXPECT_FALSE(GitStat5.bHasSubmodule);
369 EXPECT_FALSE(GitStat5.HasMods);
370 EXPECT_TRUE(GitStat5.HasUnversioned);
371 EXPECT_EQ(10u, GitStat5.NumCommits);
372 EXPECT_FALSE(GitStat5.bHasSubmoduleMods);
373 EXPECT_FALSE(GitStat5.bHasSubmoduleNewCommits);
374 EXPECT_FALSE(GitStat5.bHasSubmoduleUnversioned);
375 EXPECT_TRUE(GitStat5.bIsTagged);
376 EXPECT_STREQ("49ecdfff36bfe2b9b499b33e5034f427e2fa54dd", GitStat5.HeadHashReadable);
377 EXPECT_STREQ("Sven Strickroth", GitStat5.HeadAuthor.c_str());
378 EXPECT_STREQ("email@cs-ware.de", GitStat5.HeadEmail.c_str());
380 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(m_Dir.GetTempDir() + L"\\copy\\aaa.txt", L"something\n"));
381 GitWCRev_t GitStat6;
382 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir() + L"\\copy", GitStat6));
383 EXPECT_FALSE(GitStat6.bIsGitItem);
384 EXPECT_FALSE(GitStat6.bIsUnborn);
385 EXPECT_STREQ("master2", GitStat6.CurrentBranch.c_str());
386 EXPECT_FALSE(GitStat6.bHasSubmodule);
387 EXPECT_FALSE(GitStat6.HasMods);
388 EXPECT_TRUE(GitStat6.HasUnversioned);
389 EXPECT_EQ(10u, GitStat6.NumCommits);
390 EXPECT_FALSE(GitStat6.bHasSubmoduleMods);
391 EXPECT_FALSE(GitStat6.bHasSubmoduleNewCommits);
392 EXPECT_FALSE(GitStat6.bHasSubmoduleUnversioned);
393 EXPECT_TRUE(GitStat6.bIsTagged);
394 EXPECT_STREQ("49ecdfff36bfe2b9b499b33e5034f427e2fa54dd", GitStat6.HeadHashReadable);
395 EXPECT_STREQ("Sven Strickroth", GitStat6.HeadAuthor.c_str());
396 EXPECT_STREQ("email@cs-ware.de", GitStat6.HeadEmail.c_str());
399 TEST_P(GitWCRevStatusCBasicGitWithTestRepoFixture, GitWCRevignore)
401 CString output;
402 EXPECT_EQ(0, m_Git.Run(L"git.exe checkout -f master", &output, nullptr, CP_UTF8));
403 EXPECT_STRNE(L"", output);
405 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(m_Dir.GetTempDir() + L"\\.GitWCRevignore", L"\n"));
407 GitWCRev_t GitStat;
408 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat));
409 EXPECT_TRUE(GitStat.bIsGitItem);
410 EXPECT_FALSE(GitStat.bIsUnborn);
411 EXPECT_STREQ("master", GitStat.CurrentBranch.c_str());
412 EXPECT_FALSE(GitStat.bHasSubmodule);
413 EXPECT_FALSE(GitStat.HasMods);
414 EXPECT_TRUE(GitStat.HasUnversioned);
415 EXPECT_EQ(12u, GitStat.NumCommits);
416 EXPECT_FALSE(GitStat.bHasSubmoduleMods);
417 EXPECT_FALSE(GitStat.bHasSubmoduleNewCommits);
418 EXPECT_FALSE(GitStat.bHasSubmoduleUnversioned);
419 EXPECT_FALSE(GitStat.bIsTagged);
420 EXPECT_STREQ("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", GitStat.HeadHashReadable);
421 EXPECT_STREQ("Sven Strickroth", GitStat.HeadAuthor.c_str());
422 EXPECT_STREQ("email@cs-ware.de", GitStat.HeadEmail.c_str());
424 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(m_Dir.GetTempDir() + L"\\.GitWCRevignore", L".GitWCRevignore\n"));
425 GitWCRev_t GitStat2;
426 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat2));
427 EXPECT_TRUE(GitStat2.bIsGitItem);
428 EXPECT_FALSE(GitStat2.bIsUnborn);
429 EXPECT_STREQ("master", GitStat2.CurrentBranch.c_str());
430 EXPECT_FALSE(GitStat2.bHasSubmodule);
431 EXPECT_FALSE(GitStat2.HasMods);
432 EXPECT_FALSE(GitStat2.HasUnversioned);
433 EXPECT_EQ(12u, GitStat2.NumCommits);
434 EXPECT_FALSE(GitStat2.bHasSubmoduleMods);
435 EXPECT_FALSE(GitStat2.bHasSubmoduleNewCommits);
436 EXPECT_FALSE(GitStat2.bHasSubmoduleUnversioned);
437 EXPECT_FALSE(GitStat2.bIsTagged);
438 EXPECT_STREQ("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", GitStat2.HeadHashReadable);
439 EXPECT_STREQ("Sven Strickroth", GitStat2.HeadAuthor.c_str());
440 EXPECT_STREQ("email@cs-ware.de", GitStat2.HeadEmail.c_str());
442 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(m_Dir.GetTempDir() + L"\\utf8-bom.txt", L"modified!"));
443 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(m_Dir.GetTempDir() + L"\\.GitWCRevignore", L".GitWCRevignore\nutf8-bom.txt\n"));
445 GitWCRev_t GitStat3;
446 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat3));
447 EXPECT_TRUE(GitStat3.bIsGitItem);
448 EXPECT_FALSE(GitStat3.bIsUnborn);
449 EXPECT_STREQ("master", GitStat3.CurrentBranch.c_str());
450 EXPECT_FALSE(GitStat3.bHasSubmodule);
451 EXPECT_FALSE(GitStat3.HasMods);
452 EXPECT_FALSE(GitStat3.HasUnversioned);
453 EXPECT_EQ(12u, GitStat3.NumCommits);
454 EXPECT_FALSE(GitStat3.bHasSubmoduleMods);
455 EXPECT_FALSE(GitStat3.bHasSubmoduleNewCommits);
456 EXPECT_FALSE(GitStat3.bHasSubmoduleUnversioned);
457 EXPECT_FALSE(GitStat3.bIsTagged);
458 EXPECT_STREQ("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", GitStat3.HeadHashReadable);
459 EXPECT_STREQ("Sven Strickroth", GitStat3.HeadAuthor.c_str());
460 EXPECT_STREQ("email@cs-ware.de", GitStat3.HeadEmail.c_str());
462 GitWCRev_t GitStat4;
463 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir() + L"\\utf8-bom.txt", GitStat4));
464 EXPECT_TRUE(GitStat4.bIsGitItem);
465 EXPECT_FALSE(GitStat4.bIsUnborn);
466 EXPECT_STREQ("master", GitStat4.CurrentBranch.c_str());
467 EXPECT_FALSE(GitStat4.bHasSubmodule);
468 EXPECT_TRUE(GitStat4.HasMods); // requesting a specific file which is also ignored, the unignoring has precedence!
469 EXPECT_FALSE(GitStat4.HasUnversioned);
470 EXPECT_EQ(12u, GitStat4.NumCommits);
471 EXPECT_FALSE(GitStat4.bHasSubmoduleMods);
472 EXPECT_FALSE(GitStat4.bHasSubmoduleNewCommits);
473 EXPECT_FALSE(GitStat4.bHasSubmoduleUnversioned);
474 EXPECT_FALSE(GitStat4.bIsTagged);
475 EXPECT_STREQ("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", GitStat4.HeadHashReadable);
476 EXPECT_STREQ("Sven Strickroth", GitStat4.HeadAuthor.c_str());
477 EXPECT_STREQ("email@cs-ware.de", GitStat4.HeadEmail.c_str());
479 GitWCRev_t GitStat5;
480 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat5));
481 EXPECT_TRUE(GitStat5.bIsGitItem);
482 EXPECT_FALSE(GitStat5.bIsUnborn);
483 EXPECT_STREQ("master", GitStat5.CurrentBranch.c_str());
484 EXPECT_FALSE(GitStat5.bHasSubmodule);
485 EXPECT_FALSE(GitStat5.HasMods); // ignore changes in modified file
486 EXPECT_FALSE(GitStat5.HasUnversioned);
487 EXPECT_EQ(12u, GitStat5.NumCommits);
488 EXPECT_FALSE(GitStat5.bHasSubmoduleMods);
489 EXPECT_FALSE(GitStat5.bHasSubmoduleNewCommits);
490 EXPECT_FALSE(GitStat5.bHasSubmoduleUnversioned);
491 EXPECT_FALSE(GitStat5.bIsTagged);
492 EXPECT_STREQ("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", GitStat5.HeadHashReadable);
493 EXPECT_STREQ("Sven Strickroth", GitStat5.HeadAuthor.c_str());
494 EXPECT_STREQ("email@cs-ware.de", GitStat5.HeadEmail.c_str());
496 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(m_Dir.GetTempDir() + L"\\ansi.txt", L"modified!"));
497 GitWCRev_t GitStat6;
498 EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat6));
499 EXPECT_TRUE(GitStat6.bIsGitItem);
500 EXPECT_FALSE(GitStat6.bIsUnborn);
501 EXPECT_STREQ("master", GitStat6.CurrentBranch.c_str());
502 EXPECT_FALSE(GitStat6.bHasSubmodule);
503 EXPECT_TRUE(GitStat6.HasMods);
504 EXPECT_FALSE(GitStat6.HasUnversioned);
505 EXPECT_EQ(12u, GitStat6.NumCommits);
506 EXPECT_FALSE(GitStat6.bHasSubmoduleMods);
507 EXPECT_FALSE(GitStat6.bHasSubmoduleNewCommits);
508 EXPECT_FALSE(GitStat6.bHasSubmoduleUnversioned);
509 EXPECT_FALSE(GitStat6.bIsTagged);
510 EXPECT_STREQ("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", GitStat6.HeadHashReadable);
511 EXPECT_STREQ("Sven Strickroth", GitStat6.HeadAuthor.c_str());
512 EXPECT_STREQ("email@cs-ware.de", GitStat6.HeadEmail.c_str());
515 TEST_P(GitWCRevStatusCBasicGitWithTestRepoFixture, PathNormalize)
517 CString output;
518 EXPECT_EQ(0, m_Git.Run(L"git.exe checkout -f master", &output, nullptr, CP_UTF8));
519 EXPECT_STRNE(L"", output);
521 GitWCRev_t GitStat;
522 EXPECT_EQ(0, GetStatusUnCleanPath(m_Dir.GetTempDir() + L"\\copy\\.\\ansi.txt", GitStat));
523 EXPECT_TRUE(GitStat.bIsGitItem);
524 EXPECT_FALSE(GitStat.bIsUnborn);
525 EXPECT_STREQ("master", GitStat.CurrentBranch.c_str());
526 EXPECT_FALSE(GitStat.bHasSubmodule);
527 EXPECT_FALSE(GitStat.HasMods);
528 EXPECT_FALSE(GitStat.HasUnversioned);
529 EXPECT_EQ(12u, GitStat.NumCommits);
530 EXPECT_FALSE(GitStat.bHasSubmoduleMods);
531 EXPECT_FALSE(GitStat.bHasSubmoduleNewCommits);
532 EXPECT_FALSE(GitStat.bHasSubmoduleUnversioned);
533 EXPECT_FALSE(GitStat.bIsTagged);
534 EXPECT_STREQ("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", GitStat.HeadHashReadable);
535 EXPECT_STREQ("Sven Strickroth", GitStat.HeadAuthor.c_str());
536 EXPECT_STREQ("email@cs-ware.de", GitStat.HeadEmail.c_str());