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