1
2
3
4
5
6
7
8
9
10
11 package org.eclipse.jgit.lfs.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 import static org.junit.Assert.fail;
20
21 import org.eclipse.jgit.lfs.test.LongObjectIdTestUtils;
22 import org.junit.Test;
23
24
25
26
27 public class AbbreviatedLongObjectIdTest {
28 @Test
29 public void testEmpty_FromByteArray() {
30 final AbbreviatedLongObjectId i;
31 i = AbbreviatedLongObjectId.fromString(new byte[] {}, 0, 0);
32 assertNotNull(i);
33 assertEquals(0, i.length());
34 assertFalse(i.isComplete());
35 assertEquals("", i.name());
36 }
37
38 @Test
39 public void testEmpty_FromString() {
40 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId
41 .fromString("");
42 assertNotNull(i);
43 assertEquals(0, i.length());
44 assertFalse(i.isComplete());
45 assertEquals("", i.name());
46 }
47
48 @Test
49 public void testFull_FromByteArray() {
50 final String s = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
51 final byte[] b = org.eclipse.jgit.lib.Constants.encodeASCII(s);
52 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(b,
53 0, b.length);
54 assertNotNull(i);
55 assertEquals(s.length(), i.length());
56 assertTrue(i.isComplete());
57 assertEquals(s, i.name());
58
59 final LongObjectId f = i.toLongObjectId();
60 assertNotNull(f);
61 assertEquals(LongObjectId.fromString(s), f);
62 assertEquals(f.hashCode(), i.hashCode());
63 }
64
65 @Test
66 public void testFull_FromString() {
67 final String s = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
68 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
69 assertNotNull(i);
70 assertEquals(s.length(), i.length());
71 assertTrue(i.isComplete());
72 assertEquals(s, i.name());
73
74 final LongObjectId f = i.toLongObjectId();
75 assertNotNull(f);
76 assertEquals(LongObjectId.fromString(s), f);
77 assertEquals(f.hashCode(), i.hashCode());
78 }
79
80 @Test
81 public void test1_FromString() {
82 final String s = "2";
83 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
84 assertNotNull(i);
85 assertEquals(s.length(), i.length());
86 assertFalse(i.isComplete());
87 assertEquals(s, i.name());
88 assertNull(i.toLongObjectId());
89 }
90
91 @Test
92 public void test2_FromString() {
93 final String s = "27";
94 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
95 assertNotNull(i);
96 assertEquals(s.length(), i.length());
97 assertFalse(i.isComplete());
98 assertEquals(s, i.name());
99 assertNull(i.toLongObjectId());
100 }
101
102 @Test
103 public void test3_FromString() {
104 final String s = "27e";
105 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
106 assertNotNull(i);
107 assertEquals(s.length(), i.length());
108 assertFalse(i.isComplete());
109 assertEquals(s, i.name());
110 assertNull(i.toLongObjectId());
111 }
112
113 @Test
114 public void test4_FromString() {
115 final String s = "27e1";
116 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
117 assertNotNull(i);
118 assertEquals(s.length(), i.length());
119 assertFalse(i.isComplete());
120 assertEquals(s, i.name());
121 assertNull(i.toLongObjectId());
122 }
123
124 @Test
125 public void test5_FromString() {
126 final String s = "27e15";
127 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
128 assertNotNull(i);
129 assertEquals(s.length(), i.length());
130 assertFalse(i.isComplete());
131 assertEquals(s, i.name());
132 assertNull(i.toLongObjectId());
133 }
134
135 @Test
136 public void test6_FromString() {
137 final String s = "27e15b";
138 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
139 assertNotNull(i);
140 assertEquals(s.length(), i.length());
141 assertFalse(i.isComplete());
142 assertEquals(s, i.name());
143 assertNull(i.toLongObjectId());
144 }
145
146 @Test
147 public void test7_FromString() {
148 final String s = "27e15b7";
149 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
150 assertNotNull(i);
151 assertEquals(s.length(), i.length());
152 assertFalse(i.isComplete());
153 assertEquals(s, i.name());
154 assertNull(i.toLongObjectId());
155 }
156
157 @Test
158 public void test8_FromString() {
159 final String s = "27e15b72";
160 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
161 assertNotNull(i);
162 assertEquals(s.length(), i.length());
163 assertFalse(i.isComplete());
164 assertEquals(s, i.name());
165 assertNull(i.toLongObjectId());
166 }
167
168 @Test
169 public void test9_FromString() {
170 final String s = "27e15b729";
171 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
172 assertNotNull(i);
173 assertEquals(s.length(), i.length());
174 assertFalse(i.isComplete());
175 assertEquals(s, i.name());
176 assertNull(i.toLongObjectId());
177 }
178
179 @Test
180 public void test15_FromString() {
181 final String s = "27e15b72937fc8f";
182 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
183 assertNotNull(i);
184 assertEquals(s.length(), i.length());
185 assertFalse(i.isComplete());
186 assertEquals(s, i.name());
187 assertNull(i.toLongObjectId());
188 }
189
190 @Test
191 public void test16_FromString() {
192 final String s = "27e15b72937fc8f5";
193 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
194 assertNotNull(i);
195 assertEquals(s.length(), i.length());
196 assertFalse(i.isComplete());
197 assertEquals(s, i.name());
198 assertNull(i.toLongObjectId());
199 }
200
201 @Test
202 public void test17_FromString() {
203 final String s = "27e15b72937fc8f55";
204 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
205 assertNotNull(i);
206 assertEquals(s.length(), i.length());
207 assertFalse(i.isComplete());
208 assertEquals(s, i.name());
209 assertNull(i.toLongObjectId());
210 }
211
212 @Test
213 public void test33_FromString() {
214 final String s = "27e15b72937fc8f558da24ac3d50ec203";
215 final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
216 assertNotNull(i);
217 assertEquals(s.length(), i.length());
218 assertFalse(i.isComplete());
219 assertEquals(s, i.name());
220 assertNull(i.toLongObjectId());
221 }
222
223 @Test
224 public void testEquals_Short() {
225 final String s = "27e15b72";
226 final AbbreviatedLongObjectId a = AbbreviatedLongObjectId.fromString(s);
227 final AbbreviatedLongObjectId b = AbbreviatedLongObjectId.fromString(s);
228 assertNotSame(a, b);
229 assertTrue(a.hashCode() == b.hashCode());
230 assertEquals(b, a);
231 assertEquals(a, b);
232 }
233
234 @Test
235 public void testEquals_Full() {
236 final String s = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
237 final AbbreviatedLongObjectId a = AbbreviatedLongObjectId.fromString(s);
238 final AbbreviatedLongObjectId b = AbbreviatedLongObjectId.fromString(s);
239 assertNotSame(a, b);
240 assertTrue(a.hashCode() == b.hashCode());
241 assertEquals(b, a);
242 assertEquals(a, b);
243 }
244
245 @Test
246 public void testNotEquals_SameLength() {
247 final String sa = "27e15b72";
248 final String sb = "27e15b7f";
249 final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
250 .fromString(sa);
251 final AbbreviatedLongObjectId b = AbbreviatedLongObjectId
252 .fromString(sb);
253 assertFalse(a.equals(b));
254 assertFalse(b.equals(a));
255 }
256
257 @Test
258 public void testNotEquals_DiffLength() {
259 final String sa = "27e15b72abcd";
260 final String sb = "27e15b72";
261 final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
262 .fromString(sa);
263 final AbbreviatedLongObjectId b = AbbreviatedLongObjectId
264 .fromString(sb);
265 assertFalse(a.equals(b));
266 assertFalse(b.equals(a));
267 }
268
269 @Test
270 public void testPrefixCompare_Full() {
271 final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
272 final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
273 .fromString(s1);
274 final LongObjectId i1 = LongObjectId.fromString(s1);
275 assertEquals(0, a.prefixCompare(i1));
276 assertTrue(i1.startsWith(a));
277
278 final String s2 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b11";
279 final LongObjectId i2 = LongObjectId.fromString(s2);
280 assertTrue(a.prefixCompare(i2) < 0);
281 assertFalse(i2.startsWith(a));
282
283 final String s3 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b0f";
284 final LongObjectId i3 = LongObjectId.fromString(s3);
285 assertTrue(a.prefixCompare(i3) > 0);
286 assertFalse(i3.startsWith(a));
287 }
288
289 @Test
290 public void testPrefixCompare_1() {
291 final String sa = "2";
292 final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
293 .fromString(sa);
294
295 final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
296 final LongObjectId i1 = LongObjectId.fromString(s1);
297 assertEquals(0, a.prefixCompare(i1));
298 assertTrue(i1.startsWith(a));
299
300 final String s2 = "37e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
301 final LongObjectId i2 = LongObjectId.fromString(s2);
302 assertTrue(a.prefixCompare(i2) < 0);
303 assertFalse(i2.startsWith(a));
304
305 final String s3 = "17e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
306 final LongObjectId i3 = LongObjectId.fromString(s3);
307 assertTrue(a.prefixCompare(i3) > 0);
308 assertFalse(i3.startsWith(a));
309 }
310
311 @Test
312 public void testPrefixCompare_15() {
313 final String sa = "27e15b72937fc8f";
314 final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
315 .fromString(sa);
316
317 final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
318 final LongObjectId i1 = LongObjectId.fromString(s1);
319 assertEquals(0, a.prefixCompare(i1));
320 assertTrue(i1.startsWith(a));
321
322 final String s2 = "27e15b72937fc90558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
323 final LongObjectId i2 = LongObjectId.fromString(s2);
324 assertTrue(a.prefixCompare(i2) < 0);
325 assertFalse(i2.startsWith(a));
326
327 final String s3 = "27e15b72937fc8e558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
328 final LongObjectId i3 = LongObjectId.fromString(s3);
329 assertTrue(a.prefixCompare(i3) > 0);
330 assertFalse(i3.startsWith(a));
331 }
332
333 @Test
334 public void testPrefixCompare_16() {
335 final String sa = "27e15b72937fc8f5";
336 final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
337 .fromString(sa);
338
339 final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
340 final LongObjectId i1 = LongObjectId.fromString(s1);
341 assertEquals(0, a.prefixCompare(i1));
342 assertTrue(i1.startsWith(a));
343
344 final String s2 = "27e15b72937fc8f658da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
345 final LongObjectId i2 = LongObjectId.fromString(s2);
346 assertTrue(a.prefixCompare(i2) < 0);
347 assertFalse(i2.startsWith(a));
348
349 final String s3 = "27e15b72937fc8f458da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
350 final LongObjectId i3 = LongObjectId.fromString(s3);
351 assertTrue(a.prefixCompare(i3) > 0);
352 assertFalse(i3.startsWith(a));
353 }
354
355 @Test
356 public void testPrefixCompare_17() {
357 final String sa = "27e15b72937fc8f55";
358 final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
359 .fromString(sa);
360
361 final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
362 final LongObjectId i1 = LongObjectId.fromString(s1);
363 assertEquals(0, a.prefixCompare(i1));
364 assertTrue(i1.startsWith(a));
365
366 final String s2 = "27e15b72937fc8f568da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
367 final LongObjectId i2 = LongObjectId.fromString(s2);
368 assertTrue(a.prefixCompare(i2) < 0);
369 assertFalse(i2.startsWith(a));
370
371 final String s3 = "27e15b72937fc8f548da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
372 final LongObjectId i3 = LongObjectId.fromString(s3);
373 assertTrue(a.prefixCompare(i3) > 0);
374 assertFalse(i3.startsWith(a));
375 }
376
377 @Test
378 public void testPrefixCompare_33() {
379 final String sa = "27e15b72937fc8f558da24ac3d50ec203";
380 final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
381 .fromString(sa);
382
383 final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
384 final LongObjectId i1 = LongObjectId.fromString(s1);
385 assertEquals(0, a.prefixCompare(i1));
386 assertTrue(i1.startsWith(a));
387
388 final String s2 = "27e15b72937fc8f558da24ac3d50ec20402a4cf21e33b87ae8e4ce90e89c4b10";
389 final LongObjectId i2 = LongObjectId.fromString(s2);
390 assertTrue(a.prefixCompare(i2) < 0);
391 assertFalse(i2.startsWith(a));
392
393 final String s3 = "27e15b72937fc8f558da24ac3d50ec20202a4cf21e33b87ae8e4ce90e89c4b10";
394 final LongObjectId i3 = LongObjectId.fromString(s3);
395 assertTrue(a.prefixCompare(i3) > 0);
396 assertFalse(i3.startsWith(a));
397 }
398
399 @Test
400 public void testIsId() {
401
402 assertFalse(AbbreviatedLongObjectId.isId(""));
403 assertFalse(AbbreviatedLongObjectId.isId("a"));
404
405
406 assertFalse(AbbreviatedLongObjectId.isId(LongObjectId
407 .fromString(
408 "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10")
409 .name() + "0"));
410 assertFalse(AbbreviatedLongObjectId.isId(LongObjectId
411 .fromString(
412 "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10")
413 .name() + "c0ffee"));
414
415
416 assertFalse(AbbreviatedLongObjectId.isId("01notahexstring"));
417
418
419 assertTrue(AbbreviatedLongObjectId.isId("ab"));
420 assertTrue(AbbreviatedLongObjectId.isId("abc"));
421 assertTrue(AbbreviatedLongObjectId.isId("abcd"));
422 assertTrue(AbbreviatedLongObjectId.isId("abcd0"));
423 assertTrue(AbbreviatedLongObjectId.isId("abcd09"));
424 assertTrue(AbbreviatedLongObjectId.isId(LongObjectId
425 .fromString(
426 "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10")
427 .name()));
428 }
429
430 @Test
431 public void testAbbreviate() {
432 AnyLongObjectId id = LongObjectIdTestUtils.hash("test");
433 assertEquals(
434 "abbreviated id should match the id it was abbreviated from", 0,
435 id.abbreviate(10).prefixCompare(id));
436 }
437
438 @Test
439 public void testFromStringByteWrongLength() {
440 byte[] buf = new byte[65];
441 try {
442 AbbreviatedLongObjectId.fromString(buf, 0, 65);
443 fail("expected IllegalArgumentException for too long AbbreviatedLongObjectId");
444 } catch (IllegalArgumentException e) {
445
446 }
447 }
448
449 @Test
450 public void testFromStringWrongLength() {
451 AnyLongObjectId id = LongObjectIdTestUtils.hash("test");
452 try {
453 AbbreviatedLongObjectId.fromString(id.name() + "c0ffee");
454 fail("expected IllegalArgumentException for too long AbbreviatedLongObjectId");
455 } catch (IllegalArgumentException e) {
456
457 }
458 }
459
460 @Test
461 public void testFromLongObjectId() {
462 AnyLongObjectId id = LongObjectIdTestUtils.hash("test");
463 assertEquals(0,
464 AbbreviatedLongObjectId.fromLongObjectId(id).prefixCompare(id));
465 }
466
467 @Test
468 public void testPrefixCompareByte() {
469 AnyLongObjectId id = LongObjectId.fromString(
470 "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef");
471 byte[] buf = new byte[32];
472 id.copyRawTo(buf, 0);
473
474 AbbreviatedLongObjectId a = id.abbreviate(62);
475 assertEquals(0, a.prefixCompare(buf, 0));
476
477 a = LongObjectId
478 .fromString(
479 "0023456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")
480 .abbreviate(16);
481 assertEquals(-1, a.prefixCompare(buf, 0));
482 a = LongObjectId
483 .fromString(
484 "0123456789abcdef0023456789abcdef0123456789abcdef0123456789abcdef")
485 .abbreviate(32);
486 assertEquals(-1, a.prefixCompare(buf, 0));
487 a = LongObjectId
488 .fromString(
489 "0123456789abcdef0123456789abcdef0023456789abcdef0123456789abcdef")
490 .abbreviate(48);
491 assertEquals(-1, a.prefixCompare(buf, 0));
492 a = LongObjectId
493 .fromString(
494 "0123456789abcdef0123456789abcdef0123456789abcdef0023456789abcdef")
495 .abbreviate(64);
496 assertEquals(-1, a.prefixCompare(buf, 0));
497
498 a = LongObjectId
499 .fromString(
500 "1123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")
501 .abbreviate(16);
502 assertEquals(1, a.prefixCompare(buf, 0));
503 a = LongObjectId
504 .fromString(
505 "0123456789abcdef1123456789abcdef0123456789abcdef0123456789abcdef")
506 .abbreviate(32);
507 assertEquals(1, a.prefixCompare(buf, 0));
508 a = LongObjectId
509 .fromString(
510 "0123456789abcdef0123456789abcdef1123456789abcdef0123456789abcdef")
511 .abbreviate(48);
512 assertEquals(1, a.prefixCompare(buf, 0));
513 a = LongObjectId
514 .fromString(
515 "0123456789abcdef0123456789abcdef0123456789abcdef1123456789abcdef")
516 .abbreviate(64);
517 assertEquals(1, a.prefixCompare(buf, 0));
518 }
519
520 @Test
521 public void testPrefixCompareLong() {
522 AnyLongObjectId id = new LongObjectId(1L, 2L, 3L, 4L);
523 long[] buf = new long[4];
524 id.copyRawTo(buf, 0);
525
526 AbbreviatedLongObjectId a = id.abbreviate(62);
527 assertEquals(0, a.prefixCompare(buf, 0));
528
529 a = new LongObjectId(0L, 2L, 3L, 4L).abbreviate(16);
530 assertEquals(-1, a.prefixCompare(buf, 0));
531 a = new LongObjectId(1L, 1L, 3L, 4L).abbreviate(32);
532 assertEquals(-1, a.prefixCompare(buf, 0));
533 a = new LongObjectId(1L, 2L, 2L, 4L).abbreviate(48);
534 assertEquals(-1, a.prefixCompare(buf, 0));
535 a = new LongObjectId(1L, 2L, 3L, 3L).abbreviate(64);
536 assertEquals(-1, a.prefixCompare(buf, 0));
537
538 a = new LongObjectId(2L, 2L, 3L, 4L).abbreviate(16);
539 assertEquals(1, a.prefixCompare(buf, 0));
540 a = new LongObjectId(1L, 3L, 3L, 4L).abbreviate(32);
541 assertEquals(1, a.prefixCompare(buf, 0));
542 a = new LongObjectId(1L, 2L, 4L, 4L).abbreviate(48);
543 assertEquals(1, a.prefixCompare(buf, 0));
544 a = new LongObjectId(1L, 2L, 3L, 5L).abbreviate(64);
545 assertEquals(1, a.prefixCompare(buf, 0));
546 }
547
548 @Test
549 public void testGetFirstByte() {
550 AnyLongObjectId id = LongObjectId.fromString(
551 "f423456789abcdef0123456789abcdef0123456789abcdef1123456789abcdef");
552 AbbreviatedLongObjectId a = id.abbreviate(10);
553 assertEquals(0xf4, a.getFirstByte());
554 assertEquals(id.getFirstByte(), a.getFirstByte());
555 }
556
557 @SuppressWarnings("unlikely-arg-type")
558 @Test
559 public void testNotEquals() {
560 AbbreviatedLongObjectId a = new LongObjectId(1L, 2L, 3L, 4L)
561 .abbreviate(10);
562 assertFalse(a.equals("different"));
563 }
564 }