View Javadoc
1   /*
2    * Copyright (C) 2016, 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.util;
12  
13  import static org.eclipse.jgit.util.Paths.compare;
14  import static org.eclipse.jgit.util.Paths.compareSameName;
15  import static org.junit.Assert.assertEquals;
16  import static org.junit.Assert.assertFalse;
17  import static org.junit.Assert.assertNull;
18  import static org.junit.Assert.assertTrue;
19  
20  import org.eclipse.jgit.lib.Constants;
21  import org.eclipse.jgit.lib.FileMode;
22  import org.junit.Test;
23  
24  public class PathsTest {
25  	@Test
26  	public void testStripTrailingSeparator() {
27  		assertNull(Paths.stripTrailingSeparator(null));
28  		assertEquals("", Paths.stripTrailingSeparator(""));
29  		assertEquals("a", Paths.stripTrailingSeparator("a"));
30  		assertEquals("a/boo", Paths.stripTrailingSeparator("a/boo"));
31  		assertEquals("a/boo", Paths.stripTrailingSeparator("a/boo/"));
32  		assertEquals("a/boo", Paths.stripTrailingSeparator("a/boo//"));
33  		assertEquals("a/boo", Paths.stripTrailingSeparator("a/boo///"));
34  	}
35  
36  	@Test
37  	public void testPrefix() {
38  		assertTrue(Paths.isEqualOrPrefix("a", "a"));
39  		assertTrue(Paths.isEqualOrPrefix("a", "a/b"));
40  		assertTrue(Paths.isEqualOrPrefix("a", "a/a.txt"));
41  		assertFalse(Paths.isEqualOrPrefix("a", "ab"));
42  		assertFalse(Paths.isEqualOrPrefix("a", "a.txt"));
43  		assertFalse(Paths.isEqualOrPrefix("a", "b/a.txt"));
44  		assertFalse(Paths.isEqualOrPrefix("a", "b/a"));
45  		assertFalse(Paths.isEqualOrPrefix("a", "ab/a.txt"));
46  		assertFalse(Paths.isEqualOrPrefix("", "a"));
47  		assertTrue(Paths.isEqualOrPrefix("", ""));
48  		assertTrue(Paths.isEqualOrPrefix("a/b", "a/b"));
49  		assertTrue(Paths.isEqualOrPrefix("a/b", "a/b/c"));
50  		assertFalse(Paths.isEqualOrPrefix("a/b", "a/bc"));
51  	}
52  
53  	@Test
54  	public void testPathCompare() {
55  		byte[] a = Constants.encode("afoo/bar.c");
56  		byte[] b = Constants.encode("bfoo/bar.c");
57  
58  		assertEquals(0, compare(a, 1, a.length, 0, b, 1, b.length, 0));
59  		assertEquals(-1, compare(a, 0, a.length, 0, b, 0, b.length, 0));
60  		assertEquals(1, compare(b, 0, b.length, 0, a, 0, a.length, 0));
61  
62  		a = Constants.encode("a");
63  		b = Constants.encode("aa");
64  		assertEquals(-97, compare(a, 0, a.length, 0, b, 0, b.length, 0));
65  		assertEquals(0, compare(a, 0, a.length, 0, b, 0, 1, 0));
66  		assertEquals(0, compare(a, 0, a.length, 0, b, 1, 2, 0));
67  		assertEquals(0, compareSameName(a, 0, a.length, b, 1, b.length, 0));
68  		assertEquals(0, compareSameName(a, 0, a.length, b, 0, 1, 0));
69  		assertEquals(-50, compareSameName(a, 0, a.length, b, 0, b.length, 0));
70  		assertEquals(97, compareSameName(b, 0, b.length, a, 0, a.length, 0));
71  
72  		a = Constants.encode("a");
73  		b = Constants.encode("a");
74  		assertEquals(0, compare(
75  				a, 0, a.length, FileMode.TREE.getBits(),
76  				b, 0, b.length, FileMode.TREE.getBits()));
77  		assertEquals(0, compare(
78  				a, 0, a.length, FileMode.REGULAR_FILE.getBits(),
79  				b, 0, b.length, FileMode.REGULAR_FILE.getBits()));
80  		assertEquals(-47, compare(
81  				a, 0, a.length, FileMode.REGULAR_FILE.getBits(),
82  				b, 0, b.length, FileMode.TREE.getBits()));
83  		assertEquals(47, compare(
84  				a, 0, a.length, FileMode.TREE.getBits(),
85  				b, 0, b.length, FileMode.REGULAR_FILE.getBits()));
86  
87  		assertEquals(0, compareSameName(
88  				a, 0, a.length,
89  				b, 0, b.length, FileMode.TREE.getBits()));
90  		assertEquals(0, compareSameName(
91  				a, 0, a.length,
92  				b, 0, b.length, FileMode.REGULAR_FILE.getBits()));
93  
94  		a = Constants.encode("a.c");
95  		b = Constants.encode("a");
96  		byte[] c = Constants.encode("a0c");
97  		assertEquals(-1, compare(
98  				a, 0, a.length, FileMode.REGULAR_FILE.getBits(),
99  				b, 0, b.length, FileMode.TREE.getBits()));
100 		assertEquals(-1, compare(
101 				b, 0, b.length, FileMode.TREE.getBits(),
102 				c, 0, c.length, FileMode.REGULAR_FILE.getBits()));
103 	}
104 }