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;
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 QuotedStringBourneStyleTest {
55 private static void assertQuote(final String in, final String exp) {
56 final String r = BOURNE.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.dequote(b, 0, b.length);
65 assertEquals(exp, r);
66 }
67
68 @Test
69 public void testQuote_Empty() {
70 assertEquals("''", BOURNE.quote(""));
71 }
72
73 @Test
74 public void testDequote_Empty1() {
75 assertEquals("", BOURNE.dequote(new byte[0], 0, 0));
76 }
77
78 @Test
79 public void testDequote_Empty2() {
80 assertEquals("", BOURNE.dequote(new byte[] { '\'', '\'' }, 0, 2));
81 }
82
83 @Test
84 public void testDequote_SoleSq() {
85 assertEquals("", BOURNE.dequote(new byte[] { '\'' }, 0, 1));
86 }
87
88 @Test
89 public void testQuote_BareA() {
90 assertQuote("a", "a");
91 }
92
93 @Test
94 public void testDequote_BareA() {
95 final String in = "a";
96 final byte[] b = Constants.encode(in);
97 assertEquals(in, BOURNE.dequote(b, 0, b.length));
98 }
99
100 @Test
101 public void testDequote_BareABCZ_OnlyBC() {
102 final String in = "abcz";
103 final byte[] b = Constants.encode(in);
104 final int p = in.indexOf('b');
105 assertEquals("bc", BOURNE.dequote(b, p, p + 2));
106 }
107
108 @Test
109 public void testDequote_LoneBackslash() {
110 assertDequote("\\", "\\");
111 }
112
113 @Test
114 public void testQuote_NamedEscapes() {
115 assertQuote("'", "'\\''");
116 assertQuote("!", "'\\!'");
117
118 assertQuote("a'b", "a'\\''b");
119 assertQuote("a!b", "a'\\!'b");
120 }
121
122 @Test
123 public void testDequote_NamedEscapes() {
124 assertDequote("'", "'\\''");
125 assertDequote("!", "'\\!'");
126
127 assertDequote("a'b", "a'\\''b");
128 assertDequote("a!b", "a'\\!'b");
129 }
130 }