1 package jimm.datavision.test; 2 import jimm.util.StringUtils; 3 import jimm.util.Replacer; 4 import java.util.ArrayList ; 5 import java.util.List ; 6 import junit.framework.TestCase; 7 import junit.framework.TestSuite; 8 import junit.framework.Test; 9 10 public class StringUtilsTest extends TestCase { 11 12 public static Test suite() { 13 return new TestSuite(StringUtilsTest.class); 14 } 15 16 public StringUtilsTest(String name) { 17 super(name); 18 } 19 20 public void testEscapeXML() { 21 assertEquals("", StringUtils.escapeXML(null)); 22 assertEquals("", StringUtils.escapeXML("")); 23 assertEquals("abc&def", StringUtils.escapeXML("abc&def")); 24 assertEquals("abc"def'", StringUtils.escapeXML("abc\"def'")); 25 assertEquals("<>", StringUtils.escapeXML("<>")); 26 } 27 28 public void testUnescapeXML() { 29 assertEquals("", StringUtils.unescapeXML(null)); 30 assertEquals("", StringUtils.unescapeXML("")); 31 assertEquals("abc&def", StringUtils.unescapeXML("abc&def")); 32 assertEquals("abc\"def'", StringUtils.unescapeXML("abc"def'")); 33 assertEquals("<>", StringUtils.unescapeXML("<>")); 34 assertEquals("abc def", StringUtils.unescapeXML("abcdef")); 35 } 36 37 public void testNewlines() { 38 assertEquals("", StringUtils.newlinesToXHTMLBreaks(null)); 39 assertEquals("", StringUtils.newlinesToXHTMLBreaks("")); 40 assertEquals("\n<br />", StringUtils.newlinesToXHTMLBreaks("\n")); 41 assertEquals("\n<br />", StringUtils.newlinesToXHTMLBreaks("\r")); 42 assertEquals("\n<br />", StringUtils.newlinesToXHTMLBreaks("\r\n")); 43 assertEquals("hello\n<br />world", 44 StringUtils.newlinesToXHTMLBreaks("hello\nworld")); 45 assertEquals("hello\n<br />world", 46 StringUtils.newlinesToXHTMLBreaks("hello\rworld")); 47 assertEquals("hello\n<br />world", 48 StringUtils.newlinesToXHTMLBreaks("hello\r\nworld")); 49 } 50 51 public void testSplit() { 52 ArrayList typicalAnswer = new ArrayList (); 53 typicalAnswer.add("a"); 54 typicalAnswer.add("b"); 55 typicalAnswer.add("c"); 56 57 ArrayList origStringAnswer = new ArrayList (); 58 origStringAnswer.add("abc"); 59 60 assertNull(StringUtils.split(null, null)); 62 assertEquals(origStringAnswer, StringUtils.split("abc", null)); 63 assertEquals(origStringAnswer, StringUtils.split("abc", "x")); 64 65 assertEquals(typicalAnswer, StringUtils.split("a.b.c", ".")); 66 assertEquals(typicalAnswer, StringUtils.split("a**&*b**&*c", "**&*")); 67 68 ArrayList answer = new ArrayList (typicalAnswer); 69 answer.add(0, ""); 70 assertEquals(answer, StringUtils.split(".a.b.c", ".")); 71 assertEquals(answer, StringUtils.split("**&*a**&*b**&*c", "**&*")); 72 73 answer = new ArrayList (typicalAnswer); 74 answer.add(1, ""); 75 assertEquals(answer, StringUtils.split("a..b.c", ".")); 76 assertEquals(answer, StringUtils.split("a**&***&*b**&*c", "**&*")); 77 78 answer = new ArrayList (typicalAnswer); 79 answer.add(""); 80 assertEquals(answer, StringUtils.split("a.b.c.", ".")); 81 assertEquals(answer, StringUtils.split("a**&*b**&*c**&*", "**&*")); 82 83 answer = new ArrayList (typicalAnswer); 84 answer.add(1, ""); 85 answer.add(""); 86 assertEquals(answer, StringUtils.split("a..b.c.", ".")); 87 assertEquals(answer, StringUtils.split("a**&***&*b**&*c**&*", "**&*")); 88 } 89 90 public void testJoin() { 91 assertEquals("", StringUtils.join(null, null)); 92 assertEquals("", StringUtils.join(null, ",")); 93 94 ArrayList list = new ArrayList (); 95 assertEquals("", StringUtils.join(list, null)); 96 assertEquals("", StringUtils.join(list, ",")); 97 98 list.add("a"); 99 assertEquals("a", StringUtils.join(list, null)); 100 assertEquals("a", StringUtils.join(list, ",")); 101 102 list.add("xyzzy"); 103 assertEquals("axyzzy", StringUtils.join(list, null)); 104 assertEquals("a,xyzzy", StringUtils.join(list, ",")); 105 assertEquals("a-*-xyzzy", StringUtils.join(list, "-*-")); 106 } 107 108 public void testReplace() { 109 Replacer r = new Replacer() { 110 public Object replace(String s) { return "x"; } 111 }; 112 113 assertNull(StringUtils.replaceDelimited("", "", null, null)); 114 assertNull(StringUtils.replaceDelimited(null, null, null, null)); 115 assertEquals("abcde", StringUtils.replaceDelimited(null, null, r, "abcde")); 116 assertEquals("abcde", StringUtils.replaceDelimited("", "", r, "abcde")); 117 assertEquals("", StringUtils.replaceDelimited("{%", "}", r, "")); 118 119 assertEquals("abxde", StringUtils.replaceDelimited("{%", "}", r, "ab{%c}de")); 120 assertEquals("xabxdex", StringUtils.replaceDelimited("{%", "}", r, 121 "{%}ab{%c}de{% }")); 122 assertEquals("abcd{%e", StringUtils.replaceDelimited("{%", "}", r, "abcd{%e")); 123 assertEquals("x.nil? ? nil : x / 100.0", 124 StringUtils.replaceDelimited("{", "}", r, 125 "{jobs.hourly rate}.nil? ? nil : {jobs.hourly rate} / 100.0")); 126 } 127 128 public void testReplaceNotAfter() { 129 Replacer r = new Replacer() { 130 public Object replace(String s) { return "x"; } 131 }; 132 133 assertNull(StringUtils.replaceDelimited("#", "", "", null, null)); 134 assertNull(StringUtils.replaceDelimited("#", "#", "#", null, null)); 135 assertNull(StringUtils.replaceDelimited("#", null, null, null, null)); 136 assertEquals("abcde", StringUtils.replaceDelimited("#", null, null, r, "abcde")); 137 assertEquals("abcde", StringUtils.replaceDelimited("#", "", "", r, "abcde")); 138 assertEquals("", StringUtils.replaceDelimited("#", "{%", "}", r, "")); 139 140 assertEquals("abxde", 141 StringUtils.replaceDelimited("#", "{%", "}", r, "ab{%c}de")); 142 assertEquals("xabxdex", StringUtils.replaceDelimited("#", "{%", "}", r, 143 "{%}ab{%c}de{% }")); 144 assertEquals("abcd{%e", 145 StringUtils.replaceDelimited("#", "{%", "}", r, "abcd{%e")); 146 147 assertEquals("ab#{c}de", 148 StringUtils.replaceDelimited("#", "{", "}", r, "ab#{c}de")); 149 assertEquals("ab##{c}de", 150 StringUtils.replaceDelimited("#", "{", "}", r, "ab##{c}de")); 151 assertEquals("ab##{x}dex", 152 StringUtils.replaceDelimited("#", "{", "}", r, "ab##{{c}}de{z}")); 153 assertEquals("ab#{x}de", 154 StringUtils.replaceDelimited("#", "{", "}", r, "ab#{{c}}de")); 155 assertEquals("ab#{x}de", 156 StringUtils.replaceDelimited("#", "{%", "}", r, "ab#{{%c}}de")); 157 } 158 159 public void testAvoidInfiniteLoop() { 160 final int[] count = new int[1]; 161 count[0] = 0; 162 Replacer r = new Replacer() { 163 public Object replace(String s) { 164 if (++count[0] == 2) 165 fail("caught in an infinite loop"); 166 return "{" + s + "}"; 167 } 168 }; 169 assertEquals("a{}b", 170 StringUtils.replaceDelimited(null, "{", "}", r, "a{}b")); 171 } 172 173 public void testLineSplit() { 174 ArrayList answer = new ArrayList (); 175 answer.add(""); 176 177 List split = StringUtils.splitIntoLines(""); 178 assertEquals(answer.size(), split.size()); 179 assertEquals(answer, split); 180 181 String [] endings = { "\n", "\r", "\r\n" }; 183 184 for (int i = 0; i < endings.length; ++i) { 187 split = StringUtils.splitIntoLines(endings[i]); 188 assertEquals(answer.size(), split.size()); 189 assertEquals(answer, split); 190 } 191 192 answer.add("x"); 193 for (int i = 0; i < endings.length; ++i) { 194 split = StringUtils.splitIntoLines(endings[i] + "x"); 195 assertEquals(answer.size(), split.size()); 196 assertEquals(answer, split); 197 } 198 199 answer = new ArrayList (); 200 answer.add("line one"); 201 answer.add("part deux"); 202 answer.add("three's a crowd, eh?"); 203 answer.add(""); 204 205 split = StringUtils.splitIntoLines("line one\npart deux\nthree's a crowd, eh?" 206 + "\n\n"); 207 assertEquals(answer.size(), split.size()); 208 assertEquals(answer, split); 209 210 answer = new ArrayList (); 212 answer.add("two newlines after this line"); 213 answer.add(""); 214 answer.add("part deux"); 215 answer.add("three's a crowd, eh?"); 216 answer.add(""); 217 218 split = StringUtils.splitIntoLines("two newlines after this line\n\npart deux\nthree's a crowd, eh?" 219 + "\n\n"); 220 assertEquals(answer.size(), split.size()); 221 assertEquals(answer, split); 222 223 split = StringUtils.splitIntoLines("two newlines after this line\r\n\r\npart deux\r\nthree's a crowd, eh?" 224 + "\n\n"); 225 assertEquals(answer.size(), split.size()); 226 assertEquals(answer, split); 227 228 split = StringUtils.splitIntoLines("two newlines after this line\r\rpart deux\rthree's a crowd, eh?" 229 + "\r\r"); 230 assertEquals(answer.size(), split.size()); 231 assertEquals(answer, split); 232 } 233 234 public void testSplitUp() { 235 StringBuffer buf = new StringBuffer (); 236 StringUtils.splitUp(buf, null); 237 assertEquals("", buf.toString()); 238 239 buf = new StringBuffer (); 240 StringUtils.splitUp(buf, "abcde abcde abcde abcde", 12); 241 assertEquals("abcde abcde\nabcde abcde", buf.toString()); 242 243 buf = new StringBuffer (); 244 StringUtils.splitUp(buf, "abcdeabcdeabcdeabcde", 12); 245 assertEquals("abcdeabcdeabcdeabcde", buf.toString()); 246 247 buf = new StringBuffer (); 248 StringUtils.splitUp(buf, " abcde", 12); 249 assertEquals("abcde", buf.toString()); 250 251 buf = new StringBuffer (); 252 StringUtils.splitUp(buf, " abcde abcde abcde abcde ", 12); 253 assertEquals("abcde\nabcde\nabcde\nabcde", buf.toString()); 254 } 255 256 public static void main(String [] args) { 257 junit.textui.TestRunner.run(suite()); 258 System.exit(0); 259 } 260 261 } 262 | Popular Tags |