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.
22 #include "StringUtils.h"
23 #include "RepositoryFixtures.h"
25 // For performance reason, turn LIBGIT off by default,
26 INSTANTIATE_TEST_CASE_P(CGit
, CBasicGitFixture
, testing::Values(GIT_CLI
, /*LIBGIT,*/ LIBGIT2
, LIBGIT2_ALL
));
27 INSTANTIATE_TEST_CASE_P(CGit
, CBasicGitWithEmptyRepositoryFixture
, testing::Values(GIT_CLI
, /*LIBGIT,*/ LIBGIT2
, LIBGIT2_ALL
));
28 INSTANTIATE_TEST_CASE_P(CGit
, CBasicGitWithEmptyBareRepositoryFixture
, testing::Values(GIT_CLI
, /*LIBGIT,*/ LIBGIT2
, LIBGIT2_ALL
));
29 INSTANTIATE_TEST_CASE_P(CGit
, CBasicGitWithTestRepoFixture
, testing::Values(GIT_CLI
, /*LIBGIT,*/ LIBGIT2
, LIBGIT2_ALL
));
30 INSTANTIATE_TEST_CASE_P(CGit
, CBasicGitWithTestRepoBareFixture
, testing::Values(GIT_CLI
, /*LIBGIT,*/ LIBGIT2
, LIBGIT2_ALL
));
36 ASSERT_EQ(0, cgit
.Run(_T("cmd /c set"), &output
, CP_UTF8
));
37 ASSERT_FALSE(output
.IsEmpty());
38 ASSERT_TRUE(output
.Find(_T("windir"))); // should be there on any MS OS ;)
45 ASSERT_EQ(0, cgit
.Run(_T("git --version"), &output
, CP_UTF8
));
46 ASSERT_FALSE(output
.IsEmpty());
49 TEST(CGit
, RunGit_Error
)
53 cgit
.m_CurrentDir
= tempdir
.GetTempDir();
56 ASSERT_EQ(2, cgit
.Run(_T("git-not-found.exe"), &output
, CP_UTF8
));
57 ASSERT_TRUE(output
.IsEmpty());
60 ASSERT_EQ(128, cgit
.Run(_T("git.exe add file.txt"), &output
, CP_UTF8
));
61 ASSERT_TRUE(output
.Find(_T("fatal: Not a git repository (or any of the parent directories): .git")) == 0);
64 TEST(CGit
, StringAppend
)
66 CGit::StringAppend(nullptr, nullptr); // string may be null
67 CString string
= _T("something");
68 CGit::StringAppend(&string
, nullptr, CP_UTF8
, 0);
69 EXPECT_STREQ(_T("something"), string
);
70 const BYTE somebytes
[1] = { 0 };
71 CGit::StringAppend(&string
, somebytes
, CP_UTF8
, 0);
72 EXPECT_STREQ(_T("something"), string
);
73 CGit::StringAppend(&string
, somebytes
);
74 EXPECT_STREQ(_T("something"), string
);
75 const BYTE moreBytesUTFEight
[] = { 0x68, 0x65, 0x6C, 0x6C, 0xC3, 0xB6, 0x0A, 0x00 };
76 CGit::StringAppend(&string
, moreBytesUTFEight
, CP_UTF8
, 3);
77 EXPECT_STREQ(_T("somethinghel"), string
);
78 CGit::StringAppend(&string
, moreBytesUTFEight
+ 3, CP_ACP
, 1);
79 EXPECT_STREQ(_T("somethinghell"), string
);
80 CGit::StringAppend(&string
, moreBytesUTFEight
);
81 EXPECT_STREQ(_T("somethinghellhellö\n"), string
);
82 CGit::StringAppend(&string
, moreBytesUTFEight
, CP_UTF8
, sizeof(moreBytesUTFEight
));
83 EXPECT_STREQ(_T("somethinghellhellö\nhellö\n\0"), string
);
84 CGit::StringAppend(&string
, moreBytesUTFEight
, CP_UTF8
, 3);
85 EXPECT_STREQ(_T("somethinghellhellö\nhellö\n\0hel"), string
);
88 TEST(CGit
, IsBranchNameValid
)
91 EXPECT_TRUE(cgit
.IsBranchNameValid(_T("master")));
92 EXPECT_TRUE(cgit
.IsBranchNameValid(_T("def/master")));
93 EXPECT_FALSE(cgit
.IsBranchNameValid(_T("-test")));
94 EXPECT_FALSE(cgit
.IsBranchNameValid(_T("jfjf>ff")));
95 EXPECT_FALSE(cgit
.IsBranchNameValid(_T("jf ff")));
96 EXPECT_FALSE(cgit
.IsBranchNameValid(_T("jf~ff")));
99 TEST(CGit
, StripRefName
)
101 EXPECT_STREQ(_T("abc"), CGit::StripRefName(_T("abc")));
102 EXPECT_STREQ(_T("bcd"), CGit::StripRefName(_T("refs/bcd")));
103 EXPECT_STREQ(_T("cde"), CGit::StripRefName(_T("refs/heads/cde")));
106 TEST(CGit
, CombinePath
)
109 cgit
.m_CurrentDir
= _T("c:\\something");
110 EXPECT_STREQ(_T("c:\\something"), cgit
.CombinePath(_T("")));
111 EXPECT_STREQ(_T("c:\\something\\file.txt"), cgit
.CombinePath(_T("file.txt")));
112 EXPECT_STREQ(_T("c:\\something\\sub\\file.txt"), cgit
.CombinePath(_T("sub\\file.txt")));
113 EXPECT_STREQ(_T("c:\\something\\subdir\\file2.txt"), cgit
.CombinePath(CTGitPath(_T("subdir/file2.txt"))));
116 TEST(CGit
, GetShortName
)
118 CGit::REF_TYPE type
= CGit::UNKNOWN
;
119 EXPECT_STREQ(_T("master"), CGit::GetShortName(_T("refs/heads/master"), &type
));
120 EXPECT_EQ(CGit::LOCAL_BRANCH
, type
);
122 type
= CGit::UNKNOWN
;
123 EXPECT_STREQ(_T("somedir/mastr"), CGit::GetShortName(_T("refs/heads/somedir/mastr"), &type
));
124 EXPECT_EQ(CGit::LOCAL_BRANCH
, type
);
126 type
= CGit::BISECT_BAD
; // do not use UNKNOWN here to make sure it gets set
127 EXPECT_STREQ(_T("svn/something"), CGit::GetShortName(_T("refs/svn/something"), &type
));
128 EXPECT_EQ(CGit::UNKNOWN
, type
);
130 type
= CGit::UNKNOWN
;
131 EXPECT_STREQ(_T("origin/master"), CGit::GetShortName(_T("refs/remotes/origin/master"), &type
));
132 EXPECT_EQ(CGit::REMOTE_BRANCH
, type
);
134 type
= CGit::UNKNOWN
;
135 EXPECT_STREQ(_T("origin/sub/master"), CGit::GetShortName(_T("refs/remotes/origin/sub/master"), &type
));
136 EXPECT_EQ(CGit::REMOTE_BRANCH
, type
);
138 type
= CGit::UNKNOWN
;
139 EXPECT_STREQ(_T("release1"), CGit::GetShortName(_T("refs/tags/release1"), &type
));
140 EXPECT_EQ(CGit::TAG
, type
);
142 type
= CGit::UNKNOWN
;
143 EXPECT_STREQ(_T("releases/v1"), CGit::GetShortName(_T("refs/tags/releases/v1"), &type
));
144 EXPECT_EQ(CGit::TAG
, type
);
146 type
= CGit::UNKNOWN
;
147 EXPECT_STREQ(_T("stash"), CGit::GetShortName(_T("refs/stash"), &type
));
148 EXPECT_EQ(CGit::STASH
, type
);
150 type
= CGit::BISECT_BAD
; // do not use UNKNOWN here to make sure it gets set
151 EXPECT_STREQ(_T("something"), CGit::GetShortName(_T("refs/something"), &type
));
152 EXPECT_EQ(CGit::UNKNOWN
, type
);
154 type
= CGit::BISECT_BAD
; // do not use UNKNOWN here to make sure it gets set
155 EXPECT_STREQ(_T("sth"), CGit::GetShortName(_T("sth"), &type
));
156 EXPECT_EQ(CGit::UNKNOWN
, type
);
158 type
= CGit::UNKNOWN
;
159 EXPECT_STREQ(_T("good"), CGit::GetShortName(_T("refs/bisect/good"), &type
));
160 EXPECT_EQ(CGit::BISECT_GOOD
, type
);
162 type
= CGit::UNKNOWN
;
163 EXPECT_STREQ(_T("good"), CGit::GetShortName(_T("refs/bisect/good-5809ac97a1115a8380b1d6bb304b62cd0b0fa9bb"), &type
));
164 EXPECT_EQ(CGit::BISECT_GOOD
, type
);
166 type
= CGit::UNKNOWN
;
167 EXPECT_STREQ(_T("bad"), CGit::GetShortName(_T("refs/bisect/bad"), &type
));
168 EXPECT_EQ(CGit::BISECT_BAD
, type
);
170 type
= CGit::UNKNOWN
;
171 EXPECT_STREQ(_T("bad"), CGit::GetShortName(_T("refs/bisect/bad-5809ac97a1115a8380b1d6bb304b62cd0b0fd9bb"), &type
));
172 EXPECT_EQ(CGit::BISECT_BAD
, type
);
174 type
= CGit::UNKNOWN
;
175 EXPECT_STREQ(_T("ab"), CGit::GetShortName(_T("refs/notes/ab"), &type
));
176 EXPECT_EQ(CGit::NOTES
, type
);
178 type
= CGit::UNKNOWN
;
179 EXPECT_STREQ(_T("a/b"), CGit::GetShortName(_T("refs/notes/a/b"), &type
));
180 EXPECT_EQ(CGit::NOTES
, type
);
183 TEST(CGit
, GetRepository
)
185 CAutoTempDir tempdir
;
187 cgit
.m_CurrentDir
= tempdir
.GetTempDir();
189 CAutoRepository repo
= cgit
.GetGitRepository();
190 EXPECT_FALSE(repo
.IsValid());
192 cgit
.m_CurrentDir
= tempdir
.GetTempDir() + _T("\\aöäüb");
193 ASSERT_TRUE(CreateDirectory(cgit
.m_CurrentDir
, nullptr));
196 EXPECT_EQ(0, cgit
.Run(_T("git.exe init"), &output
, CP_UTF8
));
197 EXPECT_FALSE(output
.IsEmpty());
199 CAutoRepository repo2
= cgit
.GetGitRepository(); // this tests GetGitRepository as well as m_Git.GetGitPathStringA
200 EXPECT_TRUE(repo2
.IsValid());
202 cgit
.m_CurrentDir
= tempdir
.GetTempDir() + _T("\\aöäüb.git");
203 ASSERT_TRUE(CreateDirectory(cgit
.m_CurrentDir
, nullptr));
206 EXPECT_EQ(0, cgit
.Run(_T("git.exe init --bare"), &output
, CP_UTF8
));
207 EXPECT_FALSE(output
.IsEmpty());
209 CAutoRepository repo3
= cgit
.GetGitRepository(); // this tests GetGitRepository as well as m_Git.GetGitPathStringA
210 EXPECT_TRUE(repo3
.IsValid());
213 TEST_P(CBasicGitWithEmptyRepositoryFixture
, IsInitRepos_GetInitAddList
)
215 EXPECT_STREQ(_T("master"), m_Git
.GetCurrentBranch());
218 CString testFile
= m_Dir
.GetTempDir() + L
"\\test.txt";
220 CTGitPathList addedFiles
;
222 EXPECT_TRUE(m_Git
.IsInitRepos());
223 EXPECT_EQ(0, m_Git
.GetInitAddList(addedFiles
));
224 EXPECT_TRUE(addedFiles
.IsEmpty());
226 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)testFile
, L
"this is testing file."));
227 EXPECT_EQ(0, m_Git
.GetInitAddList(addedFiles
));
228 EXPECT_TRUE(addedFiles
.IsEmpty());
229 EXPECT_EQ(0, m_Git
.Run(_T("git.exe add test.txt"), &output
, CP_UTF8
));
230 EXPECT_TRUE(output
.IsEmpty());
231 EXPECT_EQ(0, m_Git
.GetInitAddList(addedFiles
));
232 ASSERT_EQ(1, addedFiles
.GetCount());
233 EXPECT_STREQ(_T("test.txt"), addedFiles
[0].GetGitPathString());
236 EXPECT_EQ(0, m_Git
.Run(_T("git.exe commit -m \"Add test.txt\""), &output
, CP_UTF8
));
237 EXPECT_FALSE(output
.IsEmpty());
239 EXPECT_FALSE(m_Git
.IsInitRepos());
241 EXPECT_STREQ(_T("master"), m_Git
.GetCurrentBranch());
244 TEST_P(CBasicGitWithTestRepoFixture
, IsInitRepos
)
246 EXPECT_FALSE(m_Git
.IsInitRepos());
249 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout --orphan orphanic"), &output
, CP_UTF8
));
250 EXPECT_FALSE(output
.IsEmpty());
252 EXPECT_TRUE(m_Git
.IsInitRepos());
255 TEST_P(CBasicGitWithTestRepoFixture
, HasWorkingTreeConflicts
)
258 EXPECT_EQ(0, m_Git
.Run(_T("git.exe reset --hard master"), &output
, CP_UTF8
));
259 EXPECT_FALSE(output
.IsEmpty());
261 EXPECT_EQ(FALSE
, m_Git
.HasWorkingTreeConflicts());
264 EXPECT_EQ(0, m_Git
.Run(_T("git.exe merge forconflict"), &output
, CP_UTF8
));
265 EXPECT_FALSE(output
.IsEmpty());
266 EXPECT_EQ(FALSE
, m_Git
.HasWorkingTreeConflicts());
269 EXPECT_EQ(1, m_Git
.Run(_T("git.exe merge simple-conflict"), &output
, CP_UTF8
));
270 EXPECT_FALSE(output
.IsEmpty());
271 EXPECT_EQ(TRUE
, m_Git
.HasWorkingTreeConflicts());
274 EXPECT_EQ(0, m_Git
.Run(_T("git.exe reset --hard master"), &output
, CP_UTF8
));
275 EXPECT_FALSE(output
.IsEmpty());
278 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout forconflict"), &output
, CP_UTF8
));
279 EXPECT_FALSE(output
.IsEmpty());
282 EXPECT_EQ(1, m_Git
.Run(_T("git.exe merge simple-conflict"), &output
, CP_UTF8
));
283 EXPECT_FALSE(output
.IsEmpty());
284 EXPECT_EQ(TRUE
, m_Git
.HasWorkingTreeConflicts());
287 TEST_P(CBasicGitWithTestRepoFixture
, GetCurrentBranch
)
289 EXPECT_STREQ(_T("master"), m_Git
.GetCurrentBranch());
290 EXPECT_STREQ(_T("master"), m_Git
.GetCurrentBranch(true));
293 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout simple-conflict"), &output
, CP_UTF8
));
294 EXPECT_STREQ(_T("simple-conflict"), m_Git
.GetCurrentBranch());
295 EXPECT_STREQ(_T("simple-conflict"), m_Git
.GetCurrentBranch(true));
297 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout subdir/branch"), &output
, CP_UTF8
));
298 EXPECT_STREQ(_T("subdir/branch"), m_Git
.GetCurrentBranch());
299 EXPECT_STREQ(_T("subdir/branch"), m_Git
.GetCurrentBranch(true));
301 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout 560deea87853158b22d0c0fd73f60a458d47838a"), &output
, CP_UTF8
));
302 EXPECT_STREQ(_T("(no branch)"), m_Git
.GetCurrentBranch());
303 EXPECT_STREQ(_T("560deea87853158b22d0c0fd73f60a458d47838a"), m_Git
.GetCurrentBranch(true));
306 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout --orphan orphanic"), &output
, CP_UTF8
));
307 EXPECT_FALSE(output
.IsEmpty());
309 EXPECT_STREQ(_T("orphanic"), m_Git
.GetCurrentBranch());
310 EXPECT_STREQ(_T("orphanic"), m_Git
.GetCurrentBranch(true));
313 TEST_P(CBasicGitWithTestRepoBareFixture
, GetCurrentBranch
)
315 EXPECT_STREQ(_T("master"), m_Git
.GetCurrentBranch());
316 EXPECT_STREQ(_T("master"), m_Git
.GetCurrentBranch(true));
319 static void BranchTagExists_IsBranchTagNameUnique(CGit
& m_Git
)
321 EXPECT_TRUE(m_Git
.BranchTagExists(_T("master"), true));
322 EXPECT_FALSE(m_Git
.BranchTagExists(_T("origin/master"), true));
323 EXPECT_FALSE(m_Git
.BranchTagExists(_T("normal-tag"), true));
324 EXPECT_FALSE(m_Git
.BranchTagExists(_T("also-signed"), true));
325 EXPECT_FALSE(m_Git
.BranchTagExists(_T("wuseldusel"), true));
327 EXPECT_FALSE(m_Git
.BranchTagExists(_T("master"), false));
328 EXPECT_TRUE(m_Git
.BranchTagExists(_T("normal-tag"), false));
329 EXPECT_TRUE(m_Git
.BranchTagExists(_T("also-signed"), false));
330 EXPECT_FALSE(m_Git
.BranchTagExists(_T("wuseldusel"), false));
332 EXPECT_TRUE(m_Git
.IsBranchTagNameUnique(_T("master")));
333 EXPECT_TRUE(m_Git
.IsBranchTagNameUnique(_T("simpleconflict")));
334 EXPECT_TRUE(m_Git
.IsBranchTagNameUnique(_T("normal-tag")));
335 EXPECT_TRUE(m_Git
.IsBranchTagNameUnique(_T("also-signed")));
336 EXPECT_TRUE(m_Git
.IsBranchTagNameUnique(_T("origin/master")));
339 EXPECT_EQ(0, m_Git
.Run(_T("git.exe tag master HEAD~2"), &output
, CP_UTF8
));
340 EXPECT_TRUE(output
.IsEmpty());
342 EXPECT_EQ(0, m_Git
.Run(_T("git.exe branch normal-tag HEAD~2"), &output
, CP_UTF8
));
343 EXPECT_TRUE(output
.IsEmpty());
345 EXPECT_FALSE(m_Git
.IsBranchTagNameUnique(_T("master")));
346 EXPECT_FALSE(m_Git
.IsBranchTagNameUnique(_T("normal-tag")));
347 EXPECT_TRUE(m_Git
.IsBranchTagNameUnique(_T("also-signed")));
350 TEST_P(CBasicGitWithTestRepoFixture
, BranchTagExists_IsBranchTagNameUnique
)
352 BranchTagExists_IsBranchTagNameUnique(m_Git
);
355 TEST_P(CBasicGitWithTestRepoBareFixture
, BranchTagExists_IsBranchTagNameUnique
)
357 BranchTagExists_IsBranchTagNameUnique(m_Git
);
360 static void GetFullRefName(CGit
& m_Git
)
362 EXPECT_STREQ(_T(""), m_Git
.GetFullRefName(_T("does_not_exist")));
363 EXPECT_STREQ(_T("refs/heads/master"), m_Git
.GetFullRefName(_T("master")));
364 EXPECT_STREQ(_T("refs/remotes/origin/master"), m_Git
.GetFullRefName(_T("origin/master")));
365 EXPECT_STREQ(_T("refs/tags/normal-tag"), m_Git
.GetFullRefName(_T("normal-tag")));
366 EXPECT_STREQ(_T("refs/tags/also-signed"), m_Git
.GetFullRefName(_T("also-signed")));
369 EXPECT_EQ(0, m_Git
.Run(_T("git.exe tag master HEAD~2"), &output
, CP_UTF8
));
370 EXPECT_TRUE(output
.IsEmpty());
371 EXPECT_STREQ(_T(""), m_Git
.GetFullRefName(_T("master")));
372 EXPECT_STREQ(_T("refs/remotes/origin/master"), m_Git
.GetFullRefName(_T("origin/master")));
374 EXPECT_EQ(0, m_Git
.Run(_T("git.exe branch normal-tag HEAD~2"), &output
, CP_UTF8
));
375 EXPECT_TRUE(output
.IsEmpty());
376 EXPECT_STREQ(_T(""), m_Git
.GetFullRefName(_T("normal-tag")));
378 EXPECT_EQ(0, m_Git
.Run(_T("git.exe branch origin/master HEAD~2"), &output
, CP_UTF8
));
379 EXPECT_TRUE(output
.IsEmpty());
380 EXPECT_STREQ(_T(""), m_Git
.GetFullRefName(_T("origin/master")));
383 TEST_P(CBasicGitWithTestRepoFixture
, GetFullRefName
)
385 GetFullRefName(m_Git
);
388 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout --orphan orphanic"), &output
, CP_UTF8
));
389 EXPECT_FALSE(output
.IsEmpty());
390 EXPECT_STREQ(_T(""), m_Git
.GetFullRefName(_T("orphanic")));
393 TEST_P(CBasicGitWithTestRepoBareFixture
, GetFullRefName
)
395 GetFullRefName(m_Git
);
398 TEST_P(CBasicGitWithEmptyRepositoryFixture
, GetRemoteTrackedBranch
)
400 CString remote
, branch
;
401 m_Git
.GetRemoteTrackedBranchForHEAD(remote
, branch
);
402 EXPECT_TRUE(remote
.IsEmpty());
403 EXPECT_TRUE(branch
.IsEmpty());
405 m_Git
.GetRemoteTrackedBranch(_T("master"), remote
, branch
);
406 EXPECT_TRUE(remote
.IsEmpty());
407 EXPECT_TRUE(branch
.IsEmpty());
409 m_Git
.GetRemoteTrackedBranch(_T("non-existing"), remote
, branch
);
410 EXPECT_TRUE(remote
.IsEmpty());
411 EXPECT_TRUE(branch
.IsEmpty());
414 static void GetRemoteTrackedBranch(CGit
& m_Git
)
416 CString remote
, branch
;
417 m_Git
.GetRemoteTrackedBranchForHEAD(remote
, branch
);
418 EXPECT_STREQ(_T("origin"), remote
);
419 EXPECT_STREQ(_T("master"), branch
);
423 m_Git
.GetRemoteTrackedBranch(_T("master"), remote
, branch
);
424 EXPECT_STREQ(_T("origin"), remote
);
425 EXPECT_STREQ(_T("master"), branch
);
429 m_Git
.GetRemoteTrackedBranch(_T("non-existing"), remote
, branch
);
430 EXPECT_TRUE(remote
.IsEmpty());
431 EXPECT_TRUE(branch
.IsEmpty());
434 TEST_P(CBasicGitWithTestRepoFixture
, GetRemoteTrackedBranch
)
436 GetRemoteTrackedBranch(m_Git
);
439 TEST_P(CBasicGitWithTestRepoBareFixture
, GetRemoteTrackedBranch
)
441 GetRemoteTrackedBranch(m_Git
);
444 static void CanParseRev(CGit
& m_Git
)
446 EXPECT_TRUE(m_Git
.CanParseRev(_T("")));
447 EXPECT_TRUE(m_Git
.CanParseRev(_T("HEAD")));
448 EXPECT_TRUE(m_Git
.CanParseRev(_T("master")));
449 EXPECT_TRUE(m_Git
.CanParseRev(_T("heads/master")));
450 EXPECT_TRUE(m_Git
.CanParseRev(_T("refs/heads/master")));
451 EXPECT_TRUE(m_Git
.CanParseRev(_T("master~1")));
452 EXPECT_TRUE(m_Git
.CanParseRev(_T("master forconflict")));
453 EXPECT_TRUE(m_Git
.CanParseRev(_T("origin/master..master")));
454 EXPECT_TRUE(m_Git
.CanParseRev(_T("origin/master...master")));
455 EXPECT_TRUE(m_Git
.CanParseRev(_T("49ecdfff36bfe2b9b499b33e5034f427e2fa54dd")));
456 EXPECT_FALSE(m_Git
.CanParseRev(_T("non-existing")));
457 EXPECT_TRUE(m_Git
.CanParseRev(_T("normal-tag")));
458 EXPECT_TRUE(m_Git
.CanParseRev(_T("tags/normal-tag")));
459 EXPECT_TRUE(m_Git
.CanParseRev(_T("refs/tags/normal-tag")));
460 EXPECT_TRUE(m_Git
.CanParseRev(_T("all-files-signed")));
461 EXPECT_TRUE(m_Git
.CanParseRev(_T("all-files-signed^{}")));
463 EXPECT_FALSE(m_Git
.CanParseRev(_T("orphanic")));
466 TEST_P(CBasicGitWithTestRepoFixture
, CanParseRev
)
471 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout --orphan orphanic"), &output
, CP_UTF8
));
472 EXPECT_FALSE(output
.IsEmpty());
473 EXPECT_FALSE(m_Git
.CanParseRev(_T("")));
474 EXPECT_FALSE(m_Git
.CanParseRev(_T("HEAD")));
475 EXPECT_FALSE(m_Git
.CanParseRev(_T("orphanic")));
476 EXPECT_TRUE(m_Git
.CanParseRev(_T("master")));
479 TEST_P(CBasicGitWithTestRepoBareFixture
, CanParseRev
)
484 static void FETCHHEAD(CGit
& m_Git
, bool isBare
)
487 EXPECT_EQ(0, m_Git
.GetBranchList(list
, nullptr));
488 EXPECT_EQ(5, list
.size());
490 EXPECT_EQ(0, m_Git
.GetBranchList(list
, nullptr, CGit::BRANCH_LOCAL_F
));
491 EXPECT_EQ(5, list
.size());
493 EXPECT_STREQ(_T("HEAD"), m_Git
.FixBranchName(_T("HEAD")));
494 EXPECT_STREQ(_T("master"), m_Git
.FixBranchName(_T("master")));
495 EXPECT_STREQ(_T("non-existing"), m_Git
.FixBranchName(_T("non-existing")));
496 CString branch
= _T("master");
497 EXPECT_STREQ(_T("master"), m_Git
.FixBranchName_Mod(branch
));
498 EXPECT_STREQ(_T("master"), branch
);
499 branch
= _T("non-existing");
500 EXPECT_STREQ(_T("non-existing"), m_Git
.FixBranchName_Mod(branch
));
501 EXPECT_STREQ(_T("non-existing"), branch
);
503 EXPECT_NE(0, m_Git
.GetHash(hash
, _T("FETCH_HEAD")));
505 CString testFile
= m_Git
.m_CurrentDir
+ L
"\\.git\\FETCH_HEAD";
506 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)testFile
, L
"b9ef30183497cdad5c30b88d32dc1bed7951dfeb branch 'master' of https://code.google.com/p/tortoisegit\n737878a4e2eabfa4fab580867c2b060c70999d31 not-for-merge branch 'extend_hooks' of https://code.google.com/p/tortoisegit\n"));
509 EXPECT_EQ(0, m_Git
.GetBranchList(list
, nullptr));
510 EXPECT_EQ(5, list
.size());
512 EXPECT_EQ(0, m_Git
.GetBranchList(list
, nullptr, CGit::BRANCH_LOCAL_F
));
513 EXPECT_EQ(isBare
? 5 : 6, list
.size());
515 EXPECT_STREQ(_T("master"), m_Git
.FixBranchName(_T("master")));
516 EXPECT_STREQ(_T("non-existing"), m_Git
.FixBranchName(_T("non-existing")));
518 EXPECT_STREQ(_T("b9ef30183497cdad5c30b88d32dc1bed7951dfeb"), m_Git
.FixBranchName(_T("FETCH_HEAD")));
520 EXPECT_STREQ(_T("HEAD"), m_Git
.FixBranchName_Mod(branch
));
521 EXPECT_STREQ(_T("HEAD"), branch
);
522 branch
= _T("master");
523 EXPECT_STREQ(_T("master"), m_Git
.FixBranchName_Mod(branch
));
524 EXPECT_STREQ(_T("master"), branch
);
525 branch
= _T("non-existing");
526 EXPECT_STREQ(_T("non-existing"), m_Git
.FixBranchName_Mod(branch
));
527 EXPECT_STREQ(_T("non-existing"), branch
);
530 branch
= _T("FETCH_HEAD");
531 EXPECT_STREQ(_T("b9ef30183497cdad5c30b88d32dc1bed7951dfeb"), m_Git
.FixBranchName_Mod(branch
));
532 EXPECT_STREQ(_T("b9ef30183497cdad5c30b88d32dc1bed7951dfeb"), branch
);
533 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("FETCH_HEAD")));
534 EXPECT_STREQ(_T("b9ef30183497cdad5c30b88d32dc1bed7951dfeb"), hash
.ToString());
537 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)testFile
, L
"737878a4e2eabfa4fab580867c2b060c70999d31 not-for-merge branch 'extend_hooks' of https://code.google.com/p/tortoisegit\nb9ef30183497cdad5c30b88d32dc1bed7951dfeb branch 'master' of https://code.google.com/p/tortoisegit\n"));
540 EXPECT_EQ(0, m_Git
.GetBranchList(list
, nullptr));
541 EXPECT_EQ(5, list
.size());
543 EXPECT_EQ(0, m_Git
.GetBranchList(list
, nullptr, CGit::BRANCH_LOCAL_F
));
544 EXPECT_EQ(isBare
? 5 : 6, list
.size());
548 EXPECT_STREQ(_T("b9ef30183497cdad5c30b88d32dc1bed7951dfeb"), m_Git
.FixBranchName(_T("FETCH_HEAD")));
549 branch
= _T("FETCH_HEAD");
550 EXPECT_STREQ(_T("b9ef30183497cdad5c30b88d32dc1bed7951dfeb"), m_Git
.FixBranchName_Mod(branch
));
551 EXPECT_STREQ(_T("b9ef30183497cdad5c30b88d32dc1bed7951dfeb"), branch
);
552 // libgit2 fails here
553 // EXPECT_EQ(0, m_Git.GetHash(hash, _T("FETCH_HEAD")));
554 // EXPECT_STREQ(_T("b9ef30183497cdad5c30b88d32dc1bed7951dfeb"), hash.ToString());
558 TEST_P(CBasicGitWithTestRepoFixture
, FETCHHEAD
)
560 FETCHHEAD(m_Git
, false);
563 TEST_P(CBasicGitWithTestRepoBareFixture
, FETCHHEAD
)
565 FETCHHEAD(m_Git
, true);
568 TEST_P(CBasicGitWithTestRepoFixture
, IsFastForward
)
570 CGitHash commonAncestor
;
571 EXPECT_TRUE(m_Git
.IsFastForward(_T("origin/master"), _T("master"), &commonAncestor
));
572 EXPECT_STREQ(_T("a9d53b535cb49640a6099860ac4999f5a0857b91"), commonAncestor
.ToString());
574 EXPECT_FALSE(m_Git
.IsFastForward(_T("simple-conflict"), _T("master"), &commonAncestor
));
575 EXPECT_STREQ(_T("b02add66f48814a73aa2f0876d6bbc8662d6a9a8"), commonAncestor
.ToString());
578 static void GetHash(CGit
& m_Git
)
581 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("HEAD")));
582 EXPECT_STREQ(_T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6"), hash
.ToString());
583 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("HEAD~1")));
584 EXPECT_STREQ(_T("1fc3c9688e27596d8717b54f2939dc951568f6cb"), hash
.ToString());
585 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("ff1fbef1a54a9849afd4a5e94d2ca4d80d5b96c2")));
586 EXPECT_STREQ(_T("ff1fbef1a54a9849afd4a5e94d2ca4d80d5b96c2"), hash
.ToString());
587 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("master")));
588 EXPECT_STREQ(_T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6"), hash
.ToString());
589 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("origin/master")));
590 EXPECT_STREQ(_T("a9d53b535cb49640a6099860ac4999f5a0857b91"), hash
.ToString());
591 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("49ecdfff36bfe2b9b499b33e5034f427e2fa54dd")));
592 EXPECT_STREQ(_T("49ecdfff36bfe2b9b499b33e5034f427e2fa54dd"), hash
.ToString());
593 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("normal-tag")));
594 EXPECT_STREQ(_T("b9ef30183497cdad5c30b88d32dc1bed7951dfeb"), hash
.ToString());
595 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("all-files-signed")));
596 EXPECT_STREQ(_T("ab555b2776c6b700ad93848d0dd050e7d08be779"), hash
.ToString()); // maybe we need automatically to dereference it
597 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("all-files-signed^{}")));
598 EXPECT_STREQ(_T("313a41bc88a527289c87d7531802ab484715974f"), hash
.ToString());
600 EXPECT_NE(0, m_Git
.GetHash(hash
, _T("non-existing")));
603 TEST_P(CBasicGitWithTestRepoFixture
, GetHash
)
608 TEST_P(CBasicGitWithTestRepoBareFixture
, GetHash
)
613 TEST_P(CBasicGitWithEmptyRepositoryFixture
, GetHash_EmptyRepo
)
616 EXPECT_EQ(0, m_Git
.GetHash(hash
, _T("HEAD")));
617 EXPECT_TRUE(hash
.IsEmpty());
620 TEST_P(CBasicGitWithEmptyRepositoryFixture
, GetEmptyBranchesTagsRefs
)
622 STRING_VECTOR branches
;
624 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, ¤t
));
625 EXPECT_TRUE(branches
.empty());
626 EXPECT_EQ(-2, current
); // not touched
628 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, ¤t
, CGit::BRANCH_ALL
));
629 EXPECT_TRUE(branches
.empty());
630 EXPECT_EQ(-2, current
); // not touched
633 EXPECT_EQ(0, m_Git
.GetTagList(tags
));
634 EXPECT_TRUE(tags
.empty());
637 EXPECT_EQ(0, m_Git
.GetRefList(refs
));
638 EXPECT_TRUE(refs
.empty());
641 EXPECT_EQ(0, m_Git
.GetMapHashToFriendName(map
));
642 EXPECT_TRUE(map
.empty());
644 STRING_VECTOR remotes
;
645 EXPECT_EQ(0, m_Git
.GetRemoteList(remotes
));
646 EXPECT_TRUE(remotes
.empty());
649 static void GetBranchesTagsRefs(CGit
& m_Git
, config testConfig
)
651 STRING_VECTOR branches
;
653 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, ¤t
));
654 ASSERT_EQ(5, branches
.size());
655 EXPECT_EQ(1, current
);
656 EXPECT_STREQ(_T("forconflict"), branches
[0]);
657 EXPECT_STREQ(_T("master"), branches
[1]);
658 EXPECT_STREQ(_T("master2"), branches
[2]);
659 EXPECT_STREQ(_T("simple-conflict"), branches
[3]);
660 EXPECT_STREQ(_T("subdir/branch"), branches
[4]);
664 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, ¤t
, CGit::BRANCH_ALL
));
665 ASSERT_EQ(6, branches
.size());
666 EXPECT_EQ(1, current
);
667 EXPECT_STREQ(_T("forconflict"), branches
[0]);
668 EXPECT_STREQ(_T("master"), branches
[1]);
669 EXPECT_STREQ(_T("master2"), branches
[2]);
670 EXPECT_STREQ(_T("simple-conflict"), branches
[3]);
671 EXPECT_STREQ(_T("subdir/branch"), branches
[4]);
672 EXPECT_STREQ(_T("remotes/origin/master"), branches
[5]);
676 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, ¤t
, CGit::BRANCH_REMOTE
));
677 ASSERT_EQ(1, branches
.size());
678 EXPECT_EQ(-2, current
); // not touched
679 EXPECT_STREQ(_T("remotes/origin/master"), branches
[0]);
682 EXPECT_EQ(0, m_Git
.GetTagList(tags
));
683 ASSERT_EQ(3, tags
.size());
684 EXPECT_STREQ(_T("all-files-signed"), tags
[0]);
685 EXPECT_STREQ(_T("also-signed"), tags
[1]);
686 EXPECT_STREQ(_T("normal-tag"), tags
[2]);
689 EXPECT_EQ(0, m_Git
.GetRefList(refs
));
690 ASSERT_EQ(11, refs
.size());
691 EXPECT_STREQ(_T("refs/heads/forconflict"), refs
[0]);
692 EXPECT_STREQ(_T("refs/heads/master"), refs
[1]);
693 EXPECT_STREQ(_T("refs/heads/master2"), refs
[2]);
694 EXPECT_STREQ(_T("refs/heads/simple-conflict"), refs
[3]);
695 EXPECT_STREQ(_T("refs/heads/subdir/branch"), refs
[4]);
696 EXPECT_STREQ(_T("refs/notes/commits"), refs
[5]);
697 EXPECT_STREQ(_T("refs/remotes/origin/master"), refs
[6]);
698 EXPECT_STREQ(_T("refs/stash"), refs
[7]);
699 EXPECT_STREQ(_T("refs/tags/all-files-signed"), refs
[8]);
700 EXPECT_STREQ(_T("refs/tags/also-signed"), refs
[9]);
701 EXPECT_STREQ(_T("refs/tags/normal-tag"), refs
[10]);
704 EXPECT_EQ(0, m_Git
.GetMapHashToFriendName(map
));
705 if (testConfig
== GIT_CLI
)
706 ASSERT_EQ(12, map
.size()); // also contains the undereferenced tags with hashes
708 ASSERT_EQ(10, map
.size());
710 ASSERT_EQ(1, map
[CGitHash(L
"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6")].size());
711 EXPECT_STREQ(_T("refs/heads/master"), map
[CGitHash(L
"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6")][0]);
712 ASSERT_EQ(1, map
[CGitHash(L
"4c5c93d2a0b368bc4570d5ec02ab03b9c4334d44")].size());
713 EXPECT_STREQ(_T("refs/heads/subdir/branch"), map
[CGitHash(L
"4c5c93d2a0b368bc4570d5ec02ab03b9c4334d44")][0]);
714 ASSERT_EQ(1, map
[CGitHash(L
"5e702e1712aa6f8cd8e0328a87be006f3a923710")].size());
715 EXPECT_STREQ(_T("refs/notes/commits"), map
[CGitHash(L
"5e702e1712aa6f8cd8e0328a87be006f3a923710")][0]);
716 ASSERT_EQ(1, map
[CGitHash(L
"18da7c332dcad0f37f9977d9176dce0b0c66f3eb")].size());
717 EXPECT_STREQ(_T("refs/stash"), map
[CGitHash(L
"18da7c332dcad0f37f9977d9176dce0b0c66f3eb")][0]);
718 ASSERT_EQ(1, map
[CGitHash(L
"c5b89de0335fd674e2e421ac4543098cb2f22cde")].size());
719 EXPECT_STREQ(_T("refs/heads/simple-conflict"), map
[CGitHash(L
"c5b89de0335fd674e2e421ac4543098cb2f22cde")][0]);
720 ASSERT_EQ(1, map
[CGitHash(L
"10385764a4d42d7428bbeb245015f8f338fc1e40")].size());
721 EXPECT_STREQ(_T("refs/heads/forconflict"), map
[CGitHash(L
"10385764a4d42d7428bbeb245015f8f338fc1e40")][0]);
722 ASSERT_EQ(2, map
[CGitHash(L
"49ecdfff36bfe2b9b499b33e5034f427e2fa54dd")].size());
723 EXPECT_STREQ(_T("refs/heads/master2"), map
[CGitHash(L
"49ecdfff36bfe2b9b499b33e5034f427e2fa54dd")][0]);
724 EXPECT_STREQ(_T("refs/tags/also-signed^{}"), map
[CGitHash(L
"49ecdfff36bfe2b9b499b33e5034f427e2fa54dd")][1]);
725 ASSERT_EQ(1, map
[CGitHash(L
"b9ef30183497cdad5c30b88d32dc1bed7951dfeb")].size());//
726 EXPECT_STREQ(_T("refs/tags/normal-tag"), map
[CGitHash(L
"b9ef30183497cdad5c30b88d32dc1bed7951dfeb")][0]);
727 ASSERT_EQ(1, map
[CGitHash(L
"a9d53b535cb49640a6099860ac4999f5a0857b91")].size());
728 EXPECT_STREQ(_T("refs/remotes/origin/master"), map
[CGitHash(L
"a9d53b535cb49640a6099860ac4999f5a0857b91")][0]);
729 ASSERT_EQ(1, map
[CGitHash(L
"313a41bc88a527289c87d7531802ab484715974f")].size());
730 EXPECT_STREQ(_T("refs/tags/all-files-signed^{}"), map
[CGitHash(L
"313a41bc88a527289c87d7531802ab484715974f")][0]);
732 STRING_VECTOR remotes
;
733 EXPECT_EQ(0, m_Git
.GetRemoteList(remotes
));
734 ASSERT_EQ(1, remotes
.size());
735 EXPECT_STREQ(_T("origin"), remotes
[0]);
737 EXPECT_EQ(-1, m_Git
.DeleteRef(_T("refs/tags/gibbednet")));
739 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, nullptr, CGit::BRANCH_ALL
));
740 EXPECT_EQ(6, branches
.size());
742 EXPECT_EQ(0, m_Git
.GetTagList(tags
));
743 EXPECT_EQ(3, tags
.size());
745 EXPECT_EQ(0, m_Git
.GetRefList(refs
));
746 EXPECT_EQ(11, refs
.size());
748 EXPECT_EQ(-1, m_Git
.DeleteRef(_T("refs/heads/gibbednet")));
750 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, nullptr, CGit::BRANCH_ALL
));
751 EXPECT_EQ(6, branches
.size());
753 EXPECT_EQ(0, m_Git
.GetTagList(tags
));
754 EXPECT_EQ(3, tags
.size());
756 EXPECT_EQ(0, m_Git
.GetRefList(refs
));
757 EXPECT_EQ(11, refs
.size());
759 EXPECT_EQ(-1, m_Git
.DeleteRef(_T("refs/remotes/origin/gibbednet")));
761 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, nullptr, CGit::BRANCH_ALL
));
762 EXPECT_EQ(6, branches
.size());
764 EXPECT_EQ(0, m_Git
.GetTagList(tags
));
765 EXPECT_EQ(3, tags
.size());
767 EXPECT_EQ(0, m_Git
.GetRefList(refs
));
768 EXPECT_EQ(11, refs
.size());
770 EXPECT_EQ(0, m_Git
.DeleteRef(_T("refs/tags/normal-tag")));
772 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, nullptr, CGit::BRANCH_ALL
));
773 EXPECT_EQ(6, branches
.size());
775 EXPECT_EQ(0, m_Git
.GetTagList(tags
));
776 EXPECT_EQ(2, tags
.size());
778 EXPECT_EQ(0, m_Git
.GetRefList(refs
));
779 EXPECT_EQ(10, refs
.size());
781 EXPECT_EQ(0, m_Git
.DeleteRef(_T("refs/tags/all-files-signed^{}")));
783 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, nullptr, CGit::BRANCH_ALL
));
784 EXPECT_EQ(6, branches
.size());
786 EXPECT_EQ(0, m_Git
.GetTagList(tags
));
787 EXPECT_EQ(1, tags
.size());
789 EXPECT_EQ(0, m_Git
.GetRefList(refs
));
790 EXPECT_EQ(9, refs
.size());
792 EXPECT_EQ(0, m_Git
.DeleteRef(_T("refs/heads/subdir/branch")));
794 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, nullptr, CGit::BRANCH_ALL
));
795 EXPECT_EQ(5, branches
.size());
797 EXPECT_EQ(0, m_Git
.GetTagList(tags
));
798 EXPECT_EQ(1, tags
.size());
800 EXPECT_EQ(0, m_Git
.GetRefList(refs
));
801 EXPECT_EQ(8, refs
.size());
803 EXPECT_EQ(0, m_Git
.DeleteRef(_T("refs/remotes/origin/master")));
805 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, nullptr, CGit::BRANCH_ALL
));
806 EXPECT_EQ(4, branches
.size());
808 EXPECT_EQ(0, m_Git
.GetTagList(tags
));
809 EXPECT_EQ(1, tags
.size());
811 EXPECT_EQ(0, m_Git
.GetRefList(refs
));
812 EXPECT_EQ(7, refs
.size());
815 TEST_P(CBasicGitWithTestRepoFixture
, GetBranchesTagsRefs
)
817 GetBranchesTagsRefs(m_Git
, GetParam());
820 TEST_P(CBasicGitWithTestRepoBareFixture
, GetBranchesTagsRefs
)
822 GetBranchesTagsRefs(m_Git
, GetParam());
825 TEST_P(CBasicGitWithTestRepoFixture
, GetBranchList_orphan
)
828 EXPECT_EQ(0, m_Git
.Run(_T("git.exe checkout --orphan orphanic"), &output
, CP_UTF8
));
829 EXPECT_FALSE(output
.IsEmpty());
831 STRING_VECTOR branches
;
833 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, ¤t
));
834 ASSERT_EQ(5, branches
.size());
835 EXPECT_EQ(-2, current
);
836 EXPECT_STREQ(_T("forconflict"), branches
[0]);
837 EXPECT_STREQ(_T("master"), branches
[1]);
838 EXPECT_STREQ(_T("master2"), branches
[2]);
839 EXPECT_STREQ(_T("simple-conflict"), branches
[3]);
840 EXPECT_STREQ(_T("subdir/branch"), branches
[4]);
843 TEST_P(CBasicGitWithEmptyBareRepositoryFixture
, GetEmptyBranchesTagsRefs
)
845 EXPECT_STREQ(_T("master"), m_Git
.GetCurrentBranch());
847 STRING_VECTOR branches
;
849 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, ¤t
));
850 EXPECT_TRUE(branches
.empty());
851 EXPECT_EQ(-2, current
); // not touched
853 EXPECT_EQ(0, m_Git
.GetBranchList(branches
, ¤t
, CGit::BRANCH_ALL
));
854 EXPECT_TRUE(branches
.empty());
855 EXPECT_EQ(-2, current
); // not touched
858 EXPECT_EQ(0, m_Git
.GetTagList(tags
));
859 EXPECT_TRUE(tags
.empty());
862 EXPECT_EQ(0, m_Git
.GetRefList(refs
));
863 EXPECT_TRUE(refs
.empty());
866 EXPECT_EQ(0, m_Git
.GetMapHashToFriendName(map
));
867 EXPECT_TRUE(map
.empty());
869 STRING_VECTOR remotes
;
870 EXPECT_EQ(0, m_Git
.GetRemoteList(remotes
));
871 EXPECT_TRUE(remotes
.empty());
874 TEST_P(CBasicGitWithEmptyRepositoryFixture
, CheckCleanWorkTree
)
877 CString testFile
= m_Dir
.GetTempDir() + L
"\\test.txt";
878 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)testFile
, L
"this is testing file."));
879 EXPECT_EQ(0, m_Git
.Run(_T("git.exe add test.txt"), &output
, CP_UTF8
));
881 EXPECT_EQ(0, m_Git
.Run(_T("git.exe commit -m \"Add test.txt\""), &output
, CP_UTF8
));
882 // repo with 1 versioned file
883 EXPECT_FALSE(output
.IsEmpty());
884 EXPECT_TRUE(m_Git
.CheckCleanWorkTree());
885 EXPECT_TRUE(m_Git
.CheckCleanWorkTree(true));
887 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)testFile
, L
"Overwriting this testing file."));
888 // repo with 1 modified versioned file
889 EXPECT_FALSE(m_Git
.CheckCleanWorkTree());
890 EXPECT_FALSE(m_Git
.CheckCleanWorkTree(true));
893 EXPECT_EQ(0, m_Git
.Run(_T("git.exe add test.txt"), &output
, CP_UTF8
));
894 // repo with 1 modified versioned and staged file
895 EXPECT_TRUE(output
.IsEmpty());
896 EXPECT_FALSE(m_Git
.CheckCleanWorkTree());
897 EXPECT_TRUE(m_Git
.CheckCleanWorkTree(true));
899 EXPECT_EQ(0, m_Git
.Run(_T("git.exe commit -m \"Modified test.txt\""), &output
, CP_UTF8
));
900 testFile
= m_Dir
.GetTempDir() + L
"\\test2.txt";
901 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)testFile
, L
"this is ANOTHER testing file."));
902 EXPECT_TRUE(m_Git
.CheckCleanWorkTree());
903 EXPECT_TRUE(m_Git
.CheckCleanWorkTree(true));