Add tests against GitRev and GitRevLoglist
[TortoiseGit.git] / test / UnitTests / GitRevTest.cpp
blobb10a258da3bdfd48f3d57266f7dfdf73bdaf8d6f
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 "GitRev.h"
24 class GitRevCBasicGitWithTestRepoFixture : public CBasicGitWithTestRepoFixture
28 class GitRevCBasicGitWithTestRepoBareFixture : public CBasicGitWithTestRepoBareFixture
32 INSTANTIATE_TEST_CASE_P(GitRev, GitRevCBasicGitWithTestRepoFixture, testing::Values(LIBGIT, LIBGIT2, LIBGIT2_ALL));
33 INSTANTIATE_TEST_CASE_P(GitRev, GitRevCBasicGitWithTestRepoBareFixture, testing::Values(LIBGIT, LIBGIT2, LIBGIT2_ALL));
35 void GetRevParsingTests()
37 GitRev rev;
38 EXPECT_TRUE(rev.m_CommitHash.IsEmpty());
39 EXPECT_EQ(0, rev.GetCommit(_T("HEAD")));
40 EXPECT_STREQ(_T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6"), rev.m_CommitHash.ToString());
41 EXPECT_STREQ(_T("Sven Strickroth"), rev.GetAuthorName());
42 EXPECT_STREQ(_T("email@cs-ware.de"), rev.GetAuthorEmail());
43 EXPECT_STREQ(_T("2015-03-07 18:03:58"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
44 EXPECT_STREQ(_T("Sven Strickroth"), rev.GetCommitterName());
45 EXPECT_STREQ(_T("email@cs-ware.de"), rev.GetCommitterEmail());
46 EXPECT_STREQ(_T("2015-03-07 18:03:58"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
47 EXPECT_STREQ(_T("Changed ASCII file"), rev.GetSubject());
48 EXPECT_STREQ(_T(""), rev.GetBody());
49 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
50 EXPECT_EQ(0, rev.ParentsCount());
51 EXPECT_EQ(0, rev.GetParentFromHash(rev.m_CommitHash));
52 ASSERT_EQ(1, rev.ParentsCount());
53 EXPECT_STREQ(_T("1fc3c9688e27596d8717b54f2939dc951568f6cb"), rev.m_ParentHash[0].ToString());
54 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
55 rev.Clear();
56 EXPECT_EQ(0, rev.GetCommit(GitRev::GetWorkingCopy()));
57 EXPECT_TRUE(rev.m_CommitHash.IsEmpty());
58 EXPECT_STREQ(_T(""), rev.GetAuthorName());
59 EXPECT_STREQ(_T(""), rev.GetAuthorEmail());
60 EXPECT_STREQ(_T(""), rev.GetCommitterName());
61 EXPECT_STREQ(_T(""), rev.GetCommitterEmail());
62 EXPECT_STREQ(_T("Working Copy"), rev.GetSubject());
63 EXPECT_STREQ(_T(""), rev.GetBody());
64 EXPECT_EQ(0, rev.ParentsCount());
65 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
66 rev.Clear();
67 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
68 EXPECT_EQ(0, rev.GetCommit(_T("aa5b97f89cea6863222823c8289ce392d06d1691")));
69 EXPECT_STREQ(_T("aa5b97f89cea6863222823c8289ce392d06d1691"), rev.m_CommitHash.ToString());
70 EXPECT_STREQ(_T("Another dummy with ümlaut"), rev.GetAuthorName());
71 EXPECT_STREQ(_T("anotherduemmy@example.com"), rev.GetAuthorEmail());
72 EXPECT_STREQ(_T("2015-03-14 22:30:06"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
73 EXPECT_STREQ(_T("Another dummy with ümlaut"), rev.GetCommitterName());
74 EXPECT_STREQ(_T("anotherduemmy@example.com"), rev.GetCommitterEmail());
75 EXPECT_STREQ(_T("2015-03-14 22:30:06"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
76 EXPECT_STREQ(_T("Subject line"), rev.GetSubject());
77 EXPECT_STREQ(_T("\nalso some more lines\n\nhere in body\n\nSigned-off-by: Another dummy with ümlaut <anotherduemmy@example.com>\n"), rev.GetBody());
78 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
79 rev.Clear();
80 EXPECT_TRUE(rev.m_CommitHash.IsEmpty());
81 EXPECT_EQ(0, rev.GetCommit(_T("1fc3c9688e27596d8717b54f2939dc951568f6cb")));
82 EXPECT_STREQ(_T("1fc3c9688e27596d8717b54f2939dc951568f6cb"), rev.m_CommitHash.ToString());
83 EXPECT_STREQ(_T("Some other User"), rev.GetAuthorName());
84 EXPECT_STREQ(_T("dummy@example.com"), rev.GetAuthorEmail());
85 EXPECT_STREQ(_T("2015-03-07 18:03:39"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
86 EXPECT_STREQ(_T("Sven Strickroth"), rev.GetCommitterName());
87 EXPECT_STREQ(_T("email@cs-ware.de"), rev.GetCommitterEmail());
88 EXPECT_STREQ(_T("2015-03-07 18:03:39"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
89 EXPECT_STREQ(_T("Added an ascii file"), rev.GetSubject());
90 EXPECT_STREQ(_T(""), rev.GetBody());
91 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
92 rev.Clear();
93 EXPECT_EQ(-1, rev.GetCommit(_T("does-not-exist")));
94 EXPECT_FALSE(rev.GetLastErr().IsEmpty());
95 EXPECT_TRUE(rev.m_CommitHash.IsEmpty());
96 rev.Clear();
97 CGitHash hash(_T("aa5b97f89cea6863222823c8289ce392d06d1691"));
98 EXPECT_EQ(0, rev.GetCommitFromHash(hash));
99 EXPECT_EQ(hash, rev.m_CommitHash);
100 EXPECT_STREQ(_T("Another dummy with ümlaut"), rev.GetAuthorName());
101 EXPECT_STREQ(_T("anotherduemmy@example.com"), rev.GetAuthorEmail());
102 EXPECT_STREQ(_T("2015-03-14 22:30:06"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
103 EXPECT_STREQ(_T("Another dummy with ümlaut"), rev.GetCommitterName());
104 EXPECT_STREQ(_T("anotherduemmy@example.com"), rev.GetCommitterEmail());
105 EXPECT_STREQ(_T("2015-03-14 22:30:06"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
106 EXPECT_STREQ(_T("Subject line"), rev.GetSubject());
107 EXPECT_STREQ(_T("\nalso some more lines\n\nhere in body\n\nSigned-off-by: Another dummy with ümlaut <anotherduemmy@example.com>\n"), rev.GetBody());
108 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
109 rev.Clear();
110 EXPECT_EQ(0, rev.GetCommit(_T("8d1ebbcc7eeb63af10ff8bcf7712afb9fcc90b8a")));
111 EXPECT_STREQ(_T("8d1ebbcc7eeb63af10ff8bcf7712afb9fcc90b8a"), rev.m_CommitHash.ToString());
112 EXPECT_STREQ(_T("Sven Strickroth"), rev.GetAuthorName());
113 EXPECT_STREQ(_T("email@cs-ware.de"), rev.GetAuthorEmail());
114 EXPECT_STREQ(_T("2015-03-04 17:50:24"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
115 EXPECT_STREQ(_T("Sven Strickroth"), rev.GetCommitterName());
116 EXPECT_STREQ(_T("email@cs-ware.de"), rev.GetCommitterEmail());
117 EXPECT_STREQ(_T("2015-03-04 17:50:24"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
118 EXPECT_STREQ(_T("Merge branch 'for-merge' into subdir/branch"), rev.GetSubject());
119 EXPECT_STREQ(_T(""), rev.GetBody());
120 EXPECT_EQ(0, rev.ParentsCount());
121 EXPECT_EQ(0, rev.GetParentFromHash(rev.m_CommitHash));
122 ASSERT_EQ(2, rev.ParentsCount());
123 EXPECT_STREQ(_T("3686b9cf74f1a4ef96d6bfe736595ef9abf0fb8d"), rev.m_ParentHash[0].ToString());
124 EXPECT_STREQ(_T("1ce788330fd3a306c8ad37654063ceee13a7f172"), rev.m_ParentHash[1].ToString());
125 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
126 rev.Clear();
127 EXPECT_TRUE(rev.m_CommitHash.IsEmpty());
128 EXPECT_EQ(0, rev.GetCommit(_T("844309789a13614b52d5e7cbfe6350dd73d1dc72"))); // root-commit
129 EXPECT_STREQ(_T("844309789a13614b52d5e7cbfe6350dd73d1dc72"), rev.m_CommitHash.ToString());
130 EXPECT_STREQ(_T("Sven Strickroth"), rev.GetAuthorName());
131 EXPECT_STREQ(_T("email@cs-ware.de"), rev.GetAuthorEmail());
132 EXPECT_STREQ(_T("2015-03-04 17:35:13"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
133 EXPECT_STREQ(_T("Sven Strickroth"), rev.GetCommitterName());
134 EXPECT_STREQ(_T("email@cs-ware.de"), rev.GetCommitterEmail());
135 EXPECT_STREQ(_T("2015-03-04 17:35:13"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
136 EXPECT_STREQ(_T("added ansi file"), rev.GetSubject());
137 EXPECT_STREQ(_T(""), rev.GetBody());
138 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
139 EXPECT_EQ(0, rev.ParentsCount());
140 EXPECT_EQ(0, rev.GetParentFromHash(rev.m_CommitHash));
141 EXPECT_EQ(0, rev.ParentsCount());
142 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
143 rev.Clear();
144 // GPG signed commit which was also amended with different dates
145 EXPECT_EQ(0, rev.GetCommit(_T("subdir/branch")));
146 EXPECT_STREQ(_T("4c5c93d2a0b368bc4570d5ec02ab03b9c4334d44"), rev.m_CommitHash.ToString());
147 EXPECT_STREQ(_T("Sven Strickroth"), rev.GetAuthorName());
148 EXPECT_STREQ(_T("email@cs-ware.de"), rev.GetAuthorEmail());
149 EXPECT_STREQ(_T("2015-03-16 12:52:29"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
150 EXPECT_STREQ(_T("Sven Strickroth"), rev.GetCommitterName());
151 EXPECT_STREQ(_T("email@cs-ware.de"), rev.GetCommitterEmail());
152 EXPECT_STREQ(_T("2015-03-16 13:06:08"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
153 EXPECT_STREQ(_T("Several actions"), rev.GetSubject());
154 EXPECT_STREQ(_T("\n* amended with different date\n* make utf16-be-nobom.txt a symlink ti ascii.txt\n* remove utf8-bom.txt\n* Copied ascii.txt\n\nSigned-off-by: Sven Strickroth <email@cs-ware.de>\n"), rev.GetBody());
155 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
156 EXPECT_EQ(0, rev.ParentsCount());
157 EXPECT_EQ(0, rev.GetParentFromHash(rev.m_CommitHash));
158 ASSERT_EQ(1, rev.ParentsCount());
159 EXPECT_STREQ(_T("aa5b97f89cea6863222823c8289ce392d06d1691"), rev.m_ParentHash[0].ToString());
160 EXPECT_TRUE(rev.GetLastErr().IsEmpty());
163 TEST_P(GitRevCBasicGitWithTestRepoFixture, GitRevParsing)
165 GetRevParsingTests();
168 TEST_P(GitRevCBasicGitWithTestRepoBareFixture, GitRevParsing)
170 GetRevParsingTests();
173 TEST(GitRev, Constants)
175 EXPECT_STREQ(_T("HEAD"), GitRev::GetHead());
176 EXPECT_STREQ(_T("0000000000000000000000000000000000000000"), GitRev::GetWorkingCopy());