KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > opencms > util > TestCmsStringUtil


1 /*
2  * File : $Source: /usr/local/cvs/opencms/test/org/opencms/util/TestCmsStringUtil.java,v $
3  * Date : $Date: 2006/03/27 14:52:42 $
4  * Version: $Revision: 1.13 $
5  *
6  * This library is part of OpenCms -
7  * the Open Source Content Mananagement System
8  *
9  * Copyright (c) 2005 Alkacon Software GmbH (http://www.alkacon.com)
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Lesser General Public License for more details.
20  *
21  * For further information about Alkacon Software GmbH, please see the
22  * company website: http://www.alkacon.com
23  *
24  * For further information about OpenCms, please see the
25  * project website: http://www.opencms.org
26  *
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30  */

31
32 package org.opencms.util;
33
34 import org.opencms.i18n.CmsEncoder;
35
36 import java.util.Arrays JavaDoc;
37 import java.util.List JavaDoc;
38
39 import junit.framework.TestCase;
40
41 /**
42  * Test cases for {@link org.opencms.util.CmsStringUtil}.<p>
43  *
44  * @author Andreas Zahner
45  * @author Achim Westermann
46  *
47  * @version $Revision: 1.13 $
48  */

49 public class TestCmsStringUtil extends TestCase {
50
51     /**
52      * Default JUnit constructor.<p>
53      *
54      * @param arg0 JUnit parameters
55      */

56     public TestCmsStringUtil(String JavaDoc arg0) {
57
58         super(arg0);
59     }
60
61     /**
62      * Tests content replacement during import.<p>
63      */

64     public void testCmsContentReplacement() {
65
66         String JavaDoc content, result, context, search, replace;
67
68         content = "<html><body>\n"
69             + "See <a HREF=\"http://www.opencms.org/opencms/opencms/opencms/index.html\">\n"
70             + "http://www.opencms.org/opencms/opencms/opencms/index.html</a>\n"
71             + "or <a HREF=\"/opencms/opencms/opencms/index.html\">\n"
72             + "/opencms/opencms/opencms/index.html</a>\n"
73             + "<img SRC=\"/opencms/opencms/system/galleries/pics/test/test.gif\">\n"
74             + "<img SRC=\"http://www.othersite.org/opencms/opencms/system/galleries/pics/test/test.gif\">\n"
75             + "Some URL in the Text: http://www.thirdsite.org/opencms/opencms/some/url.html.\n"
76             + "Another URL in the Text: /opencms/opencms/some/url.html.\n"
77             + "</body></html>\n";
78
79         result = "<html><body>\n"
80             + "See <a HREF=\"http://www.opencms.org/opencms/opencms/opencms/index.html\">\n"
81             + "http://www.opencms.org/opencms/opencms/opencms/index.html</a>\n"
82             + "or <a HREF=\""
83             + CmsStringUtil.MACRO_OPENCMS_CONTEXT
84             + "/opencms/index.html\">\n"
85             + CmsStringUtil.MACRO_OPENCMS_CONTEXT
86             + "/opencms/index.html</a>\n"
87             + "<img SRC=\""
88             + CmsStringUtil.MACRO_OPENCMS_CONTEXT
89             + "/system/galleries/pics/test/test.gif\">\n"
90             + "<img SRC=\"http://www.othersite.org/opencms/opencms/system/galleries/pics/test/test.gif\">\n"
91             + "Some URL in the Text: http://www.thirdsite.org/opencms/opencms/some/url.html.\n"
92             + "Another URL in the Text: "
93             + CmsStringUtil.MACRO_OPENCMS_CONTEXT
94             + "/some/url.html.\n"
95             + "</body></html>\n";
96
97         context = "/opencms/opencms/";
98
99         // search = "([>\"']\\s*)" + context;
100
search = "([^\\w/])" + context;
101         replace = "$1" + CmsStringUtil.escapePattern(CmsStringUtil.MACRO_OPENCMS_CONTEXT) + "/";
102
103         String JavaDoc test = CmsStringUtil.substitutePerl(content, search, replace, "g");
104
105         System.err.println(this.getClass().getName() + ".testCmsContentReplacement():");
106         System.err.println(test);
107         assertEquals(test, result);
108
109         test = CmsStringUtil.substituteContextPath(content, context);
110         assertEquals(test, result);
111     }
112
113     /**
114      * Combined tests.<p>
115      */

116     public void testCombined() {
117
118         String JavaDoc test;
119         String JavaDoc content = "<p>A paragraph with text...<img SRC=\"/opencms/opencms/empty.gif\"></p>\n<a HREF=\"/opencms/opencms/test.jpg\">";
120         String JavaDoc search = "/opencms/opencms/";
121         String JavaDoc replace = "${path}";
122         test = CmsStringUtil.substitute(content, search, replace);
123         assertEquals(
124             test,
125             "<p>A paragraph with text...<img SRC=\"${path}empty.gif\"></p>\n<a HREF=\"${path}test.jpg\">");
126         test = CmsStringUtil.substitute(test, replace, search);
127         assertEquals(
128             test,
129             "<p>A paragraph with text...<img SRC=\"/opencms/opencms/empty.gif\"></p>\n<a HREF=\"/opencms/opencms/test.jpg\">");
130     }
131
132     /**
133      * Tests for complext import patterns.<p>
134      */

135     public void testComplexPatternForImport() {
136
137         String JavaDoc content = "<cms:link>/pics/test.gif</cms:link> <img SRC=\"/pics/test.gif\"> script = '/pics/test.gif' <cms:link> /pics/othertest.gif </cms:link>\n"
138             + "<cms:link>/mymodule/pics/test.gif</cms:link> <img SRC=\"/mymodule/pics/test.gif\"> script = '/mymodule/pics/test.gif' <cms:link> /mymodule/system/galleries/pics/othertest.gif </cms:link>";
139         String JavaDoc search = "([>\"']\\s*)/pics/";
140         String JavaDoc replace = "$1/system/galleries/pics/";
141         String JavaDoc test = CmsStringUtil.substitutePerl(content, search, replace, "g");
142         assertEquals(
143             test,
144             "<cms:link>/system/galleries/pics/test.gif</cms:link> <img SRC=\"/system/galleries/pics/test.gif\"> script = '/system/galleries/pics/test.gif' <cms:link> /system/galleries/pics/othertest.gif </cms:link>\n"
145                 + "<cms:link>/mymodule/pics/test.gif</cms:link> <img SRC=\"/mymodule/pics/test.gif\"> script = '/mymodule/pics/test.gif' <cms:link> /mymodule/system/galleries/pics/othertest.gif </cms:link>");
146     }
147
148     /**
149      * Tests for the escape patterns.<p>
150      */

151     public void testEscapePattern() {
152
153         String JavaDoc test;
154         test = CmsStringUtil.escapePattern("/opencms/opencms");
155         assertEquals(test, "\\/opencms\\/opencms");
156         test = CmsStringUtil.escapePattern("/opencms/$");
157         assertEquals(test, "\\/opencms\\/\\$");
158     }
159
160     /**
161      * Tests the body tag extraction.<p>
162      */

163     public void testExtractHtmlBody() {
164
165         String JavaDoc content, result;
166         String JavaDoc innerContent = "This is body content in the body\n<h1>A headline</h1>\nSome text in the body\n";
167
168         content = "<html><body>" + innerContent + "</body></html>";
169         result = CmsStringUtil.extractHtmlBody(content);
170         assertEquals(result, innerContent);
171
172         content = "<html><body style='css' background-color:#ffffff>" + innerContent + "</body></html>";
173         result = CmsStringUtil.extractHtmlBody(content);
174         assertEquals(result, innerContent);
175
176         content = "<html>\n<title>Test</title>\n<body style='css' background-color:#ffffff>"
177             + innerContent
178             + "</body>\n</html>";
179         result = CmsStringUtil.extractHtmlBody(content);
180         assertEquals(result, innerContent);
181
182         content = "<html>< body style='css' background-color:#ffffff>" + innerContent + "</ BODY>";
183         result = CmsStringUtil.extractHtmlBody(content);
184         assertEquals(result, innerContent);
185
186         content = "<BODY>" + innerContent + "</boDY></html></body><body>somemoretext</BODY>";
187         result = CmsStringUtil.extractHtmlBody(content);
188         assertEquals(result, innerContent);
189
190         content = innerContent + "</boDY></html>";
191         result = CmsStringUtil.extractHtmlBody(content);
192         assertEquals(result, innerContent);
193
194         content = "<html><BODY>" + innerContent;
195         result = CmsStringUtil.extractHtmlBody(content);
196         assertEquals(result, innerContent);
197
198         content = innerContent;
199         result = CmsStringUtil.extractHtmlBody(content);
200         assertEquals(result, innerContent);
201     }
202
203     /**
204      * Tests the xml encoding extraction.<p>
205      */

206     public void testExtractXmlEncoding() {
207
208         String JavaDoc xml, result;
209
210         xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
211             + "<!DOCTYPE opencms SYSTEM"
212             + "\"http://www.opencms.org/dtd/6.0/opencms-importexport.dtd\">\n"
213             + "<opencms/>";
214
215         result = CmsStringUtil.extractXmlEncoding(xml);
216         assertEquals(result, CmsEncoder.ENCODING_UTF_8);
217
218         xml = "<?xml version=\"1.0\" encoding='ISO-8859-1'?>\n" + "<opencms/>";
219
220         result = CmsStringUtil.extractXmlEncoding(xml);
221         assertEquals(result, "ISO-8859-1");
222     }
223
224     /**
225      * Tests for the resource name formatting.<p>
226      */

227     public void testFormatResourceName() {
228
229         String JavaDoc test;
230         test = "/xmlcontentdemo/list.jsp";
231         assertEquals("/.../list.jsp", CmsStringUtil.formatResourceName(test, 10));
232         test = "/xmlcontentdemo/list.jsp";
233         assertEquals("/xmlcontentdemo/list.jsp", CmsStringUtil.formatResourceName(test, 25));
234         test = "/averylongresourcename.jsp";
235         assertEquals("/averylongresourcename.jsp", CmsStringUtil.formatResourceName(test, 25));
236         test = "/folder1/folder2/averylongresourcename.jsp";
237         assertEquals("/.../averylongresourcename.jsp", CmsStringUtil.formatResourceName(test, 25));
238         test = "/myfolder/subfolder/index.html";
239         assertEquals("/.../subfolder/index.html", CmsStringUtil.formatResourceName(test, 21));
240         test = "/myfolder/subfolder/subsubfolder/index.html";
241         assertEquals("/.../subfolder/subsubfolder/index.html", CmsStringUtil.formatResourceName(test, 34));
242         assertEquals("/.../subsubfolder/index.html", CmsStringUtil.formatResourceName(test, 25));
243         assertEquals("/.../index.html", CmsStringUtil.formatResourceName(test, 21));
244         test = "/demopages/search-demo/example-documents/";
245         assertEquals("/.../search-demo/example-documents/", CmsStringUtil.formatResourceName(test, 39));
246         assertEquals("/demopages/search-demo/example-documents/", CmsStringUtil.formatResourceName(test, 40));
247     }
248
249     /**
250      * Further tests.<p>
251      */

252     public void testLine() {
253
254         String JavaDoc content = "<edittemplate><![CDATA[<H4><IMG style=\"WIDTH: 77px; HEIGHT: 77px\" alt=\"Homepage animation\" hspace=8 SRC=\"/opencms/opencms/pics/alkacon/x_hp_ani04.gif\" align=right vspace=8 border=0><IMG style=\"WIDTH: 307px; HEIGHT: 52px\" alt=\"Homepage animation\" hspace=0 SRC=\"/opencms/opencms/pics/alkacon/x_hp_ani05.gif\" vspace=8 border=0></H4>\n<P>Alkacon Software provides software development services for the digital business. We are specialized in web - based content management solutions build on open source Java Software. </P>\n<P>Alkacon Software is a major contributor to the <A HREF=\"http://www.opencms.org\" target=_blank>OpenCms Project</A>. OpenCms is an enterprise - ready content management platform build in Java from open source components. OpenCms can easily be deployed on almost any existing IT infrastructure and provides powerful features especially suited for large enterprise internet or intranet applications. </P>\n<P>Alkacon Software offers standard <A HREF=\"/alkacon/en/services/opencms/index.html\" target=_self>service and support </A>packages for OpenCms, providing an optional layer of security and convenience often required for mission critical OpenCms installations.</P>\n<UL>\n<LI><IMG style=\"WIDTH: 125px; HEIGHT: 34px\" alt=OpenCms hspace=3 SRC=\"/opencms/opencms/pics/alkacon/logo_opencms_125.gif\" align=right border=0>Learn more about our <A HREF=\"/alkacon/en/services/index.html\" target=_self>Services</A> \n<LI>Subscribe to our&nbsp;<A HREF=\"/alkacon/en/company/contact/newsletter.html\" target=_self>Company Newsletter</A> \n<LI>Questions? <A HREF=\"/alkacon/en/company/contact/index.html\" target=_self>Contact us</A></LI></UL>\n<P>&nbsp;</P>]]></edittemplate>";
255         String JavaDoc search = "/pics/";
256         String JavaDoc replace = "/system/galleries/pics/";
257         String JavaDoc test = CmsStringUtil.substitute(content, search, replace);
258         assertEquals(
259             test,
260             "<edittemplate><![CDATA[<H4><IMG style=\"WIDTH: 77px; HEIGHT: 77px\" alt=\"Homepage animation\" hspace=8 SRC=\"/opencms/opencms/system/galleries/pics/alkacon/x_hp_ani04.gif\" align=right vspace=8 border=0><IMG style=\"WIDTH: 307px; HEIGHT: 52px\" alt=\"Homepage animation\" hspace=0 SRC=\"/opencms/opencms/system/galleries/pics/alkacon/x_hp_ani05.gif\" vspace=8 border=0></H4>\n<P>Alkacon Software provides software development services for the digital business. We are specialized in web - based content management solutions build on open source Java Software. </P>\n<P>Alkacon Software is a major contributor to the <A HREF=\"http://www.opencms.org\" target=_blank>OpenCms Project</A>. OpenCms is an enterprise - ready content management platform build in Java from open source components. OpenCms can easily be deployed on almost any existing IT infrastructure and provides powerful features especially suited for large enterprise internet or intranet applications. </P>\n<P>Alkacon Software offers standard <A HREF=\"/alkacon/en/services/opencms/index.html\" target=_self>service and support </A>packages for OpenCms, providing an optional layer of security and convenience often required for mission critical OpenCms installations.</P>\n<UL>\n<LI><IMG style=\"WIDTH: 125px; HEIGHT: 34px\" alt=OpenCms hspace=3 SRC=\"/opencms/opencms/system/galleries/pics/alkacon/logo_opencms_125.gif\" align=right border=0>Learn more about our <A HREF=\"/alkacon/en/services/index.html\" target=_self>Services</A> \n<LI>Subscribe to our&nbsp;<A HREF=\"/alkacon/en/company/contact/newsletter.html\" target=_self>Company Newsletter</A> \n<LI>Questions? <A HREF=\"/alkacon/en/company/contact/index.html\" target=_self>Contact us</A></LI></UL>\n<P>&nbsp;</P>]]></edittemplate>");
261     }
262
263     /**
264      * Tests <code>{@link CmsStringUtil#splitAsArray(String, char)}</code>.<p>
265      */

266     public void testSplitCharDelimiter() {
267
268         String JavaDoc toSplit;
269         char delimChar = '/';
270         String JavaDoc[] arrayResult;
271         List JavaDoc listResult;
272
273         // test usability for path-tokenization (e.g. admin tool of workplace)
274
toSplit = "/system/workplace/admin/searchindex/";
275         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimChar);
276         assertEquals(4, arrayResult.length);
277         assertEquals("system", arrayResult[0]);
278         assertEquals("workplace", arrayResult[1]);
279         assertEquals("admin", arrayResult[2]);
280         assertEquals("searchindex", arrayResult[3]);
281         listResult = CmsStringUtil.splitAsList(toSplit, delimChar);
282         assertEquals(Arrays.asList(arrayResult), listResult);
283
284         // test an empty String:
285
toSplit = "";
286         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimChar);
287         assertEquals(0, arrayResult.length);
288         listResult = CmsStringUtil.splitAsList(toSplit, delimChar);
289         assertEquals(Arrays.asList(arrayResult), listResult);
290
291         // test a whitespace only String
292
toSplit = " ";
293         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimChar);
294         assertEquals(1, arrayResult.length);
295         assertEquals(toSplit, arrayResult[0]);
296         listResult = CmsStringUtil.splitAsList(toSplit, delimChar);
297         assertEquals(Arrays.asList(arrayResult), listResult);
298
299         // with truncation
300
listResult = CmsStringUtil.splitAsList(toSplit, delimChar, true);
301         assertEquals(1, listResult.size());
302         assertEquals("", listResult.get(0));
303
304         // test a 1 separator-only String
305
toSplit = "/";
306         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimChar);
307         assertEquals(0, arrayResult.length);
308         listResult = CmsStringUtil.splitAsList(toSplit, delimChar);
309         assertEquals(Arrays.asList(arrayResult), listResult);
310
311         // test a 2 separator-only String
312
toSplit = "//";
313         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimChar);
314         assertEquals(1, arrayResult.length);
315         assertEquals("", arrayResult[0]);
316         listResult = CmsStringUtil.splitAsList(toSplit, delimChar);
317         assertEquals(Arrays.asList(arrayResult), listResult);
318
319         // test a single token String with starting delimiter
320
toSplit = "/token";
321         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimChar);
322         assertEquals(1, arrayResult.length);
323         assertEquals("token", arrayResult[0]);
324         listResult = CmsStringUtil.splitAsList(toSplit, delimChar);
325         assertEquals(Arrays.asList(arrayResult), listResult);
326
327         // test a single token String with ending delimiter
328
toSplit = "token/";
329         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimChar);
330         assertEquals(1, arrayResult.length);
331         assertEquals("token", arrayResult[0]);
332         listResult = CmsStringUtil.splitAsList(toSplit, delimChar);
333         assertEquals(Arrays.asList(arrayResult), listResult);
334
335         // test a 3 separator-only String
336
toSplit = "///";
337         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimChar);
338         assertEquals(2, arrayResult.length);
339         assertEquals("", arrayResult[0]);
340         assertEquals("", arrayResult[1]);
341         listResult = CmsStringUtil.splitAsList(toSplit, delimChar);
342         assertEquals(Arrays.asList(arrayResult), listResult);
343
344         toSplit = "/a // b/ c /";
345         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimChar);
346         assertEquals(4, arrayResult.length);
347         assertEquals("a ", arrayResult[0]);
348         assertEquals("", arrayResult[1]);
349         assertEquals(" b", arrayResult[2]);
350         assertEquals(" c ", arrayResult[3]);
351         listResult = CmsStringUtil.splitAsList(toSplit, delimChar);
352         assertEquals(Arrays.asList(arrayResult), listResult);
353
354         // with truncation
355
listResult = CmsStringUtil.splitAsList(toSplit, delimChar, true);
356         assertEquals(4, listResult.size());
357         assertEquals("a", listResult.get(0));
358         assertEquals("", listResult.get(1));
359         assertEquals("b", listResult.get(2));
360         assertEquals("c", listResult.get(3));
361     }
362
363     /**
364      * Tests <code>{@link CmsStringUtil#splitAsArray(String, String)}</code>.<p>
365      */

366     public void testSplitStringDelimiter() {
367
368         String JavaDoc toSplit;
369         String JavaDoc delimString = "/";
370         String JavaDoc[] arrayResult;
371         List JavaDoc listResult;
372
373         toSplit = "/system/workplace/admin/searchindex/";
374
375         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
376         assertEquals(4, arrayResult.length);
377         assertEquals("system", arrayResult[0]);
378         assertEquals("workplace", arrayResult[1]);
379         assertEquals("admin", arrayResult[2]);
380         assertEquals("searchindex", arrayResult[3]);
381         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
382         assertEquals(Arrays.asList(arrayResult), listResult);
383
384         // test an empty String:
385
toSplit = "";
386         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
387         assertEquals(0, arrayResult.length);
388         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
389         assertEquals(Arrays.asList(arrayResult), listResult);
390
391         // whitespace only String
392
toSplit = " ";
393         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
394         assertEquals(1, arrayResult.length);
395         assertEquals(toSplit, arrayResult[0]);
396         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
397         assertEquals(Arrays.asList(arrayResult), listResult);
398
399         // with truncation
400
listResult = CmsStringUtil.splitAsList(toSplit, delimString, true);
401         assertEquals(1, listResult.size());
402         assertEquals("", listResult.get(0));
403
404         // test a 1 separator-only String
405
toSplit = "/";
406         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
407         assertEquals(0, arrayResult.length);
408         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
409         assertEquals(Arrays.asList(arrayResult), listResult);
410
411         // test a 2 separator-only String
412
toSplit = "//";
413         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
414         assertEquals(1, arrayResult.length);
415         assertEquals("", arrayResult[0]);
416         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
417         assertEquals(Arrays.asList(arrayResult), listResult);
418
419         // test a single token String with starting delimiter
420
toSplit = "/token";
421         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
422         assertEquals(1, arrayResult.length);
423         assertEquals("token", arrayResult[0]);
424         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
425         assertEquals(Arrays.asList(arrayResult), listResult);
426
427         // test a single token String with ending delimiter
428
toSplit = "token/";
429         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
430         assertEquals(1, arrayResult.length);
431         assertEquals("token", arrayResult[0]);
432         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
433         assertEquals(Arrays.asList(arrayResult), listResult);
434
435         // test a 3 separator-only String
436
toSplit = "///";
437         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
438         assertEquals(2, arrayResult.length);
439         assertEquals("", arrayResult[0]);
440         assertEquals("", arrayResult[1]);
441         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
442         assertEquals(Arrays.asList(arrayResult), listResult);
443
444         toSplit = "/a // b/ c /";
445         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
446         assertEquals(4, arrayResult.length);
447         assertEquals("a ", arrayResult[0]);
448         assertEquals("", arrayResult[1]);
449         assertEquals(" b", arrayResult[2]);
450         assertEquals(" c ", arrayResult[3]);
451         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
452         assertEquals(Arrays.asList(arrayResult), listResult);
453
454         // with truncation
455
listResult = CmsStringUtil.splitAsList(toSplit, delimString, true);
456         assertEquals(4, listResult.size());
457         assertEquals("a", listResult.get(0));
458         assertEquals("", listResult.get(1));
459         assertEquals("b", listResult.get(2));
460         assertEquals("c", listResult.get(3));
461
462         // some tests with a separator longer than 1
463

464         delimString = ",,";
465         toSplit = ",,system,,workplace,,admin,,searchindex,,";
466         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
467         assertEquals(4, arrayResult.length);
468         assertEquals("system", arrayResult[0]);
469         assertEquals("workplace", arrayResult[1]);
470         assertEquals("admin", arrayResult[2]);
471         assertEquals("searchindex", arrayResult[3]);
472         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
473         assertEquals(Arrays.asList(arrayResult), listResult);
474
475         // test an empty String:
476
toSplit = "";
477         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
478         assertEquals(0, arrayResult.length);
479         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
480         assertEquals(Arrays.asList(arrayResult), listResult);
481
482         // test a whitespace String with truncation:
483
toSplit = " ";
484         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
485         assertEquals(1, arrayResult.length);
486         assertEquals(toSplit, arrayResult[0]);
487         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
488         assertEquals(Arrays.asList(arrayResult), listResult);
489
490         // test a 1 separator-only String
491
toSplit = ",,";
492         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
493         assertEquals(0, arrayResult.length);
494         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
495         assertEquals(Arrays.asList(arrayResult), listResult);
496
497         // test a 2 separator-only String
498
toSplit = ",,,,";
499         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
500         assertEquals(1, arrayResult.length);
501         assertEquals("", arrayResult[0]);
502         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
503         assertEquals(Arrays.asList(arrayResult), listResult);
504
505         // test a single token String with starting delimiter
506
toSplit = ",,token";
507         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
508         assertEquals(1, arrayResult.length);
509         assertEquals("token", arrayResult[0]);
510         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
511         assertEquals(Arrays.asList(arrayResult), listResult);
512
513         // test a single token String with ending delimiter
514
toSplit = "token,,";
515         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
516         assertEquals(1, arrayResult.length);
517         assertEquals("token", arrayResult[0]);
518         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
519         assertEquals(Arrays.asList(arrayResult), listResult);
520
521         // test a 3 separator-only String
522
toSplit = ",,,,,,";
523         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
524         assertEquals(2, arrayResult.length);
525         assertEquals("", arrayResult[0]);
526         assertEquals("", arrayResult[1]);
527         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
528         assertEquals(Arrays.asList(arrayResult), listResult);
529
530         toSplit = ",,a, aber nicht b,,,,b, aber nicht c,,c, but not a,,";
531         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
532         assertEquals(4, arrayResult.length);
533         assertEquals("a, aber nicht b", arrayResult[0]);
534         assertEquals("", arrayResult[1]);
535         assertEquals("b, aber nicht c", arrayResult[2]);
536         assertEquals("c, but not a", arrayResult[3]);
537         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
538         assertEquals(Arrays.asList(arrayResult), listResult);
539
540         delimString = "/delim/";
541         toSplit = "/delim fake at start/delim//not a delim//delim//delim//delim fake at end";
542         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
543         assertEquals(4, arrayResult.length);
544         assertEquals("/delim fake at start", arrayResult[0]);
545         assertEquals("/not a delim/", arrayResult[1]);
546         assertEquals("", arrayResult[2]);
547         assertEquals("/delim fake at end", arrayResult[3]);
548         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
549         assertEquals(Arrays.asList(arrayResult), listResult);
550
551         toSplit = "/delim fake at start/delim//not a delim//delim//delim//delim";
552         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
553         assertEquals(4, arrayResult.length);
554         assertEquals("/delim fake at start", arrayResult[0]);
555         assertEquals("/not a delim/", arrayResult[1]);
556         assertEquals("", arrayResult[2]);
557         assertEquals("/delim", arrayResult[3]);
558         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
559         assertEquals(Arrays.asList(arrayResult), listResult);
560
561         toSplit = "/delim//delim fake at start/delim//not a delim//delim//delim//delim fake at end/delim/";
562         arrayResult = CmsStringUtil.splitAsArray(toSplit, delimString);
563         assertEquals(4, arrayResult.length);
564         assertEquals("/delim fake at start", arrayResult[0]);
565         assertEquals("/not a delim/", arrayResult[1]);
566         assertEquals("", arrayResult[2]);
567         assertEquals("/delim fake at end", arrayResult[3]);
568         listResult = CmsStringUtil.splitAsList(toSplit, delimString);
569         assertEquals(Arrays.asList(arrayResult), listResult);
570     }
571
572     /**
573      * Tests the basic String substitution.<p>
574      */

575     public void testSubstitute() {
576
577         String JavaDoc test, result;
578
579         String JavaDoc content = "<a HREF=\"/opencms/opencms/test.jpg\">";
580         String JavaDoc search = "/opencms/opencms/";
581         String JavaDoc replace = "\\${path}";
582
583         test = CmsStringUtil.substitute(content, search, replace);
584         System.out.println(test);
585         assertEquals(test, "<a HREF=\"\\${path}test.jpg\">");
586
587         test = CmsStringUtil.substitute(test, replace, search);
588         assertEquals(test, "<a HREF=\"/opencms/opencms/test.jpg\">");
589
590         content = "[0-9]$1/[^a]|/([}>\"'\\[]\\s*)/pics/";
591         result = "[0-9]$1/[^a]|/([}>\"'\\[]\\s*)/pucs/";
592         test = CmsStringUtil.substitute(content, "i", "u");
593         assertEquals(test, result);
594
595         content = "/delim//delim fake at start/delim//not a delim//delim//delim//delim fake at end/delim/";
596         result = "REPLACED!/delim fake at startREPLACED!/not a delim/REPLACED!REPLACED!/delim fake at endREPLACED!";
597         test = CmsStringUtil.substitute(content, "/delim/", "REPLACED!");
598         assertEquals(test, result);
599     }
600 }
Popular Tags