1 package com.atlassian.core.util;
2
3 import com.atlassian.core.util.StringUtils;
4 import junit.framework.TestCase;
5
6 import java.util.Collection;
7 import java.util.ArrayList;
8 import java.util.Arrays;
9 import java.util.Collections;
10
11 public class TestStringUtils extends TestCase
12 {
13 private final String UTF8_TEST_STRING = "" + (char) 8216 + "singlequotes" + (char) 8217 + " " +
14 (char) 8220 + "doublequotes" + (char) 8221 + " Elipsis: " + (char) 8230 + " Em-dash: " +
15 (char) 8211 + " bullet: " + (char) 183;
16
17 private final String ISO88591_TEST_STRING = "" + (char) 145 + "singlequotes" + (char) 146 + " " +
18 (char) 147 + "doublequotes" + (char) 148 + " Elipsis: " + (char) 133 + " Em-dash: " +
19 (char) 150 + " bullet: " + (char) 183;
20
21 private final String SIMPLIFIED_TEST_STRING = "'singlequotes' \"doublequotes\" Elipsis: ... Em-dash: - bullet: - ";
22
23 public TestStringUtils(String s)
24 {
25 super(s);
26 }
27
28 public void testUTF()
29 {
30 String escaped = StringUtils.escapeCP1252(UTF8_TEST_STRING, "UTF-8");
31 assertEquals(SIMPLIFIED_TEST_STRING, escaped);
32 }
33
34 public void testISO8859()
35 {
36 String escaped = StringUtils.escapeCP1252(ISO88591_TEST_STRING, "ISO-8859-1");
37 assertEquals(SIMPLIFIED_TEST_STRING, escaped);
38 }
39
40 public void testNormalString()
41 {
42 String escaped = StringUtils.escapeCP1252("normal string", "UTF-8");
43 assertEquals("normal string", escaped);
44 }
45
46 public void testNull()
47 {
48 String escaped = StringUtils.escapeCP1252(null, "UTF-8");
49 assertEquals(null, escaped);
50 }
51
52 public void testHighRangeStrings()
53 {
54 String highEndString = new String("This is a " + UTF8_TEST_STRING + " test String '" + ((char) 25628) + "' does it work?");
55 StringUtils.escapeCP1252(highEndString, "UTF-8");
56 StringUtils.escapeCP1252(highEndString, "ISO-8859-1");
57 }
58
59 public void testInvalidControlCharacters()
60 {
61 String s = "start";
62 for (int i = 0; i <= 30; i++)
63 {
64 if (i == 9 || i == 10 || i == 13)
65 {
66 continue;
67 }
68 s += (char) i;
69 }
70 s += "end";
71 assertEquals("startend", StringUtils.escapeCP1252(s, "UTF-8"));
72 assertEquals("startend", StringUtils.escapeCP1252(s, "ISO-8859-1"));
73 }
74
75 public void testOnlyControlCharacters()
76 {
77 String s = "";
78 for (int i = 0; i <= 30; i++)
79 {
80 if (i == 9 || i == 10 || i == 13)
81 {
82 continue;
83 }
84 s += (char) i;
85 }
86 assertEquals("", StringUtils.escapeCP1252(s, "UTF-8"));
87 assertEquals("", StringUtils.escapeCP1252(s, "ISO-8859-1"));
88 }
89
90 public void testReplaceAll()
91 {
92 assertEquals("no change", StringUtils.replaceAll("no change", "foo", "bar"));
93 assertEquals("no change", StringUtils.replaceAll("no change", "", ""));
94 assertEquals("", StringUtils.replaceAll("deleteme", "deleteme", ""));
95 assertEquals(null, StringUtils.replaceAll(null, "&", "X"));
96 assertEquals("", StringUtils.replaceAll("", "&", "X"));
97 assertEquals("no change", StringUtils.replaceAll("no change", null, ""));
98 assertEquals("hello%26world%26sad", StringUtils.replaceAll("hello&world&sad", "&", "%26"));
99 assertEquals("Xhello", StringUtils.replaceAll("&hello", "&", "X"));
100 assertEquals("helloX", StringUtils.replaceAll("hello&", "&", "X"));
101 assertEquals("XhelloXworld", StringUtils.replaceAll("&%hello&%world", "&%", "X"));
102 assertEquals("goodbye world", StringUtils.replaceAll("hello world", "hello", "goodbye"));
103 assertEquals("doo dum dum diddly dum", StringUtils.replaceAll("doo da da diddly da", "da", "dum"));
104 assertEquals("normal", StringUtils.replaceAll("normal", "&", "X"));
105 }
106
107 public void testReplaceAllDips()
108 {
109 String str = "hello'world";
110 String str2 = "'foo'bar'";
111
112 assertEquals("hello''world", StringUtils.replaceAll(str, "\'", "\'\'"));
113 assertEquals("''foo''bar''", StringUtils.replaceAll(str2, "\'", "\'\'"));
114 }
115
116 public void testStringAllASCII()
117 {
118 assertTrue(StringUtils.isStringAllASCII(null));
119 assertTrue(StringUtils.isStringAllASCII(""));
120 assertTrue(StringUtils.isStringAllASCII("abc"));
121 assertTrue(StringUtils.isStringAllASCII("abc\tgr"));
122 assertTrue(StringUtils.isStringAllASCII("?/\\@#$"));
123 assertFalse(StringUtils.isStringAllASCII("?/\u00fd#"));
124 assertFalse(StringUtils.isStringAllASCII("\\@\u00ff$"));
125 assertFalse(StringUtils.isStringAllASCII("a\u0129ngr"));
126 }
127
128 public void testStringISO_8859_1()
129 {
130 assertTrue(StringUtils.isStringISO_8859_1(null));
131 assertTrue(StringUtils.isStringISO_8859_1(""));
132 assertTrue(StringUtils.isStringISO_8859_1("abc"));
133 assertTrue(StringUtils.isStringISO_8859_1("abc\tgr"));
134 assertTrue(StringUtils.isStringISO_8859_1("?/\\@#$"));
135 assertTrue(StringUtils.isStringISO_8859_1("?/\u00fd#"));
136 assertTrue(StringUtils.isStringISO_8859_1("\\@\u00ff$"));
137 assertFalse(StringUtils.isStringISO_8859_1("a\u0129ngr"));
138 }
139
140 public void testEqualsIgnoreLineTerminators()
141 {
142
143 assertTrue(StringUtils.equalsIgnoreLineTerminators(null, null));
144 assertTrue(StringUtils.equalsIgnoreLineTerminators(null, ""));
145 assertTrue(StringUtils.equalsIgnoreLineTerminators("", null));
146 assertTrue(StringUtils.equalsIgnoreLineTerminators("", ""));
147
148
149 assertFalse(StringUtils.equalsIgnoreLineTerminators(null, "a"));
150 assertFalse(StringUtils.equalsIgnoreLineTerminators("", "a"));
151 assertFalse(StringUtils.equalsIgnoreLineTerminators("a", null));
152 assertFalse(StringUtils.equalsIgnoreLineTerminators("a", ""));
153
154
155 assertFalse(StringUtils.equalsIgnoreLineTerminators("a\na", "aa"));
156 assertFalse(StringUtils.equalsIgnoreLineTerminators("aa", "a\ra"));
157 assertFalse(StringUtils.equalsIgnoreLineTerminators("aa", "a\r\na"));
158
159
160 assertTrue(StringUtils.equalsIgnoreLineTerminators("a\na", "a\na"));
161 assertTrue(StringUtils.equalsIgnoreLineTerminators("a\r\na", "a\r\na"));
162 assertTrue(StringUtils.equalsIgnoreLineTerminators("a\na", "a\r\na"));
163 assertTrue(StringUtils.equalsIgnoreLineTerminators("a\na", "a\ra"));
164 assertTrue(StringUtils.equalsIgnoreLineTerminators("a\ra", "a\ra"));
165
166
167 assertTrue(StringUtils.equalsIgnoreLineTerminators("abc", "abc"));
168 assertFalse(StringUtils.equalsIgnoreLineTerminators("a\na", "a\na\n"));
169 assertFalse(StringUtils.equalsIgnoreLineTerminators("a\ra", "a\na\r"));
170 assertTrue(StringUtils.equalsIgnoreLineTerminators("a\ra\r\n", "a\na\r"));
171 }
172
173 public void testSplitCommaSeperatedString()
174 {
175 String[] namesExpected = new String[]{"bob","fred","john"};
176 String[] names;
177
178
179 names = StringUtils.splitCommaSeparatedString("bob,fred,john");
180 assertArrayContentEquals(names, namesExpected);
181
182
183 names = StringUtils.splitCommaSeparatedString("bob, fred, john");
184 assertArrayContentEquals(names, namesExpected);
185
186
187 names = StringUtils.splitCommaSeparatedString("");
188 assertEquals(names.length, 1);
189 }
190
191 public void testCreateCommaSeperatedString()
192 {
193 String[] namesExpected = new String[]{"bob","fred","john"};
194 Collection nameList = Arrays.asList(namesExpected);
195
196 String nameString = "bob,fred,john";
197
198 String names;
199
200 names = StringUtils.createCommaSeperatedString(nameList);
201 assertEquals(names, nameString);
202
203 names = StringUtils.createCommaSeperatedString(null);
204 assertNull(names);
205
206 names = StringUtils.createCommaSeperatedString(Collections.EMPTY_LIST);
207 assertEquals(names, "");
208 }
209
210
211
212
213 private void assertArrayContentEquals(String[] array1, String[] array2)
214 {
215 assertEquals(array1.length, array2.length);
216 for (int i = 0; i < array1.length; i++)
217 {
218 String s1 = array1[i];
219 String s2 = array1[i];
220 assertEquals(s1, s2);
221 }
222 }
223 }