1
// TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2015-2016, 2018 - 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 "GitStatus.h"
24 TEST(CGitHash
, Initial
)
27 EXPECT_TRUE(empty
.IsEmpty());
28 EXPECT_STREQ(L
"0000000000000000000000000000000000000000", GIT_REV_ZERO
);
29 EXPECT_STREQ(GIT_REV_ZERO
, empty
.ToString());
30 EXPECT_TRUE(empty
== empty
);
31 EXPECT_FALSE(empty
!= empty
);
34 hash
.ConvertFromStrA("8d1861316061748cfee7e075dc138287978102ab");
35 EXPECT_FALSE(hash
.IsEmpty());
36 EXPECT_STREQ(L
"8d1861316061748cfee7e075dc138287978102ab", hash
.ToString());
37 EXPECT_TRUE(hash
== hash
);
38 EXPECT_FALSE(hash
!= hash
);
39 EXPECT_FALSE(hash
== empty
);
40 EXPECT_TRUE(hash
!= empty
);
42 CGitHash
hash2(L
"8d1861316061748cfee7e075dc138287978102ab");
43 EXPECT_FALSE(hash2
.IsEmpty());
44 EXPECT_STREQ(L
"8d1861316061748cfee7e075dc138287978102ab", hash2
.ToString());
45 EXPECT_TRUE(hash2
== hash
);
46 EXPECT_FALSE(hash2
!= hash
);
47 EXPECT_FALSE(hash2
== empty
);
48 EXPECT_TRUE(hash2
!= empty
);
50 EXPECT_STREQ(GIT_REV_ZERO
, hash2
.ToString());
51 EXPECT_TRUE(hash2
== empty
);
52 EXPECT_FALSE(hash2
!= empty
);
53 EXPECT_TRUE(hash2
.IsEmpty());
55 unsigned char chararray
[20] = { 0x8D, 0x18, 0x61, 0x31, 0x60, 0x61, 0x74, 0x8C, 0xFE, 0xE7, 0xE0, 0x75, 0xDC, 0x13, 0x82, 0x87, 0x97, 0x81, 0x02, 0xAB };
56 CGitHash
hash3(chararray
);
57 EXPECT_FALSE(hash3
.IsEmpty());
58 EXPECT_STREQ(L
"8d1861316061748cfee7e075dc138287978102ab", hash3
.ToString());
59 EXPECT_TRUE(hash3
== hash
);
60 EXPECT_FALSE(hash3
!= hash
);
61 EXPECT_FALSE(hash3
== empty
);
62 EXPECT_TRUE(hash3
!= empty
);
65 hash4
= L
"8d1861316061748cfee7e075dc138287978102ab";
66 EXPECT_TRUE(hash4
== hash
);
70 EXPECT_TRUE(hash5
== hash
);
74 EXPECT_TRUE(hash6
== hash
);
76 CGitHash
hash7(L
"invalid");
77 EXPECT_TRUE(hash7
.IsEmpty());
79 CGitHash
hash8(L
"01234567");
80 EXPECT_TRUE(hash8
.IsEmpty());
83 TEST(CGitHash
, IsSHA1Valid
)
85 EXPECT_TRUE(CGitHash::IsValidSHA1(GIT_REV_ZERO
));
86 EXPECT_TRUE(CGitHash::IsValidSHA1(L
"8d1861316061748cfee7e075dc138287978102ab"));
87 EXPECT_TRUE(CGitHash::IsValidSHA1(L
"8d1861316061748cfee7E075dc138287978102ab"));
88 EXPECT_TRUE(CGitHash::IsValidSHA1(L
"8D1861316061748CFEE7E075DC138287978102AB"));
89 EXPECT_FALSE(CGitHash::IsValidSHA1(L
""));
90 EXPECT_FALSE(CGitHash::IsValidSHA1(L
"8d18613"));
91 EXPECT_FALSE(CGitHash::IsValidSHA1(L
"master"));
92 EXPECT_FALSE(CGitHash::IsValidSHA1(L
"refs/heads/master"));
93 EXPECT_FALSE(CGitHash::IsValidSHA1(L
"8d1861316061748cfee7e075dc138287978102az"));
96 TEST(CGitHash
, MatchesPrefix
)
98 CString prefix
= L
"3012b757c23d16cc915acf60f5e3922d0409187a";
99 CGitHash hash
= prefix
;
100 CGitHash prefixHash
= prefix
;
101 EXPECT_TRUE(hash
.MatchesPrefix(prefixHash
, prefix
, prefix
.GetLength()));
104 prefixHash
= L
"0000000000000000000000000000000000000000";
105 EXPECT_TRUE(hash
.MatchesPrefix(prefixHash
, prefix
, prefix
.GetLength()));
107 prefix
= L
"3012b757";
108 prefixHash
= L
"3012b75700000000000000000000000000000000";
109 EXPECT_TRUE(hash
.MatchesPrefix(prefixHash
, prefix
, prefix
.GetLength()));
111 prefix
= L
"3012b758";
112 prefixHash
= L
"3012b75800000000000000000000000000000000";
113 EXPECT_FALSE(hash
.MatchesPrefix(prefixHash
, prefix
, prefix
.GetLength()));
116 prefixHash
= L
"a000000000000000000000000000000000000000";
117 EXPECT_FALSE(hash
.MatchesPrefix(prefixHash
, prefix
, prefix
.GetLength()));
120 prefixHash
= L
"3012b75000000000000000000000000000000000";
121 EXPECT_TRUE(hash
.MatchesPrefix(prefixHash
, prefix
, prefix
.GetLength()));
124 prefixHash
= L
"3012b76000000000000000000000000000000000";
125 EXPECT_FALSE(hash
.MatchesPrefix(prefixHash
, prefix
, prefix
.GetLength()));
128 TEST(CGitHash
, stdhash
)
130 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(GIT_REV_ZERO
)), (size_t)0);
131 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"ffffffffffffffff000000000000000000000000")), SIZE_T_MAX
);
133 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"1000000000000000000000000000000000000000")), (size_t)16);
134 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0100000000000000000000000000000000000000")), (size_t)1);
135 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0010000000000000000000000000000000000000")), (size_t)4096);
136 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0001000000000000000000000000000000000000")), (size_t)256);
137 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0000100000000000000000000000000000000000")), (size_t)1048576);
138 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0000000100000000000000000000000000000000")), (size_t)16777216);
140 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0000000010000000000000000000000000000000")), (size_t)68719476736);
141 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0000000000000010000000000000000000000000")), (size_t)1152921504606846976);
142 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0000000000000001000000000000000000000000")), (size_t)72057594037927936);
144 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0000000010000000000000000000000000000000")), (size_t)0);
145 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0000000000000010000000000000000000000000")), (size_t)0);
146 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0000000000000001000000000000000000000000")), (size_t)0);
148 EXPECT_EQ(std::hash
<CGitHash
>()(CGitHash(L
"0000000000000000100000000000000000000000")), (size_t)0);