1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 package org.eclipse.jgit.util;
45
46 import static org.eclipse.jgit.util.QuotedString.BOURNE_USER_PATH;
47 import static org.junit.Assert.assertEquals;
48 import static org.junit.Assert.assertFalse;
49 import static org.junit.Assert.assertNotSame;
50
51 import org.eclipse.jgit.lib.Constants;
52 import org.junit.Test;
53
54 public class QuotedStringBourneUserPathStyleTest {
55 private static void assertQuote(final String in, final String exp) {
56 final String r = BOURNE_USER_PATH.quote(in);
57 assertNotSame(in, r);
58 assertFalse(in.equals(r));
59 assertEquals('\'' + exp + '\'', r);
60 }
61
62 private static void assertDequote(final String exp, final String in) {
63 final byte[] b = Constants.encode('\'' + in + '\'');
64 final String r = BOURNE_USER_PATH.dequote(b, 0, b.length);
65 assertEquals(exp, r);
66 }
67
68 @Test
69 public void testQuote_Empty() {
70 assertEquals("''", BOURNE_USER_PATH.quote(""));
71 }
72
73 @Test
74 public void testDequote_Empty1() {
75 assertEquals("", BOURNE_USER_PATH.dequote(new byte[0], 0, 0));
76 }
77
78 @Test
79 public void testDequote_Empty2() {
80 assertEquals("", BOURNE_USER_PATH.dequote(new byte[] { '\'', '\'' }, 0,
81 2));
82 }
83
84 @Test
85 public void testDequote_SoleSq() {
86 assertEquals("", BOURNE_USER_PATH.dequote(new byte[] { '\'' }, 0, 1));
87 }
88
89 @Test
90 public void testQuote_BareA() {
91 assertQuote("a", "a");
92 }
93
94 @Test
95 public void testDequote_BareA() {
96 final String in = "a";
97 final byte[] b = Constants.encode(in);
98 assertEquals(in, BOURNE_USER_PATH.dequote(b, 0, b.length));
99 }
100
101 @Test
102 public void testDequote_BareABCZ_OnlyBC() {
103 final String in = "abcz";
104 final byte[] b = Constants.encode(in);
105 final int p = in.indexOf('b');
106 assertEquals("bc", BOURNE_USER_PATH.dequote(b, p, p + 2));
107 }
108
109 @Test
110 public void testDequote_LoneBackslash() {
111 assertDequote("\\", "\\");
112 }
113
114 @Test
115 public void testQuote_NamedEscapes() {
116 assertQuote("'", "'\\''");
117 assertQuote("!", "'\\!'");
118
119 assertQuote("a'b", "a'\\''b");
120 assertQuote("a!b", "a'\\!'b");
121 }
122
123 @Test
124 public void testDequote_NamedEscapes() {
125 assertDequote("'", "'\\''");
126 assertDequote("!", "'\\!'");
127
128 assertDequote("a'b", "a'\\''b");
129 assertDequote("a!b", "a'\\!'b");
130 }
131
132 @Test
133 public void testQuote_User() {
134 assertEquals("~foo/", BOURNE_USER_PATH.quote("~foo"));
135 assertEquals("~foo/", BOURNE_USER_PATH.quote("~foo/"));
136 assertEquals("~/", BOURNE_USER_PATH.quote("~/"));
137
138 assertEquals("~foo/'a'", BOURNE_USER_PATH.quote("~foo/a"));
139 assertEquals("~/'a'", BOURNE_USER_PATH.quote("~/a"));
140 }
141
142 @Test
143 public void testDequote_User() {
144 assertEquals("~foo", BOURNE_USER_PATH.dequote("~foo"));
145 assertEquals("~foo/", BOURNE_USER_PATH.dequote("~foo/"));
146 assertEquals("~/", BOURNE_USER_PATH.dequote("~/"));
147
148 assertEquals("~foo/a", BOURNE_USER_PATH.dequote("~foo/'a'"));
149 assertEquals("~/a", BOURNE_USER_PATH.dequote("~/'a'"));
150 }
151 }