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.
21 #include "RepositoryFixtures.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 static void GetRevParsingTests()
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());
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());
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());
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());
93 EXPECT_EQ(-1, rev
.GetCommit(_T("does-not-exist")));
94 EXPECT_FALSE(rev
.GetLastErr().IsEmpty());
95 EXPECT_TRUE(rev
.m_CommitHash
.IsEmpty());
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());
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());
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());
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());