View Javadoc
1   /*
2    * Copyright (C) 2008, Google Inc. and others
3    *
4    * This program and the accompanying materials are made available under the
5    * terms of the Eclipse Distribution License v. 1.0 which is available at
6    * https://www.eclipse.org/org/documents/edl-v10.php.
7    *
8    * SPDX-License-Identifier: BSD-3-Clause
9    */
10  
11  package org.eclipse.jgit.lib;
12  
13  import static org.junit.Assert.assertEquals;
14  import static org.junit.Assert.assertFalse;
15  import static org.junit.Assert.assertNotNull;
16  import static org.junit.Assert.assertNotSame;
17  import static org.junit.Assert.assertNull;
18  import static org.junit.Assert.assertTrue;
19  
20  import org.junit.Test;
21  
22  public class AbbreviatedObjectIdTest {
23  	@Test
24  	public void testEmpty_FromByteArray() {
25  		final AbbreviatedObjectId i;
26  		i = AbbreviatedObjectId.fromString(new byte[] {}, 0, 0);
27  		assertNotNull(i);
28  		assertEquals(0, i.length());
29  		assertFalse(i.isComplete());
30  		assertEquals("", i.name());
31  	}
32  
33  	@Test
34  	public void testEmpty_FromString() {
35  		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString("");
36  		assertNotNull(i);
37  		assertEquals(0, i.length());
38  		assertFalse(i.isComplete());
39  		assertEquals("", i.name());
40  	}
41  
42  	@Test
43  	public void testFull_FromByteArray() {
44  		final String s = "7b6e8067ec96acef9a4184b43210d583b6d2f99a";
45  		final byte[] b = Constants.encodeASCII(s);
46  		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(b, 0,
47  				b.length);
48  		assertNotNull(i);
49  		assertEquals(s.length(), i.length());
50  		assertTrue(i.isComplete());
51  		assertEquals(s, i.name());
52  
53  		final ObjectId f = i.toObjectId();
54  		assertNotNull(f);
55  		assertEquals(ObjectId.fromString(s), f);
56  	}
57  
58  	@Test
59  	public void testFull_FromString() {
60  		final String s = "7b6e8067ec96acef9a4184b43210d583b6d2f99a";
61  		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
62  		assertNotNull(i);
63  		assertEquals(s.length(), i.length());
64  		assertTrue(i.isComplete());
65  		assertEquals(s, i.name());
66  
67  		final ObjectId f = i.toObjectId();
68  		assertNotNull(f);
69  		assertEquals(ObjectId.fromString(s), f);
70  	}
71  
72  	@Test
73  	public void test1_FromString() {
74  		final String s = "7";
75  		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
76  		assertNotNull(i);
77  		assertEquals(s.length(), i.length());
78  		assertFalse(i.isComplete());
79  		assertEquals(s, i.name());
80  		assertNull(i.toObjectId());
81  	}
82  
83  	@Test
84  	public void test2_FromString() {
85  		final String s = "7b";
86  		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
87  		assertNotNull(i);
88  		assertEquals(s.length(), i.length());
89  		assertFalse(i.isComplete());
90  		assertEquals(s, i.name());
91  		assertNull(i.toObjectId());
92  	}
93  
94  	@Test
95  	public void test3_FromString() {
96  		final String s = "7b6";
97  		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
98  		assertNotNull(i);
99  		assertEquals(s.length(), i.length());
100 		assertFalse(i.isComplete());
101 		assertEquals(s, i.name());
102 		assertNull(i.toObjectId());
103 	}
104 
105 	@Test
106 	public void test4_FromString() {
107 		final String s = "7b6e";
108 		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
109 		assertNotNull(i);
110 		assertEquals(s.length(), i.length());
111 		assertFalse(i.isComplete());
112 		assertEquals(s, i.name());
113 		assertNull(i.toObjectId());
114 	}
115 
116 	@Test
117 	public void test5_FromString() {
118 		final String s = "7b6e8";
119 		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
120 		assertNotNull(i);
121 		assertEquals(s.length(), i.length());
122 		assertFalse(i.isComplete());
123 		assertEquals(s, i.name());
124 		assertNull(i.toObjectId());
125 	}
126 
127 	@Test
128 	public void test6_FromString() {
129 		final String s = "7b6e80";
130 		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
131 		assertNotNull(i);
132 		assertEquals(s.length(), i.length());
133 		assertFalse(i.isComplete());
134 		assertEquals(s, i.name());
135 		assertNull(i.toObjectId());
136 	}
137 
138 	@Test
139 	public void test7_FromString() {
140 		final String s = "7b6e806";
141 		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
142 		assertNotNull(i);
143 		assertEquals(s.length(), i.length());
144 		assertFalse(i.isComplete());
145 		assertEquals(s, i.name());
146 		assertNull(i.toObjectId());
147 	}
148 
149 	@Test
150 	public void test8_FromString() {
151 		final String s = "7b6e8067";
152 		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
153 		assertNotNull(i);
154 		assertEquals(s.length(), i.length());
155 		assertFalse(i.isComplete());
156 		assertEquals(s, i.name());
157 		assertNull(i.toObjectId());
158 	}
159 
160 	@Test
161 	public void test9_FromString() {
162 		final String s = "7b6e8067e";
163 		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
164 		assertNotNull(i);
165 		assertEquals(s.length(), i.length());
166 		assertFalse(i.isComplete());
167 		assertEquals(s, i.name());
168 		assertNull(i.toObjectId());
169 	}
170 
171 	@Test
172 	public void test17_FromString() {
173 		final String s = "7b6e8067ec96acef9";
174 		final AbbreviatedObjectId i = AbbreviatedObjectId.fromString(s);
175 		assertNotNull(i);
176 		assertEquals(s.length(), i.length());
177 		assertFalse(i.isComplete());
178 		assertEquals(s, i.name());
179 		assertNull(i.toObjectId());
180 	}
181 
182 	@Test
183 	public void testEquals_Short8() {
184 		final String s = "7b6e8067";
185 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(s);
186 		final AbbreviatedObjectId b = AbbreviatedObjectId.fromString(s);
187 		assertNotSame(a, b);
188 		assertTrue(a.hashCode() == b.hashCode());
189 		assertEquals(b, a);
190 		assertEquals(a, b);
191 	}
192 
193 	@Test
194 	public void testEquals_Short4() {
195 		final String s = "7b6e";
196 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(s);
197 		final AbbreviatedObjectId b = AbbreviatedObjectId.fromString(s);
198 		assertNotSame(a, b);
199 		assertTrue(a.hashCode() != 0);
200 		assertTrue(a.hashCode() == b.hashCode());
201 		assertEquals(b, a);
202 		assertEquals(a, b);
203 	}
204 
205 	@Test
206 	public void testEquals_Full() {
207 		final String s = "7b6e8067ec96acef9a4184b43210d583b6d2f99a";
208 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(s);
209 		final AbbreviatedObjectId b = AbbreviatedObjectId.fromString(s);
210 		assertNotSame(a, b);
211 		assertTrue(a.hashCode() == b.hashCode());
212 		assertEquals(b, a);
213 		assertEquals(a, b);
214 	}
215 
216 	@Test
217 	public void testNotEquals_SameLength() {
218 		final String sa = "7b6e8067";
219 		final String sb = "7b6e806e";
220 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(sa);
221 		final AbbreviatedObjectId b = AbbreviatedObjectId.fromString(sb);
222 		assertFalse(a.equals(b));
223 		assertFalse(b.equals(a));
224 	}
225 
226 	@Test
227 	public void testNotEquals_DiffLength() {
228 		final String sa = "7b6e8067abcd";
229 		final String sb = "7b6e8067";
230 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(sa);
231 		final AbbreviatedObjectId b = AbbreviatedObjectId.fromString(sb);
232 		assertFalse(a.equals(b));
233 		assertFalse(b.equals(a));
234 	}
235 
236 	@Test
237 	public void testPrefixCompare_Full() {
238 		final String s1 = "7b6e8067ec96acef9a4184b43210d583b6d2f99a";
239 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(s1);
240 		final ObjectId i1 = ObjectId.fromString(s1);
241 		assertEquals(0, a.prefixCompare(i1));
242 		assertTrue(i1.startsWith(a));
243 
244 		final String s2 = "7b6e8067ec96acef9a4184b43210d583b6d2f99b";
245 		final ObjectId i2 = ObjectId.fromString(s2);
246 		assertTrue(a.prefixCompare(i2) < 0);
247 		assertFalse(i2.startsWith(a));
248 
249 		final String s3 = "7b6e8067ec96acef9a4184b43210d583b6d2f999";
250 		final ObjectId i3 = ObjectId.fromString(s3);
251 		assertTrue(a.prefixCompare(i3) > 0);
252 		assertFalse(i3.startsWith(a));
253 	}
254 
255 	@Test
256 	public void testPrefixCompare_1() {
257 		final String sa = "7";
258 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(sa);
259 
260 		final String s1 = "7b6e8067ec96acef9a4184b43210d583b6d2f99a";
261 		final ObjectId i1 = ObjectId.fromString(s1);
262 		assertEquals(0, a.prefixCompare(i1));
263 		assertTrue(i1.startsWith(a));
264 
265 		final String s2 = "8b6e8067ec96acef9a4184b43210d583b6d2f99a";
266 		final ObjectId i2 = ObjectId.fromString(s2);
267 		assertTrue(a.prefixCompare(i2) < 0);
268 		assertFalse(i2.startsWith(a));
269 
270 		final String s3 = "6b6e8067ec96acef9a4184b43210d583b6d2f99a";
271 		final ObjectId i3 = ObjectId.fromString(s3);
272 		assertTrue(a.prefixCompare(i3) > 0);
273 		assertFalse(i3.startsWith(a));
274 	}
275 
276 	@Test
277 	public void testPrefixCompare_7() {
278 		final String sa = "7b6e806";
279 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(sa);
280 
281 		final String s1 = "7b6e8067ec96acef9a4184b43210d583b6d2f99a";
282 		final ObjectId i1 = ObjectId.fromString(s1);
283 		assertEquals(0, a.prefixCompare(i1));
284 		assertTrue(i1.startsWith(a));
285 
286 		final String s2 = "7b6e8167ec86acef9a4184b43210d583b6d2f99a";
287 		final ObjectId i2 = ObjectId.fromString(s2);
288 		assertTrue(a.prefixCompare(i2) < 0);
289 		assertFalse(i2.startsWith(a));
290 
291 		final String s3 = "7b6e8057eca6acef9a4184b43210d583b6d2f99a";
292 		final ObjectId i3 = ObjectId.fromString(s3);
293 		assertTrue(a.prefixCompare(i3) > 0);
294 		assertFalse(i3.startsWith(a));
295 	}
296 
297 	@Test
298 	public void testPrefixCompare_8() {
299 		final String sa = "7b6e8067";
300 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(sa);
301 
302 		final String s1 = "7b6e8067ec96acef9a4184b43210d583b6d2f99a";
303 		final ObjectId i1 = ObjectId.fromString(s1);
304 		assertEquals(0, a.prefixCompare(i1));
305 		assertTrue(i1.startsWith(a));
306 
307 		final String s2 = "7b6e8167ec86acef9a4184b43210d583b6d2f99a";
308 		final ObjectId i2 = ObjectId.fromString(s2);
309 		assertTrue(a.prefixCompare(i2) < 0);
310 		assertFalse(i2.startsWith(a));
311 
312 		final String s3 = "7b6e8057eca6acef9a4184b43210d583b6d2f99a";
313 		final ObjectId i3 = ObjectId.fromString(s3);
314 		assertTrue(a.prefixCompare(i3) > 0);
315 		assertFalse(i3.startsWith(a));
316 	}
317 
318 	@Test
319 	public void testPrefixCompare_9() {
320 		final String sa = "7b6e8067e";
321 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(sa);
322 
323 		final String s1 = "7b6e8067ec96acef9a4184b43210d583b6d2f99a";
324 		final ObjectId i1 = ObjectId.fromString(s1);
325 		assertEquals(0, a.prefixCompare(i1));
326 		assertTrue(i1.startsWith(a));
327 
328 		final String s2 = "7b6e8167ec86acef9a4184b43210d583b6d2f99a";
329 		final ObjectId i2 = ObjectId.fromString(s2);
330 		assertTrue(a.prefixCompare(i2) < 0);
331 		assertFalse(i2.startsWith(a));
332 
333 		final String s3 = "7b6e8057eca6acef9a4184b43210d583b6d2f99a";
334 		final ObjectId i3 = ObjectId.fromString(s3);
335 		assertTrue(a.prefixCompare(i3) > 0);
336 		assertFalse(i3.startsWith(a));
337 	}
338 
339 	@Test
340 	public void testPrefixCompare_17() {
341 		final String sa = "7b6e8067ec96acef9";
342 		final AbbreviatedObjectId a = AbbreviatedObjectId.fromString(sa);
343 
344 		final String s1 = "7b6e8067ec96acef9a4184b43210d583b6d2f99a";
345 		final ObjectId i1 = ObjectId.fromString(s1);
346 		assertEquals(0, a.prefixCompare(i1));
347 		assertTrue(i1.startsWith(a));
348 
349 		final String s2 = "7b6e8067eca6acef9a4184b43210d583b6d2f99a";
350 		final ObjectId i2 = ObjectId.fromString(s2);
351 		assertTrue(a.prefixCompare(i2) < 0);
352 		assertFalse(i2.startsWith(a));
353 
354 		final String s3 = "7b6e8067ec86acef9a4184b43210d583b6d2f99a";
355 		final ObjectId i3 = ObjectId.fromString(s3);
356 		assertTrue(a.prefixCompare(i3) > 0);
357 		assertFalse(i3.startsWith(a));
358 	}
359 
360 	@Test
361 	public void testIsId() {
362 		// These are all too short.
363 		assertFalse(AbbreviatedObjectId.isId(""));
364 		assertFalse(AbbreviatedObjectId.isId("a"));
365 
366 		// These are too long.
367 		assertFalse(AbbreviatedObjectId.isId(ObjectId.fromString(
368 				"7b6e8067ec86acef9a4184b43210d583b6d2f99a").name()
369 				+ "0"));
370 		assertFalse(AbbreviatedObjectId.isId(ObjectId.fromString(
371 				"7b6e8067ec86acef9a4184b43210d583b6d2f99a").name()
372 				+ "c0ffee"));
373 
374 		// These contain non-hex characters.
375 		assertFalse(AbbreviatedObjectId.isId("01notahexstring"));
376 
377 		// These should all work.
378 		assertTrue(AbbreviatedObjectId.isId("ab"));
379 		assertTrue(AbbreviatedObjectId.isId("abc"));
380 		assertTrue(AbbreviatedObjectId.isId("abcd"));
381 		assertTrue(AbbreviatedObjectId.isId("abcd0"));
382 		assertTrue(AbbreviatedObjectId.isId("abcd09"));
383 		assertTrue(AbbreviatedObjectId.isId(ObjectId.fromString(
384 				"7b6e8067ec86acef9a4184b43210d583b6d2f99a").name()));
385 	}
386 }