Directly use format string
[TortoiseGit.git] / test / UnitTests / GitRevLoglistTest.cpp
blob3d545bac2467b3a833ad73dda2f207eb33748f55
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2015-2017 - 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 "GitRevLoglist.h"
23 #include "TGitPath.h"
25 class GitRevLoglistCBasicGitWithTestRepoFixture : public CBasicGitWithTestRepoFixture
29 class GitRevLoglistCBasicGitWithTestRepoBareFixture : public CBasicGitWithTestRepoBareFixture
33 class GitRevLoglistCBasicGitWithSubmoduleRepoFixture : public CBasicGitWithSubmoduleRepositoryFixture
37 class GitRevLoglistCBasicGitWithSubmoduleRepoBareFixture : public CBasicGitWithSubmodulRepoeBareFixture
41 class GitRevLoglist2CBasicGitWithTestRepoFixture : public CBasicGitWithTestRepoFixture
45 class GitRevLoglist2CBasicGitWithTestRepoBareFixture : public CBasicGitWithTestRepoBareFixture
49 INSTANTIATE_TEST_CASE_P(GitRevLoglist, GitRevLoglistCBasicGitWithTestRepoFixture, testing::Values(LIBGIT, LIBGIT2, LIBGIT2_ALL));
50 INSTANTIATE_TEST_CASE_P(GitRevLoglist, GitRevLoglistCBasicGitWithTestRepoBareFixture, testing::Values(LIBGIT, LIBGIT2, LIBGIT2_ALL));
51 INSTANTIATE_TEST_CASE_P(GitRevLoglist, GitRevLoglistCBasicGitWithSubmoduleRepoFixture, testing::Values(LIBGIT, LIBGIT2, LIBGIT2_ALL));
52 INSTANTIATE_TEST_CASE_P(GitRevLoglist, GitRevLoglistCBasicGitWithSubmoduleRepoBareFixture, testing::Values(LIBGIT, LIBGIT2, LIBGIT2_ALL));
54 INSTANTIATE_TEST_CASE_P(GitRevLoglist, GitRevLoglist2CBasicGitWithTestRepoFixture, testing::Values(GIT_CLI, LIBGIT, LIBGIT2, LIBGIT2_ALL));
55 INSTANTIATE_TEST_CASE_P(GitRevLoglist, GitRevLoglist2CBasicGitWithTestRepoBareFixture, testing::Values(GIT_CLI, LIBGIT, LIBGIT2, LIBGIT2_ALL));
57 static void SafeFetchFullInfo(CGit* cGit)
59 GitRevLoglist rev;
60 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
61 EXPECT_EQ(1, rev.CheckAndDiff());
62 EXPECT_STREQ(L"", rev.GetAuthorName());
63 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
64 EXPECT_EQ(FALSE, rev.m_IsFull);
65 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
66 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
67 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
68 rev.m_IsDiffFiles = 1;
69 EXPECT_EQ(0, rev.GetFiles(nullptr).GetCount());
70 EXPECT_EQ(-1, rev.SafeFetchFullInfo(cGit));
71 EXPECT_STREQ(L"", rev.GetAuthorName());
72 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
73 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
74 EXPECT_EQ(FALSE, rev.m_IsFull);
75 EXPECT_EQ(TRUE, rev.m_IsDiffFiles);
76 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
77 rev.Clear();
78 rev.m_CommitHash = L"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6";
79 rev.m_IsDiffFiles = TRUE;
80 EXPECT_EQ(1, rev.CheckAndDiff());
81 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
82 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
83 EXPECT_EQ(FALSE, rev.m_IsFull);
84 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
85 EXPECT_STREQ(L"", rev.GetAuthorName());
86 rev.m_IsDiffFiles = FALSE;
87 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
88 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
89 EXPECT_EQ(FALSE, rev.m_IsFull);
90 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
91 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
92 EXPECT_EQ(0, rev.CheckAndDiff());
93 EXPECT_STREQ(L"", rev.GetAuthorName());
94 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
95 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
96 EXPECT_EQ(TRUE, rev.m_IsFull);
97 EXPECT_EQ(TRUE, rev.m_IsDiffFiles);
98 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
99 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
100 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
101 CTGitPathList list;
102 list = rev.GetFiles(nullptr);
103 EXPECT_STREQ(L"ascii.txt", list[0].GetGitPathString());
104 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
105 EXPECT_STREQ(L"2", list[0].m_StatAdd);
106 EXPECT_STREQ(L"2", list[0].m_StatDel);
107 EXPECT_EQ(0, list[0].m_ParentNo);
108 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
109 EXPECT_FALSE(list[0].IsDirectory());
110 rev.Clear();
111 rev.m_CommitHash = L"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6";
112 rev.m_IsUpdateing = TRUE; // do nothing
113 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
114 EXPECT_STREQ(L"", rev.GetAuthorName());
115 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
116 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
117 EXPECT_EQ(FALSE, rev.m_IsFull);
118 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
119 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
120 EXPECT_EQ(0, rev.GetAction(nullptr));
121 EXPECT_EQ(0, rev.GetFiles(nullptr).GetCount());
122 rev.Clear();
123 rev.m_CommitHash = L"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6";
124 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
125 EXPECT_STREQ(L"", rev.GetAuthorName());
126 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
127 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
128 EXPECT_EQ(TRUE, rev.m_IsFull);
129 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
130 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
131 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
132 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
133 list = rev.GetFiles(nullptr);
134 EXPECT_STREQ(L"ascii.txt", list[0].GetGitPathString());
135 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
136 EXPECT_STREQ(L"2", list[0].m_StatAdd);
137 EXPECT_STREQ(L"2", list[0].m_StatDel);
138 EXPECT_EQ(0, list[0].m_ParentNo);
139 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
140 rev.Clear();
141 EXPECT_EQ(0, rev.GetFiles(nullptr).GetCount());
142 rev.m_CommitHash = L"dead91b4aedeaddeaddead2a56d3c473c705dead"; // non-existent commit
143 EXPECT_EQ(-1, rev.SafeFetchFullInfo(cGit));
144 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
145 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
146 EXPECT_EQ(FALSE, rev.m_IsFull);
147 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
148 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
149 rev.Clear();
150 rev.m_CommitHash = L"35c91b4ae2f77f4f21a7aba56d3c473c705d89e6";
151 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
152 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
153 ASSERT_EQ(4, rev.GetFiles(nullptr).GetCount());
154 list = rev.GetFiles(nullptr);
155 EXPECT_STREQ(L"copy/ansi.txt", list[0].GetGitPathString());
156 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
157 EXPECT_STREQ(L"1", list[0].m_StatAdd);
158 EXPECT_STREQ(L"1", list[0].m_StatDel);
159 EXPECT_EQ(0, list[0].m_ParentNo);
160 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
161 EXPECT_STREQ(L"copy/utf16-be-nobom.txt", list[1].GetGitPathString());
162 EXPECT_STREQ(L"", list[1].GetGitOldPathString());
163 EXPECT_STREQ(L"-", list[1].m_StatAdd);
164 EXPECT_STREQ(L"-", list[1].m_StatDel);
165 EXPECT_EQ(0, list[1].m_ParentNo);
166 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[1].m_Action);
167 EXPECT_STREQ(L"copy/utf8-bom.txt", list[2].GetGitPathString());
168 EXPECT_STREQ(L"", list[2].GetGitOldPathString());
169 EXPECT_STREQ(L"1", list[2].m_StatAdd);
170 EXPECT_STREQ(L"1", list[2].m_StatDel);
171 EXPECT_EQ(0, list[2].m_ParentNo);
172 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[2].m_Action);
173 EXPECT_STREQ(L"copy/utf8-nobom.txt", list[3].GetGitPathString());
174 EXPECT_STREQ(L"", list[3].GetGitOldPathString());
175 EXPECT_STREQ(L"1", list[3].m_StatAdd);
176 EXPECT_STREQ(L"1", list[3].m_StatDel);
177 EXPECT_EQ(0, list[3].m_ParentNo);
178 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[3].m_Action);
179 rev.Clear();
180 rev.m_CommitHash = L"8d1ebbcc7eeb63af10ff8bcf7712afb9fcc90b8a"; // merge commit
181 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
182 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, rev.GetAction(nullptr));
183 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
184 list = rev.GetFiles(nullptr);
185 EXPECT_STREQ(L"newfiles3.txt", list[0].GetGitPathString());
186 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
187 EXPECT_STREQ(L"1", list[0].m_StatAdd);
188 EXPECT_STREQ(L"0", list[0].m_StatDel);
189 EXPECT_EQ(0, list[0].m_ParentNo);
190 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, list[0].m_Action);
191 EXPECT_FALSE(list[0].IsDirectory());
192 rev.Clear();
193 rev.m_CommitHash = L"18da7c332dcad0f37f9977d9176dce0b0c66f3eb"; // stash commit
194 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
195 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
196 ASSERT_EQ(2, rev.GetFiles(nullptr).GetCount());
197 list = rev.GetFiles(nullptr);
198 EXPECT_STREQ(L"newfiles.txt", list[0].GetGitPathString());
199 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
200 EXPECT_STREQ(L"1", list[0].m_StatAdd);
201 EXPECT_STREQ(L"1", list[0].m_StatDel);
202 EXPECT_EQ(0, list[0].m_ParentNo);
203 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
204 EXPECT_FALSE(list[0].IsDirectory());
205 EXPECT_STREQ(L"newfiles.txt", list[1].GetGitPathString());
206 EXPECT_STREQ(L"", list[1].GetGitOldPathString());
207 EXPECT_STREQ(L"1", list[1].m_StatAdd);
208 EXPECT_STREQ(L"1", list[1].m_StatDel);
209 EXPECT_EQ(1, list[1].m_ParentNo);
210 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[1].m_Action);
211 EXPECT_FALSE(list[1].IsDirectory());
212 rev.Clear();
213 rev.m_CommitHash = L"844309789a13614b52d5e7cbfe6350dd73d1dc72"; // root commit
214 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
215 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, rev.GetAction(nullptr));
216 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
217 EXPECT_STREQ(L"ansi.txt", rev.GetFiles(nullptr)[0].GetGitPathString());
218 EXPECT_STREQ(L"", rev.GetFiles(nullptr)[0].GetGitOldPathString());
219 rev.Clear();
220 rev.m_CommitHash = L"4c5c93d2a0b368bc4570d5ec02ab03b9c4334d44";
221 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
222 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED | CTGitPath::LOGACTIONS_MODIFIED | CTGitPath::LOGACTIONS_REPLACED | CTGitPath::LOGACTIONS_DELETED, rev.GetAction(nullptr));
223 ASSERT_EQ(4, rev.GetFiles(nullptr).GetCount());
224 list = rev.GetFiles(nullptr);
225 EXPECT_STREQ(L"newfiles2 - Cöpy.txt", list[0].GetGitPathString());
226 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
227 EXPECT_STREQ(L"1", list[0].m_StatAdd);
228 EXPECT_STREQ(L"0", list[0].m_StatDel);
229 EXPECT_EQ(0, list[0].m_ParentNo);
230 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, list[0].m_Action);
231 EXPECT_FALSE(list[0].IsDirectory());
232 EXPECT_STREQ(L"utf16-be-nobom.txt", list[1].GetGitPathString()); // changed from file to symlink
233 EXPECT_STREQ(L"", list[1].GetGitOldPathString());
234 EXPECT_STREQ(L"-", list[1].m_StatAdd);
235 EXPECT_STREQ(L"-", list[1].m_StatDel);
236 EXPECT_EQ(0, list[1].m_ParentNo);
237 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[1].m_Action);
238 EXPECT_FALSE(list[1].IsDirectory());
239 EXPECT_STREQ(L"utf8-bom.txt", list[2].GetGitPathString());
240 EXPECT_STREQ(L"", list[2].GetGitOldPathString());
241 EXPECT_STREQ(L"0", list[2].m_StatAdd);
242 EXPECT_STREQ(L"9", list[2].m_StatDel);
243 EXPECT_EQ(0, list[2].m_ParentNo);
244 EXPECT_EQ(CTGitPath::LOGACTIONS_DELETED, list[2].m_Action);
245 EXPECT_FALSE(list[2].IsDirectory());
246 EXPECT_STREQ(L"was-ansi.txt", list[3].GetGitPathString());
247 EXPECT_STREQ(L"ansi.txt", list[3].GetGitOldPathString());
248 EXPECT_STREQ(L"0", list[3].m_StatAdd);
249 EXPECT_STREQ(L"0", list[3].m_StatDel);
250 EXPECT_EQ(0, list[3].m_ParentNo);
251 EXPECT_EQ(CTGitPath::LOGACTIONS_REPLACED, list[3].m_Action);
252 EXPECT_FALSE(list[3].IsDirectory());
255 TEST_P(GitRevLoglistCBasicGitWithTestRepoFixture, SafeFetchFullInfo)
257 SafeFetchFullInfo(&g_Git);
260 TEST_P(GitRevLoglistCBasicGitWithTestRepoBareFixture, SafeFetchFullInfo)
262 SafeFetchFullInfo(&g_Git);
265 static void SafeFetchFullInfo_Submodule(CGit* cGit, config testConfig)
267 CTGitPathList list;
268 GitRevLoglist rev;
269 // for "easy" tests see SafeFetchFullInfo
270 rev.m_CommitHash = L"900539cd24776a94d1b642358ccfdb9d897c8254"; // added submodule
271 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
272 EXPECT_EQ(TRUE, rev.m_IsFull);
273 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
274 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
275 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, rev.GetAction(nullptr));
276 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
277 list = rev.GetFiles(nullptr);
278 EXPECT_STREQ(L"something", list[0].GetGitPathString());
279 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
280 EXPECT_STREQ(L"1", list[0].m_StatAdd);
281 EXPECT_STREQ(L"0", list[0].m_StatDel);
282 EXPECT_EQ(0, list[0].m_ParentNo);
283 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, list[0].m_Action);
284 EXPECT_TRUE(list[0].IsDirectory());
285 rev.Clear();
286 rev.m_CommitHash = L"c8d17f57c7b511aff4aa2fbfae158902281cad8e"; // modified submodule
287 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
288 EXPECT_EQ(TRUE, rev.m_IsFull);
289 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
290 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
291 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
292 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
293 list = rev.GetFiles(nullptr);
294 EXPECT_STREQ(L"something", list[0].GetGitPathString());
295 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
296 EXPECT_STREQ(L"1", list[0].m_StatAdd);
297 EXPECT_STREQ(L"1", list[0].m_StatDel);
298 EXPECT_EQ(0, list[0].m_ParentNo);
299 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
300 EXPECT_TRUE(list[0].IsDirectory());
301 rev.Clear();
302 rev.m_CommitHash = L"4ed8d1f9ce9aedc6ad044d9051cb584a8bc294ac"; // deleted submodule
303 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
304 EXPECT_EQ(TRUE, rev.m_IsFull);
305 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
306 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
307 EXPECT_EQ(CTGitPath::LOGACTIONS_DELETED, rev.GetAction(nullptr));
308 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
309 list = rev.GetFiles(nullptr);
310 EXPECT_STREQ(L"something", list[0].GetGitPathString());
311 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
312 EXPECT_STREQ(L"0", list[0].m_StatAdd);
313 EXPECT_STREQ(L"1", list[0].m_StatDel);
314 EXPECT_EQ(0, list[0].m_ParentNo);
315 EXPECT_EQ(CTGitPath::LOGACTIONS_DELETED, list[0].m_Action);
316 EXPECT_TRUE(list[0].IsDirectory());
317 rev.Clear();
318 rev.m_CommitHash = L"2e63f1a55bc3dce074897200b226009f575fbcae"; // submodule to file
319 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
320 EXPECT_EQ(TRUE, rev.m_IsFull);
321 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
322 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
323 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
324 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
325 list = rev.GetFiles(nullptr);
326 EXPECT_STREQ(L"something", list[0].GetGitPathString());
327 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
328 if (testConfig == LIBGIT2_ALL) // TODO: libgit behaves differently here
330 EXPECT_STREQ(L"-", list[0].m_StatAdd);
331 EXPECT_STREQ(L"-", list[0].m_StatDel);
333 else
335 EXPECT_STREQ(L"1", list[0].m_StatAdd);
336 EXPECT_STREQ(L"1", list[0].m_StatDel);
338 EXPECT_EQ(0, list[0].m_ParentNo);
339 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
340 EXPECT_FALSE(list[0].IsDirectory());
341 rev.Clear();
342 rev.m_CommitHash = L"07ac6e5916c03747f7485195deb7ec9100d1c2ef"; // file to submodule
343 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
344 EXPECT_EQ(TRUE, rev.m_IsFull);
345 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
346 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
347 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
348 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
349 list = rev.GetFiles(nullptr);
350 EXPECT_STREQ(L"something", list[0].GetGitPathString());
351 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
352 if (testConfig == LIBGIT2_ALL) // TODO: libgit behaves differently here
354 EXPECT_STREQ(L"-", list[0].m_StatAdd);
355 EXPECT_STREQ(L"-", list[0].m_StatDel);
357 else
359 EXPECT_STREQ(L"1", list[0].m_StatAdd);
360 EXPECT_STREQ(L"1", list[0].m_StatDel);
362 EXPECT_EQ(0, list[0].m_ParentNo);
363 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
364 EXPECT_FALSE(list[0].IsDirectory());
365 rev.Clear();
366 rev.m_CommitHash = L"2d2017245cf3d016c64e5ad4eb6b0f1bccd1cf7f"; // merge use third
367 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
368 EXPECT_EQ(TRUE, rev.m_IsFull);
369 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
370 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
371 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
372 ASSERT_EQ(2, rev.GetFiles(nullptr).GetCount());
373 list = rev.GetFiles(nullptr);
374 EXPECT_STREQ(L"something", list[0].GetGitPathString());
375 EXPECT_STREQ(L"", list[0].GetGitOldPathString());
376 EXPECT_STREQ(L"1", list[0].m_StatAdd);
377 EXPECT_STREQ(L"1", list[0].m_StatDel);
378 EXPECT_EQ(0, list[0].m_ParentNo);
379 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
380 EXPECT_TRUE(list[0].IsDirectory());
381 EXPECT_STREQ(L"something", list[1].GetGitPathString());
382 EXPECT_STREQ(L"", list[1].GetGitOldPathString());
383 EXPECT_STREQ(L"1", list[1].m_StatAdd);
384 EXPECT_STREQ(L"1", list[1].m_StatDel);
385 EXPECT_EQ(1, list[1].m_ParentNo);
386 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[1].m_Action);
387 EXPECT_TRUE(list[1].IsDirectory());
390 TEST_P(GitRevLoglistCBasicGitWithSubmoduleRepoBareFixture, SafeFetchFullInfo)
392 SafeFetchFullInfo_Submodule(&g_Git, GetParam());
395 TEST_P(GitRevLoglistCBasicGitWithSubmoduleRepoFixture, SafeFetchFullInfo)
397 SafeFetchFullInfo_Submodule(&g_Git, GetParam());
400 static void SafeGetSimpleList(CGit* cGit)
402 GitRevLoglist rev;
403 EXPECT_EQ(-1, rev.SafeGetSimpleList(cGit));
404 EXPECT_STREQ(L"", rev.GetAuthorName());
405 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
406 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
407 EXPECT_EQ(FALSE, rev.m_IsFull);
408 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
409 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
410 EXPECT_TRUE(rev.m_SimpleFileList.empty());
411 rev.Clear();
412 rev.m_CommitHash = L"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6";
413 rev.m_IsUpdateing = TRUE; // do nothing
414 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
415 EXPECT_STREQ(L"", rev.GetAuthorName());
416 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
417 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
418 EXPECT_EQ(FALSE, rev.m_IsFull);
419 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
420 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
421 EXPECT_TRUE(rev.m_SimpleFileList.empty());
422 rev.Clear();
423 rev.m_CommitHash = L"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6";
424 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
425 EXPECT_STREQ(L"", rev.GetAuthorName());
426 EXPECT_EQ(TRUE, rev.m_IsSimpleListReady);
427 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
428 EXPECT_EQ(FALSE, rev.m_IsFull);
429 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
430 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
431 ASSERT_EQ(1, rev.m_SimpleFileList.size());
432 EXPECT_STREQ(L"ascii.txt", rev.m_SimpleFileList[0]);
433 rev.Clear();
434 rev.m_CommitHash = L"dead91b4aedeaddeaddead2a56d3c473c705dead"; // non-existent commit
435 EXPECT_EQ(-1, rev.SafeGetSimpleList(cGit));
436 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
437 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
438 EXPECT_EQ(FALSE, rev.m_IsFull);
439 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
440 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
441 EXPECT_TRUE(rev.m_SimpleFileList.empty());
442 rev.Clear();
443 rev.m_CommitHash = L"35c91b4ae2f77f4f21a7aba56d3c473c705d89e6";
444 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
445 EXPECT_EQ(TRUE, rev.m_IsSimpleListReady);
446 ASSERT_EQ(4, rev.m_SimpleFileList.size());
447 EXPECT_STREQ(L"copy/ansi.txt", rev.m_SimpleFileList[0]);
448 EXPECT_STREQ(L"copy/utf16-be-nobom.txt", rev.m_SimpleFileList[1]);
449 EXPECT_STREQ(L"copy/utf8-bom.txt", rev.m_SimpleFileList[2]);
450 EXPECT_STREQ(L"copy/utf8-nobom.txt", rev.m_SimpleFileList[3]);
451 rev.Clear();
452 rev.m_CommitHash = L"8d1ebbcc7eeb63af10ff8bcf7712afb9fcc90b8a"; // merge commit
453 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
454 ASSERT_EQ(1, rev.m_SimpleFileList.size());
455 EXPECT_STREQ(L"newfiles3.txt", rev.m_SimpleFileList[0]);
456 rev.Clear();
457 rev.m_CommitHash = L"18da7c332dcad0f37f9977d9176dce0b0c66f3eb"; // stash commit
458 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
459 ASSERT_EQ(1, rev.m_SimpleFileList.size());
460 EXPECT_STREQ(L"newfiles.txt", rev.m_SimpleFileList[0]);
461 rev.Clear();
462 rev.m_CommitHash = L"844309789a13614b52d5e7cbfe6350dd73d1dc72"; // root commit
463 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
464 ASSERT_EQ(1, rev.m_SimpleFileList.size());
465 EXPECT_STREQ(L"ansi.txt", rev.m_SimpleFileList[0]);
466 rev.Clear();
467 rev.m_CommitHash = L"4c5c93d2a0b368bc4570d5ec02ab03b9c4334d44";
468 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
469 ASSERT_EQ(5, rev.m_SimpleFileList.size());
470 EXPECT_STREQ(L"ansi.txt", rev.m_SimpleFileList[0]); // has same hash as was-ansi.txt?!
471 EXPECT_STREQ(L"newfiles2 - Cöpy.txt", rev.m_SimpleFileList[1]);
472 EXPECT_STREQ(L"utf16-be-nobom.txt", rev.m_SimpleFileList[2]);
473 EXPECT_STREQ(L"utf8-bom.txt", rev.m_SimpleFileList[3]);
474 EXPECT_STREQ(L"was-ansi.txt", rev.m_SimpleFileList[4]);
477 TEST_P(GitRevLoglistCBasicGitWithTestRepoFixture, SafeGetSimpleList)
479 SafeGetSimpleList(&g_Git);
482 TEST_P(GitRevLoglistCBasicGitWithTestRepoBareFixture, SafeGetSimpleList)
484 SafeGetSimpleList(&g_Git);
487 static void SafeGetSimpleList_Submodule(CGit* cGit)
489 GitRevLoglist rev;
490 // for "easy" tests see SafeGetSimpleList
491 rev.m_CommitHash = L"900539cd24776a94d1b642358ccfdb9d897c8254"; // added submodule
492 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
493 ASSERT_EQ(1, rev.m_SimpleFileList.size());
494 EXPECT_STREQ(L"something", rev.m_SimpleFileList[0]);
495 rev.Clear();
496 rev.m_CommitHash = L"c8d17f57c7b511aff4aa2fbfae158902281cad8e"; // modified submodule
497 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
498 ASSERT_EQ(1, rev.m_SimpleFileList.size());
499 EXPECT_STREQ(L"something", rev.m_SimpleFileList[0]);
500 rev.Clear();
501 rev.m_CommitHash = L"4ed8d1f9ce9aedc6ad044d9051cb584a8bc294ac"; // deleted submodule
502 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
503 ASSERT_EQ(1, rev.m_SimpleFileList.size());
504 EXPECT_STREQ(L"something", rev.m_SimpleFileList[0]);
505 rev.Clear();
506 rev.m_CommitHash = L"2e63f1a55bc3dce074897200b226009f575fbcae"; // submodule to file
507 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
508 ASSERT_EQ(1, rev.m_SimpleFileList.size());
509 EXPECT_STREQ(L"something", rev.m_SimpleFileList[0]);
510 rev.Clear();
511 rev.m_CommitHash = L"07ac6e5916c03747f7485195deb7ec9100d1c2ef"; // file to submodule
512 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
513 ASSERT_EQ(1, rev.m_SimpleFileList.size());
514 EXPECT_STREQ(L"something", rev.m_SimpleFileList[0]);
515 rev.Clear();
516 rev.m_CommitHash = L"2d2017245cf3d016c64e5ad4eb6b0f1bccd1cf7f"; // merge use third
517 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
518 ASSERT_EQ(1, rev.m_SimpleFileList.size());
519 EXPECT_STREQ(L"something", rev.m_SimpleFileList[0]);
522 TEST_P(GitRevLoglistCBasicGitWithSubmoduleRepoFixture, SafeGetSimpleList)
524 SafeGetSimpleList_Submodule(&g_Git);
527 TEST_P(GitRevLoglistCBasicGitWithSubmoduleRepoBareFixture, SafeGetSimpleList)
529 SafeGetSimpleList_Submodule(&g_Git);
532 TEST(GitRevLoglist, IsBoundary)
534 GitRevLoglist rev;
535 EXPECT_EQ(FALSE, rev.IsBoundary());
536 rev.m_Mark = L'-';
537 EXPECT_EQ(TRUE, rev.IsBoundary());
538 rev.Clear();
539 EXPECT_EQ(FALSE, rev.IsBoundary());
542 TEST(GitRevLoglist, GetUnRevFiles)
544 GitRevLoglist rev;
545 EXPECT_EQ(0, rev.GetUnRevFiles().GetCount());
546 CTGitPathList& list = rev.GetUnRevFiles();
547 list.AddPath(CTGitPath("file.txt"));
548 EXPECT_EQ(1, rev.GetUnRevFiles().GetCount());
549 rev.Clear();
550 EXPECT_EQ(0, list.GetCount());
551 EXPECT_EQ(0, rev.GetUnRevFiles().GetCount());
554 TEST(GitRevLoglist, GetAction)
556 GitRevLoglist rev;
557 EXPECT_EQ(0, rev.GetAction(nullptr));
558 int& action = rev.GetAction(nullptr);
559 action = 5;
560 EXPECT_EQ(5, rev.GetAction(nullptr));
561 rev.Clear();
562 EXPECT_EQ(0, action);
563 EXPECT_EQ(0, rev.GetAction(nullptr));
566 static void GetReflog()
568 CString err;
569 std::vector<GitRevLoglist> revloglist;
570 EXPECT_EQ(0, GitRevLoglist::GetRefLog(L"refs/stash", revloglist, err));
571 EXPECT_EQ(0, revloglist.size());
572 EXPECT_STREQ(L"", err);
574 EXPECT_EQ(0, GitRevLoglist::GetRefLog(L"HEAD", revloglist, err));
575 EXPECT_EQ(12, revloglist.size());
576 EXPECT_STREQ(L"", err);
578 revloglist.clear();
579 EXPECT_EQ(0, GitRevLoglist::GetRefLog(L"refs/heads/does-not-exist", revloglist, err));
580 EXPECT_EQ(0, revloglist.size());
581 EXPECT_STREQ(L"", err);
583 err.Empty();
584 EXPECT_EQ(0, GitRevLoglist::GetRefLog(L"refs/heads/master", revloglist, err));
585 ASSERT_EQ(7, revloglist.size());
586 EXPECT_STREQ(L"", err);
588 EXPECT_STREQ(L"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", revloglist[0].m_CommitHash.ToString());
589 EXPECT_STREQ(L"refs/heads/master@{0}", revloglist[0].m_Ref);
590 EXPECT_STREQ(L"reset", revloglist[0].m_RefAction);
591 //EXPECT_STREQ(L"Sven Strickroth", revloglist[0].GetCommitterName());
592 //EXPECT_STREQ(L"email@cs-ware.de", revloglist[0].GetCommitterEmail());
593 EXPECT_STREQ(L"2015-03-16 12:59:51", revloglist[0].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
594 EXPECT_STREQ(L"moving to 7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", revloglist[0].GetSubject());
596 EXPECT_STREQ(L"aa5b97f89cea6863222823c8289ce392d06d1691", revloglist[2].m_CommitHash.ToString());
597 EXPECT_STREQ(L"refs/heads/master@{2}", revloglist[2].m_Ref);
598 EXPECT_STREQ(L"reset", revloglist[2].m_RefAction);
599 //EXPECT_STREQ(L"Dümmy User", revloglist[2].GetCommitterName());
600 //EXPECT_STREQ(L"dummy@example.com", revloglist[2].GetCommitterEmail());
601 EXPECT_STREQ(L"2015-03-16 12:59:07", revloglist[2].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
602 EXPECT_STREQ(L"moving to aa5b97f89cea6863222823c8289ce392d06d1691", revloglist[2].GetSubject());
604 EXPECT_STREQ(L"df8019413c88d2aedbf33fc2dac3544312da4c18", revloglist[3].m_CommitHash.ToString());
605 EXPECT_STREQ(L"refs/heads/master@{3}", revloglist[3].m_Ref);
606 EXPECT_STREQ(L"commit (amend)", revloglist[3].m_RefAction);
607 //EXPECT_STREQ(L"Sven Strickroth", revloglist[3].GetCommitterName());
608 //EXPECT_STREQ(L"email@cs-ware.de", revloglist[3].GetCommitterEmail());
609 EXPECT_STREQ(L"2015-03-16 12:55:00", revloglist[3].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
610 EXPECT_STREQ(L"Several actions", revloglist[3].GetSubject());
612 EXPECT_STREQ(L"32c344625f14ecb16b6f003a77eb7a3d2c15d470", revloglist[4].m_CommitHash.ToString());
613 EXPECT_STREQ(L"refs/heads/master@{4}", revloglist[4].m_Ref);
614 EXPECT_STREQ(L"commit", revloglist[4].m_RefAction);
615 //EXPECT_STREQ(L"Sven Strickroth", revloglist[4].GetCommitterName());
616 //EXPECT_STREQ(L"email@cs-ware.de", revloglist[4].GetCommitterEmail());
617 EXPECT_STREQ(L"2015-03-16 12:52:22", revloglist[4].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
618 EXPECT_STREQ(L"renamed a file", revloglist[4].GetSubject());
620 EXPECT_STREQ(L"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", revloglist[5].m_CommitHash.ToString());
621 EXPECT_STREQ(L"refs/heads/master@{5}", revloglist[5].m_Ref);
622 EXPECT_STREQ(L"fetch origin +refs/heads/*:refs/heads/*", revloglist[5].m_RefAction);
623 //EXPECT_STREQ(L"Dummy author", revloglist[5].GetCommitterName());
624 //EXPECT_STREQ(L"a@example.com", revloglist[5].GetCommitterEmail());
625 EXPECT_STREQ(L"2015-03-16 12:52:10", revloglist[5].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
626 EXPECT_STREQ(L"forced-update", revloglist[5].GetSubject());
628 EXPECT_STREQ(L"560deea87853158b22d0c0fd73f60a458d47838a", revloglist[6].m_CommitHash.ToString());
629 EXPECT_STREQ(L"refs/heads/master@{6}", revloglist[6].m_Ref);
630 EXPECT_STREQ(L"push", revloglist[6].m_RefAction);
631 //EXPECT_STREQ(L"Sven Strickroth", revloglist[6].GetCommitterName());
632 //EXPECT_STREQ(L"email@cs-ware.de", revloglist[6].GetCommitterEmail());
633 EXPECT_STREQ(L"2015-03-16 12:51:40", revloglist[6].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
634 EXPECT_STREQ(L"", revloglist[6].GetSubject());
637 TEST_P(GitRevLoglist2CBasicGitWithTestRepoFixture, GetReflog)
639 GetReflog();
642 TEST_P(GitRevLoglist2CBasicGitWithTestRepoBareFixture, GetReflog)
644 GetReflog();