View Javadoc

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; // 9, 10, 13 are line feed and carriage return chars
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; // 9, 10, 13 are line feed and carriage return chars
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         // Test That null and empty string is treated as equal
141         assertTrue(StringUtils.equalsIgnoreLineTerminators(null, null));
142         assertTrue(StringUtils.equalsIgnoreLineTerminators(null, ""));
143         assertTrue(StringUtils.equalsIgnoreLineTerminators("", null));
144         assertTrue(StringUtils.equalsIgnoreLineTerminators("", ""));
145 
146         // Test that comparing a string to no string
147         assertFalse(StringUtils.equalsIgnoreLineTerminators(null, "a"));
148         assertFalse(StringUtils.equalsIgnoreLineTerminators("", "a"));
149         assertFalse(StringUtils.equalsIgnoreLineTerminators("a", null));
150         assertFalse(StringUtils.equalsIgnoreLineTerminators("a", ""));
151 
152         // Test that line terminators are not ignored (they do matter)
153         assertFalse(StringUtils.equalsIgnoreLineTerminators("a\na", "aa"));
154         assertFalse(StringUtils.equalsIgnoreLineTerminators("aa", "a\ra"));
155         assertFalse(StringUtils.equalsIgnoreLineTerminators("aa", "a\r\na"));
156 
157         // Check that all line terminators are treated equaly
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         // Same more random tests
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         // Test a simple String
177         names = StringUtils.splitCommaSeparatedString("bob,fred,john");
178         assertArrayContentEquals(names, namesExpected);
179 
180         // Test String with spaces
181         names = StringUtils.splitCommaSeparatedString("bob, fred, john");
182         assertArrayContentEquals(names, namesExpected);
183 
184         // Test empty String
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 }