Fixed issue #2495: "Show Reflog" dialog shows empty action for "push" entries
[TortoiseGit.git] / test / UnitTests / GitRevLoglistTest.cpp
blob78a3d3df72bbf75e6ef180e6a2dc27996452c70a
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.
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 GitRevLoglist2CBasicGitWithTestRepoFixture : public CBasicGitWithTestRepoFixture
37 class GitRevLoglist2CBasicGitWithTestRepoBareFixture : public CBasicGitWithTestRepoBareFixture
41 INSTANTIATE_TEST_CASE_P(GitRevLoglist, GitRevLoglistCBasicGitWithTestRepoFixture, testing::Values(LIBGIT, LIBGIT2, LIBGIT2_ALL));
42 INSTANTIATE_TEST_CASE_P(GitRevLoglist, GitRevLoglistCBasicGitWithTestRepoBareFixture, testing::Values(LIBGIT, LIBGIT2, LIBGIT2_ALL));
44 INSTANTIATE_TEST_CASE_P(GitRevLoglist, GitRevLoglist2CBasicGitWithTestRepoFixture, testing::Values(GIT_CLI, LIBGIT, LIBGIT2, LIBGIT2_ALL));
45 INSTANTIATE_TEST_CASE_P(GitRevLoglist, GitRevLoglist2CBasicGitWithTestRepoBareFixture, testing::Values(GIT_CLI, LIBGIT, LIBGIT2, LIBGIT2_ALL));
47 static void SafeFetchFullInfo(CGit* cGit)
49 GitRevLoglist rev;
50 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
51 EXPECT_EQ(1, rev.CheckAndDiff());
52 EXPECT_STREQ(_T(""), rev.GetAuthorName());
53 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
54 EXPECT_EQ(FALSE, rev.m_IsFull);
55 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
56 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
57 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
58 rev.m_IsDiffFiles = 1;
59 EXPECT_EQ(0, rev.GetFiles(nullptr).GetCount());
60 EXPECT_EQ(-1, rev.SafeFetchFullInfo(cGit));
61 EXPECT_STREQ(_T(""), rev.GetAuthorName());
62 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
63 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
64 EXPECT_EQ(FALSE, rev.m_IsFull);
65 EXPECT_EQ(TRUE, rev.m_IsDiffFiles);
66 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
67 rev.Clear();
68 rev.m_CommitHash = _T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6");
69 rev.m_IsDiffFiles = TRUE;
70 EXPECT_EQ(1, rev.CheckAndDiff());
71 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
72 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
73 EXPECT_EQ(FALSE, rev.m_IsFull);
74 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
75 EXPECT_STREQ(_T(""), rev.GetAuthorName());
76 rev.m_IsDiffFiles = FALSE;
77 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
78 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
79 EXPECT_EQ(FALSE, rev.m_IsFull);
80 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
81 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
82 EXPECT_EQ(0, rev.CheckAndDiff());
83 EXPECT_STREQ(_T(""), rev.GetAuthorName());
84 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
85 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
86 EXPECT_EQ(TRUE, rev.m_IsFull);
87 EXPECT_EQ(TRUE, rev.m_IsDiffFiles);
88 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
89 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
90 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
91 CTGitPathList list;
92 list = rev.GetFiles(nullptr);
93 EXPECT_STREQ(_T("ascii.txt"), list[0].GetGitPathString());
94 EXPECT_STREQ(_T("2"), list[0].m_StatAdd);
95 EXPECT_STREQ(_T("2"), list[0].m_StatDel);
96 EXPECT_EQ(0, list[0].m_ParentNo);
97 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
98 rev.Clear();
99 rev.m_CommitHash = _T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6");
100 rev.m_IsUpdateing = TRUE; // do nothing
101 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
102 EXPECT_STREQ(_T(""), rev.GetAuthorName());
103 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
104 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
105 EXPECT_EQ(FALSE, rev.m_IsFull);
106 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
107 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
108 EXPECT_EQ(0, rev.GetAction(nullptr));
109 EXPECT_EQ(0, rev.GetFiles(nullptr).GetCount());
110 rev.Clear();
111 rev.m_CommitHash = _T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6");
112 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
113 EXPECT_STREQ(_T(""), rev.GetAuthorName());
114 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
115 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
116 EXPECT_EQ(TRUE, rev.m_IsFull);
117 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
118 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
119 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
120 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
121 list = rev.GetFiles(nullptr);
122 EXPECT_STREQ(_T("ascii.txt"), list[0].GetGitPathString());
123 EXPECT_STREQ(_T("2"), list[0].m_StatAdd);
124 EXPECT_STREQ(_T("2"), list[0].m_StatDel);
125 EXPECT_EQ(0, list[0].m_ParentNo);
126 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
127 rev.Clear();
128 EXPECT_EQ(0, rev.GetFiles(nullptr).GetCount());
129 rev.m_CommitHash = _T("dead91b4aedeaddeaddead2a56d3c473c705dead"); // non-existent commit
130 EXPECT_EQ(-1, rev.SafeFetchFullInfo(cGit));
131 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
132 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
133 EXPECT_EQ(FALSE, rev.m_IsFull);
134 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
135 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
136 rev.Clear();
137 rev.m_CommitHash = _T("35c91b4ae2f77f4f21a7aba56d3c473c705d89e6");
138 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
139 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
140 ASSERT_EQ(4, rev.GetFiles(nullptr).GetCount());
141 list = rev.GetFiles(nullptr);
142 EXPECT_STREQ(_T("copy/ansi.txt"), list[0].GetGitPathString());
143 EXPECT_STREQ(_T("1"), list[0].m_StatAdd);
144 EXPECT_STREQ(_T("1"), list[0].m_StatDel);
145 EXPECT_EQ(0, list[0].m_ParentNo);
146 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
147 EXPECT_STREQ(_T("copy/utf16-be-nobom.txt"), list[1].GetGitPathString());
148 EXPECT_STREQ(_T("-"), list[1].m_StatAdd);
149 EXPECT_STREQ(_T("-"), list[1].m_StatDel);
150 EXPECT_EQ(0, list[1].m_ParentNo);
151 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[1].m_Action);
152 EXPECT_STREQ(_T("copy/utf8-bom.txt"), list[2].GetGitPathString());
153 EXPECT_STREQ(_T("1"), list[2].m_StatAdd);
154 EXPECT_STREQ(_T("1"), list[2].m_StatDel);
155 EXPECT_EQ(0, list[2].m_ParentNo);
156 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[2].m_Action);
157 EXPECT_STREQ(_T("copy/utf8-nobom.txt"), list[3].GetGitPathString());
158 EXPECT_STREQ(_T("1"), list[3].m_StatAdd);
159 EXPECT_STREQ(_T("1"), list[3].m_StatDel);
160 EXPECT_EQ(0, list[3].m_ParentNo);
161 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[3].m_Action);
162 rev.Clear();
163 rev.m_CommitHash = _T("8d1ebbcc7eeb63af10ff8bcf7712afb9fcc90b8a"); // merge commit
164 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
165 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, rev.GetAction(nullptr));
166 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
167 list = rev.GetFiles(nullptr);
168 EXPECT_STREQ(_T("newfiles3.txt"), list[0].GetGitPathString());
169 EXPECT_STREQ(_T("1"), list[0].m_StatAdd);
170 EXPECT_STREQ(_T("0"), list[0].m_StatDel);
171 EXPECT_EQ(0, list[0].m_ParentNo);
172 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, list[0].m_Action);
173 rev.Clear();
174 rev.m_CommitHash = _T("18da7c332dcad0f37f9977d9176dce0b0c66f3eb"); // stash commit
175 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
176 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
177 ASSERT_EQ(2, rev.GetFiles(nullptr).GetCount());
178 list = rev.GetFiles(nullptr);
179 EXPECT_STREQ(_T("newfiles.txt"), list[0].GetGitPathString());
180 EXPECT_STREQ(_T("1"), list[0].m_StatAdd);
181 EXPECT_STREQ(_T("1"), list[0].m_StatDel);
182 EXPECT_EQ(0, list[0].m_ParentNo);
183 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
184 EXPECT_STREQ(_T("newfiles.txt"), list[1].GetGitPathString());
185 EXPECT_STREQ(_T("1"), list[1].m_StatAdd);
186 EXPECT_STREQ(_T("1"), list[1].m_StatDel);
187 EXPECT_EQ(1, list[1].m_ParentNo);
188 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[1].m_Action);
189 rev.Clear();
190 rev.m_CommitHash = _T("844309789a13614b52d5e7cbfe6350dd73d1dc72"); // root commit
191 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
192 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, rev.GetAction(nullptr));
193 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
194 EXPECT_STREQ(_T("ansi.txt"), rev.GetFiles(nullptr)[0].GetGitPathString());
195 rev.Clear();
196 rev.m_CommitHash = _T("4c5c93d2a0b368bc4570d5ec02ab03b9c4334d44");
197 EXPECT_EQ(0, rev.SafeFetchFullInfo(cGit));
198 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED | CTGitPath::LOGACTIONS_MODIFIED | CTGitPath::LOGACTIONS_REPLACED | CTGitPath::LOGACTIONS_DELETED, rev.GetAction(nullptr));
199 ASSERT_EQ(4, rev.GetFiles(nullptr).GetCount());
200 list = rev.GetFiles(nullptr);
201 EXPECT_STREQ(_T("newfiles2 - Cöpy.txt"), list[0].GetGitPathString());
202 EXPECT_STREQ(_T("1"), list[0].m_StatAdd);
203 EXPECT_STREQ(_T("0"), list[0].m_StatDel);
204 EXPECT_EQ(0, list[0].m_ParentNo);
205 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, list[0].m_Action);
206 EXPECT_STREQ(_T("utf16-be-nobom.txt"), list[1].GetGitPathString()); // changed from file to symlink
207 EXPECT_STREQ(_T("-"), list[1].m_StatAdd);
208 EXPECT_STREQ(_T("-"), list[1].m_StatDel);
209 EXPECT_EQ(0, list[1].m_ParentNo);
210 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[1].m_Action);
211 EXPECT_STREQ(_T("utf8-bom.txt"), list[2].GetGitPathString());
212 EXPECT_STREQ(_T("0"), list[2].m_StatAdd);
213 EXPECT_STREQ(_T("9"), list[2].m_StatDel);
214 EXPECT_EQ(0, list[2].m_ParentNo);
215 EXPECT_EQ(CTGitPath::LOGACTIONS_DELETED, list[2].m_Action);
216 EXPECT_STREQ(_T("was-ansi.txt"), list[3].GetGitPathString());
217 EXPECT_STREQ(_T("0"), list[3].m_StatAdd);
218 EXPECT_STREQ(_T("0"), list[3].m_StatDel);
219 EXPECT_EQ(0, list[3].m_ParentNo);
220 EXPECT_EQ(CTGitPath::LOGACTIONS_REPLACED, list[3].m_Action);
223 TEST_P(GitRevLoglistCBasicGitWithTestRepoFixture, SafeFetchFullInfo)
225 SafeFetchFullInfo(&g_Git);
228 TEST_P(GitRevLoglistCBasicGitWithTestRepoBareFixture, SafeFetchFullInfo)
230 SafeFetchFullInfo(&g_Git);
233 static void SafeGetSimpleList(CGit* cGit)
235 GitRevLoglist rev;
236 EXPECT_EQ(-1, rev.SafeGetSimpleList(cGit));
237 EXPECT_STREQ(_T(""), rev.GetAuthorName());
238 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
239 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
240 EXPECT_EQ(FALSE, rev.m_IsFull);
241 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
242 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
243 rev.Clear();
244 rev.m_CommitHash = _T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6");
245 rev.m_IsDiffFiles = TRUE;
246 CTGitPathList list;
247 rev.Clear();
248 rev.m_CommitHash = _T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6");
249 rev.m_IsUpdateing = TRUE; // do nothing
250 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
251 EXPECT_STREQ(_T(""), rev.GetAuthorName());
252 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
253 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
254 EXPECT_EQ(FALSE, rev.m_IsFull);
255 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
256 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
257 EXPECT_EQ(0, rev.GetAction(nullptr));
258 EXPECT_EQ(0, rev.GetFiles(nullptr).GetCount());
259 rev.Clear();
260 rev.m_CommitHash = _T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6");
261 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
262 EXPECT_STREQ(_T(""), rev.GetAuthorName());
263 EXPECT_EQ(TRUE, rev.m_IsSimpleListReady);
264 EXPECT_EQ(FALSE, rev.m_IsUpdateing);
265 EXPECT_EQ(FALSE, rev.m_IsFull);
266 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
267 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
268 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
269 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
270 list = rev.GetFiles(nullptr);
271 EXPECT_STREQ(_T("ascii.txt"), list[0].GetGitPathString());
272 EXPECT_STREQ(_T("2"), list[0].m_StatAdd);
273 EXPECT_STREQ(_T("2"), list[0].m_StatDel);
274 EXPECT_EQ(0, list[0].m_ParentNo);
275 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
276 rev.Clear();
277 EXPECT_EQ(0, rev.GetFiles(nullptr).GetCount());
278 rev.m_CommitHash = _T("dead91b4aedeaddeaddead2a56d3c473c705dead"); // non-existent commit
279 EXPECT_EQ(-1, rev.SafeGetSimpleList(cGit));
280 EXPECT_EQ(FALSE, rev.m_IsSimpleListReady);
281 EXPECT_EQ(TRUE, rev.m_IsUpdateing);
282 EXPECT_EQ(FALSE, rev.m_IsFull);
283 EXPECT_EQ(FALSE, rev.m_IsDiffFiles);
284 EXPECT_EQ(FALSE, rev.m_IsCommitParsed);
285 rev.Clear();
286 rev.m_CommitHash = _T("35c91b4ae2f77f4f21a7aba56d3c473c705d89e6");
287 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
288 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
289 ASSERT_EQ(4, rev.GetFiles(nullptr).GetCount());
290 list = rev.GetFiles(nullptr);
291 EXPECT_STREQ(_T("copy/ansi.txt"), list[0].GetGitPathString());
292 EXPECT_STREQ(_T("1"), list[0].m_StatAdd);
293 EXPECT_STREQ(_T("1"), list[0].m_StatDel);
294 EXPECT_EQ(0, list[0].m_ParentNo);
295 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
296 EXPECT_STREQ(_T("copy/utf16-be-nobom.txt"), list[1].GetGitPathString());
297 EXPECT_STREQ(_T("-"), list[1].m_StatAdd);
298 EXPECT_STREQ(_T("-"), list[1].m_StatDel);
299 EXPECT_EQ(0, list[1].m_ParentNo);
300 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[1].m_Action);
301 EXPECT_STREQ(_T("copy/utf8-bom.txt"), list[2].GetGitPathString());
302 EXPECT_STREQ(_T("1"), list[2].m_StatAdd);
303 EXPECT_STREQ(_T("1"), list[2].m_StatDel);
304 EXPECT_EQ(0, list[2].m_ParentNo);
305 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[2].m_Action);
306 EXPECT_STREQ(_T("copy/utf8-nobom.txt"), list[3].GetGitPathString());
307 EXPECT_STREQ(_T("1"), list[3].m_StatAdd);
308 EXPECT_STREQ(_T("1"), list[3].m_StatDel);
309 EXPECT_EQ(0, list[3].m_ParentNo);
310 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[3].m_Action);
311 rev.Clear();
312 rev.m_CommitHash = _T("8d1ebbcc7eeb63af10ff8bcf7712afb9fcc90b8a"); // merge commit
313 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
314 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, rev.GetAction(nullptr));
315 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
316 list = rev.GetFiles(nullptr);
317 EXPECT_STREQ(_T("newfiles3.txt"), list[0].GetGitPathString());
318 EXPECT_STREQ(_T("1"), list[0].m_StatAdd);
319 EXPECT_STREQ(_T("0"), list[0].m_StatDel);
320 EXPECT_EQ(0, list[0].m_ParentNo);
321 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, list[0].m_Action);
322 rev.Clear();
323 rev.m_CommitHash = _T("18da7c332dcad0f37f9977d9176dce0b0c66f3eb"); // stash commit
324 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
325 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, rev.GetAction(nullptr));
326 ASSERT_EQ(2, rev.GetFiles(nullptr).GetCount());
327 list = rev.GetFiles(nullptr);
328 EXPECT_STREQ(_T("newfiles.txt"), list[0].GetGitPathString());
329 EXPECT_STREQ(_T("1"), list[0].m_StatAdd);
330 EXPECT_STREQ(_T("1"), list[0].m_StatDel);
331 EXPECT_EQ(0, list[0].m_ParentNo);
332 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[0].m_Action);
333 EXPECT_STREQ(_T("newfiles.txt"), list[1].GetGitPathString());
334 EXPECT_STREQ(_T("1"), list[1].m_StatAdd);
335 EXPECT_STREQ(_T("1"), list[1].m_StatDel);
336 EXPECT_EQ(1, list[1].m_ParentNo);
337 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[1].m_Action);
338 rev.Clear();
339 rev.m_CommitHash = _T("844309789a13614b52d5e7cbfe6350dd73d1dc72"); // root commit
340 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
341 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, rev.GetAction(nullptr));
342 ASSERT_EQ(1, rev.GetFiles(nullptr).GetCount());
343 EXPECT_STREQ(_T("ansi.txt"), rev.GetFiles(nullptr)[0].GetGitPathString());
344 rev.Clear();
345 rev.m_CommitHash = _T("4c5c93d2a0b368bc4570d5ec02ab03b9c4334d44");
346 EXPECT_EQ(0, rev.SafeGetSimpleList(cGit));
347 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED | CTGitPath::LOGACTIONS_MODIFIED | CTGitPath::LOGACTIONS_DELETED | CTGitPath::LOGACTIONS_REPLACED, rev.GetAction(nullptr));
348 ASSERT_EQ(4, rev.GetFiles(nullptr).GetCount());
349 list = rev.GetFiles(nullptr);
350 EXPECT_STREQ(_T("newfiles2 - Cöpy.txt"), list[0].GetGitPathString());
351 EXPECT_STREQ(_T("1"), list[0].m_StatAdd);
352 EXPECT_STREQ(_T("0"), list[0].m_StatDel);
353 EXPECT_EQ(0, list[0].m_ParentNo);
354 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED, list[0].m_Action);
355 EXPECT_STREQ(_T("utf16-be-nobom.txt"), list[1].GetGitPathString()); // changed from file to symlink
356 EXPECT_STREQ(_T("-"), list[1].m_StatAdd);
357 EXPECT_STREQ(_T("-"), list[1].m_StatDel);
358 EXPECT_EQ(0, list[1].m_ParentNo);
359 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED, list[1].m_Action);
360 EXPECT_STREQ(_T("utf8-bom.txt"), list[2].GetGitPathString());
361 EXPECT_STREQ(_T("0"), list[2].m_StatAdd);
362 EXPECT_STREQ(_T("9"), list[2].m_StatDel);
363 EXPECT_EQ(0, list[2].m_ParentNo);
364 EXPECT_EQ(CTGitPath::LOGACTIONS_DELETED, list[2].m_Action);
365 EXPECT_STREQ(_T("was-ansi.txt"), list[3].GetGitPathString());
366 EXPECT_STREQ(_T("0"), list[3].m_StatAdd);
367 EXPECT_STREQ(_T("0"), list[3].m_StatDel);
368 EXPECT_EQ(0, list[3].m_ParentNo);
369 EXPECT_EQ(CTGitPath::LOGACTIONS_REPLACED, list[3].m_Action);
372 TEST_P(GitRevLoglistCBasicGitWithTestRepoFixture, SafeGetSimpleList)
374 SafeGetSimpleList(&g_Git);
377 TEST_P(GitRevLoglistCBasicGitWithTestRepoBareFixture, SafeGetSimpleList)
379 SafeGetSimpleList(&g_Git);
382 TEST(GitRevLoglist, IsBoundary)
384 GitRevLoglist rev;
385 EXPECT_EQ(FALSE, rev.IsBoundary());
386 rev.m_Mark = _T('-');
387 EXPECT_EQ(TRUE, rev.IsBoundary());
388 rev.Clear();
389 EXPECT_EQ(FALSE, rev.IsBoundary());
392 TEST(GitRevLoglist, GetUnRevFiles)
394 GitRevLoglist rev;
395 EXPECT_EQ(0, rev.GetUnRevFiles().GetCount());
396 CTGitPathList& list = rev.GetUnRevFiles();
397 list.AddPath(CTGitPath("file.txt"));
398 EXPECT_EQ(1, rev.GetUnRevFiles().GetCount());
399 rev.Clear();
400 EXPECT_EQ(0, list.GetCount());
401 EXPECT_EQ(0, rev.GetUnRevFiles().GetCount());
404 TEST(GitRevLoglist, GetAction)
406 GitRevLoglist rev;
407 EXPECT_EQ(0, rev.GetAction(nullptr));
408 int& action = rev.GetAction(nullptr);
409 action = 5;
410 EXPECT_EQ(5, rev.GetAction(nullptr));
411 rev.Clear();
412 EXPECT_EQ(0, action);
413 EXPECT_EQ(0, rev.GetAction(nullptr));
416 static void GetReflog()
418 CString err;
419 std::vector<GitRevLoglist> revloglist;
420 EXPECT_EQ(0, GitRevLoglist::GetRefLog(_T("refs/stash"), revloglist, err));
421 EXPECT_EQ(0, revloglist.size());
422 EXPECT_TRUE(err.IsEmpty());
424 EXPECT_EQ(0, GitRevLoglist::GetRefLog(_T("HEAD"), revloglist, err));
425 EXPECT_EQ(12, revloglist.size());
426 EXPECT_TRUE(err.IsEmpty());
428 revloglist.clear();
429 EXPECT_EQ(0, GitRevLoglist::GetRefLog(_T("refs/heads/does-not-exist"), revloglist, err));
430 EXPECT_EQ(0, revloglist.size());
431 EXPECT_TRUE(err.IsEmpty());
433 err.Empty();
434 EXPECT_EQ(0, GitRevLoglist::GetRefLog(_T("refs/heads/master"), revloglist, err));
435 ASSERT_EQ(6, revloglist.size());
436 EXPECT_TRUE(err.IsEmpty());
438 EXPECT_STREQ(_T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6"), revloglist[0].m_CommitHash.ToString());
439 EXPECT_STREQ(_T("refs/heads/master@{0}"), revloglist[0].m_Ref);
440 EXPECT_STREQ(_T("reset"), revloglist[0].m_RefAction);
441 //EXPECT_STREQ(_T("Sven Strickroth"), revloglist[0].GetCommitterName());
442 //EXPECT_STREQ(_T("email@cs-ware.de"), revloglist[0].GetCommitterEmail());
443 EXPECT_STREQ(_T("2015-03-16 12:59:51"), revloglist[0].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
444 EXPECT_STREQ(_T(" moving to 7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6"), revloglist[0].GetSubject());
446 EXPECT_STREQ(_T("aa5b97f89cea6863222823c8289ce392d06d1691"), revloglist[2].m_CommitHash.ToString());
447 EXPECT_STREQ(_T("refs/heads/master@{2}"), revloglist[2].m_Ref);
448 EXPECT_STREQ(_T("reset"), revloglist[2].m_RefAction);
449 //EXPECT_STREQ(_T("Dümmy User"), revloglist[2].GetCommitterName());
450 //EXPECT_STREQ(_T("dummy@example.com"), revloglist[2].GetCommitterEmail());
451 EXPECT_STREQ(_T("2015-03-16 12:59:07"), revloglist[2].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
452 EXPECT_STREQ(_T(" moving to aa5b97f89cea6863222823c8289ce392d06d1691"), revloglist[2].GetSubject());
454 EXPECT_STREQ(_T("df8019413c88d2aedbf33fc2dac3544312da4c18"), revloglist[3].m_CommitHash.ToString());
455 EXPECT_STREQ(_T("refs/heads/master@{3}"), revloglist[3].m_Ref);
456 EXPECT_STREQ(_T("commit (amend)"), revloglist[3].m_RefAction);
457 //EXPECT_STREQ(_T("Sven Strickroth"), revloglist[3].GetCommitterName());
458 //EXPECT_STREQ(_T("email@cs-ware.de"), revloglist[3].GetCommitterEmail());
459 EXPECT_STREQ(_T("2015-03-16 12:55:00"), revloglist[3].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
460 EXPECT_STREQ(_T(" Several actions"), revloglist[3].GetSubject());
462 EXPECT_STREQ(_T("32c344625f14ecb16b6f003a77eb7a3d2c15d470"), revloglist[4].m_CommitHash.ToString());
463 EXPECT_STREQ(_T("refs/heads/master@{4}"), revloglist[4].m_Ref);
464 EXPECT_STREQ(_T("commit"), revloglist[4].m_RefAction);
465 //EXPECT_STREQ(_T("Sven Strickroth"), revloglist[4].GetCommitterName());
466 //EXPECT_STREQ(_T("email@cs-ware.de"), revloglist[4].GetCommitterEmail());
467 EXPECT_STREQ(_T("2015-03-16 12:52:22"), revloglist[4].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
468 EXPECT_STREQ(_T(" renamed a file"), revloglist[4].GetSubject());
470 EXPECT_STREQ(_T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6"), revloglist[5].m_CommitHash.ToString());
471 EXPECT_STREQ(_T("refs/heads/master@{5}"), revloglist[5].m_Ref);
472 EXPECT_STREQ(_T("push"), revloglist[5].m_RefAction);
473 //EXPECT_STREQ(_T("Sven Strickroth"), revloglist[5].GetCommitterName());
474 //EXPECT_STREQ(_T("email@cs-ware.de"), revloglist[5].GetCommitterEmail());
475 EXPECT_STREQ(_T("2015-03-16 12:51:40"), revloglist[5].GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
476 EXPECT_STREQ(_T(""), revloglist[5].GetSubject());
479 TEST_P(GitRevLoglist2CBasicGitWithTestRepoFixture, GetReflog)
481 GetReflog();
484 TEST_P(GitRevLoglist2CBasicGitWithTestRepoBareFixture, GetReflog)
486 GetReflog();