Index: project.xml
===================================================================
RCS file: /cvsroot/wicket/wicket/project.xml,v
retrieving revision 1.68
diff -u -r1.68 project.xml
--- project.xml	28 Aug 2005 14:54:39 -0000	1.68
+++ project.xml	29 Aug 2005 11:48:25 -0000
@@ -2,7 +2,8 @@
 
 <project>
   <pomVersion>3</pomVersion>
-  <id>wicket</id>
+  <groupId>wicket</groupId>
+  <artifactId>wicket</artifactId>
   <name>Wicket</name>
   <groupId>wicket</groupId>
   <currentVersion>1.1-b3</currentVersion>
@@ -170,7 +171,6 @@
       <email>gwynevans at users.sourceforge.net</email>
       <roles/>
     </developer>
-  </developers>
     <developer>
       <name>Ate Douma</name>
       <id>adouma</id>
@@ -183,6 +183,7 @@
       <email>jan_blok at users.sourceforge.net</email>
       <roles/>
     </developer>
+  </developers>
   <contributors>
     <contributor>
       <name>Wouter de Jong</name>
Index: src/test/wicket/util/string/StringsTest.java
===================================================================
RCS file: /cvsroot/wicket/wicket/src/test/wicket/util/string/StringsTest.java,v
retrieving revision 1.6
diff -u -r1.6 StringsTest.java
--- src/test/wicket/util/string/StringsTest.java	28 Aug 2005 18:21:04 -0000	1.6
+++ src/test/wicket/util/string/StringsTest.java	29 Aug 2005 12:04:54 -0000
@@ -18,444 +18,445 @@
  */
 package wicket.util.string;
 
-import wicket.util.string.Strings;
-
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
+import java.io.UnsupportedEncodingException;
+
 /**
  * Test cases for the <code>Strings</code> class.
- * 
+ *
  * @author Jonathan Locke
  * @author Martijn Dashorst
  */
 public final class StringsTest extends TestCase
 {
-	/**
-	 * 
-	 */
-	public void test()
-	{
-		Assert.assertEquals("foo", Strings.lastPathComponent("bar.garply.foo", '.'));
-		Assert.assertEquals("foo", Strings.lastPathComponent("foo", '.'));
-		Assert.assertEquals("bar", Strings.firstPathComponent("bar.garply.foo", '.'));
-		Assert.assertEquals("foo", Strings.lastPathComponent("foo", '.'));
-		Assert.assertEquals("garply.foo", Strings.afterFirstPathComponent("bar.garply.foo", '.'));
-		Assert.assertEquals("", Strings.afterFirstPathComponent("foo", '.'));
-		Assert.assertEquals("bar.baz", Strings.beforeLast("bar.baz.foo", '.'));
-		Assert.assertEquals("", Strings.beforeLast("bar", '.'));
-		Assert.assertEquals("bar", Strings.beforeFirst("bar.baz.foo", '.'));
-		Assert.assertEquals("", Strings.beforeFirst("bar", '.'));
-		Assert.assertEquals("baz.foo", Strings.afterFirst("bar.baz.foo", '.'));
-		Assert.assertEquals("", Strings.afterFirst("bar", '.'));
-		Assert.assertEquals("foo", Strings.afterLast("bar.baz.foo", '.'));
-		Assert.assertEquals("", Strings.afterLast("bar", '.'));
-		Assert.assertEquals("foo", Strings.replaceAll("afaooaaa", "a", ""));
-		Assert.assertEquals("fuzzyffuzzyoofuzzyfuzzyfuzzy", Strings.replaceAll("afaooaaa", "a",
-				"fuzzy"));
-	}
-
-	/**
-	 * Tests the <code>beforeFirst</code> method.
-	 */
-	public void testBeforeFirst()
-	{
-		assertNull(Strings.beforeFirst(null, '.'));
-		assertEquals("", Strings.beforeFirst("", '.'));
-		assertEquals("", Strings.beforeFirst("", ' '));
-		assertEquals("", Strings.beforeFirst(".", '.'));
-		assertEquals("", Strings.beforeFirst("..", '.'));
-		assertEquals("com", Strings.beforeFirst("com.foo.bar", '.'));
-		assertEquals("com", Strings.beforeFirst("com foo bar", ' '));
-		assertEquals("com foo", Strings.beforeFirst("com foo.bar", '.'));
-	}
-
-	/**
-	 * Tests the <code>afterFirst</code> method.
-	 */
-	public void testAfterFirst()
-	{
-		assertNull(Strings.afterFirst(null, '.'));
-		assertEquals("", Strings.afterFirst("", '.'));
-		assertEquals("", Strings.afterFirst("", ' '));
-		assertEquals("", Strings.afterFirst(".", '.'));
-		assertEquals(".", Strings.afterFirst("..", '.'));
-		assertEquals("foo.bar", Strings.afterFirst("com.foo.bar", '.'));
-		assertEquals("foo bar", Strings.afterFirst("com foo bar", ' '));
-		assertEquals("bar", Strings.afterFirst("com.foo bar", ' '));
-	}
-
-	/**
-	 * Tests the <code>afterLast</code> method.
-	 */
-	public void testAfterLast()
-	{
-		assertNull(Strings.afterLast(null, '.'));
-		assertEquals("", Strings.afterLast("", '.'));
-		assertEquals("", Strings.afterLast("", ' '));
-		assertEquals("", Strings.afterLast(".", '.'));
-		assertEquals("", Strings.afterLast("..", '.'));
-		assertEquals("bar", Strings.afterLast("com.foo.bar", '.'));
-		assertEquals("bar", Strings.afterLast("com foo bar", ' '));
-		assertEquals("bar", Strings.afterLast("com foo.bar", '.'));
-	}
-
-	/**
-	 * Tests the beforeLastPathComponent method
-	 */
-	public void testBeforeLastPathComponent()
-	{
-		assertNull(Strings.beforeLastPathComponent(null, '.'));
-		assertEquals("", Strings.beforeLastPathComponent("", '.'));
-		assertEquals("", Strings.beforeLastPathComponent("", ' '));
-		assertEquals("", Strings.beforeLastPathComponent(".", '.'));
-		assertEquals(".", Strings.beforeLastPathComponent("..", '.'));
-		assertEquals("foo", Strings.beforeLastPathComponent("foo.bar", '.'));
-		assertEquals("", Strings.beforeLastPathComponent("foo.bar", ' '));
-		assertEquals("foo.ba", Strings.beforeLastPathComponent("foo.bar", 'r'));
-		assertEquals("com.foo", Strings.beforeLastPathComponent("com.foo.bar", '.'));
-	}
-
-	/**
-	 * Tests the capitalize method.
-	 */
-	public void testCapitalize()
-	{
-		assertEquals("Lorem ipsum dolor sit amet", Strings.capitalize("lorem ipsum dolor sit amet"));
-		assertEquals("Lorem ipsum dolor sit amet", Strings.capitalize("Lorem ipsum dolor sit amet"));
-		assertEquals(" abcdefghijklm", Strings.capitalize(" abcdefghijklm"));
-		assertEquals("", Strings.capitalize(""));
-		assertNull(Strings.capitalize(null));
-	}
-
-	/**
-	 * Tests the escapeMarkup method.
-	 */
-	public void testEscapeMarkup()
-	{
-		assertNull(Strings.escapeMarkup(null));
-		assertEquals("", Strings.escapeMarkup(""));
-
-		assertEquals("&amp;", Strings.escapeMarkup("&"));
-		assertEquals("&#", Strings.escapeMarkup("&#"));
-		assertEquals("&#0000;", Strings.escapeMarkup("&#0000;"));
-
-		assertEquals("&amp;amp;", Strings.escapeMarkup("&amp;"));
-		assertEquals("&lt; &gt;&amp;&quot;&#039;?:;{}[]-_+=()*^%$#@!~`", Strings
-				.escapeMarkup("< >&\"'?:;{}[]-_+=()*^%$#@!~`"));
-		assertEquals("&lt;&nbsp;&gt;&amp;&quot;&#039;?:;{}[]-_+=()*^%$#@!~`", Strings.escapeMarkup(
-				"< >&\"'?:;{}[]-_+=()*^%$#@!~`", true));
-	}
-
-	/**
-	 * Tests the escapeMarkup method with whitespace.
-	 */
-	public void testEscapeMarkupWhiteSpace()
-	{
-		assertNull(Strings.escapeMarkup(null, true));
-		assertEquals("", Strings.escapeMarkup("", true));
-
-		assertEquals("\n \t", Strings.escapeMarkup("\n \t", false));
-		assertEquals("\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", Strings.escapeMarkup("\n \t", true));
-		assertEquals("  ", Strings.escapeMarkup("  ", false));
-		assertEquals("&nbsp;&nbsp;", Strings.escapeMarkup("  ", true));
-	}
-
-	/**
-	 * Tests the escapeMarkup method with unicode escapes.
-	 */
-	public void testEscapeMarkupUnicode()
-	{
-		assertNull(Strings.escapeMarkup(null, true, true));
-		assertEquals("", Strings.escapeMarkup("", true, true));
-
-		assertEquals("&#199;&#252;&#233;&#226;&#228;&#224;&#229;&#231;&#234;&#235;", Strings
-				.escapeMarkup("Çüéâäàåçêë", false, true));
-
-		assertEquals("\n \t&#233;", Strings.escapeMarkup("\n \té", false, true));
-		assertEquals("\n \té", Strings.escapeMarkup("\n \té", false, false));
-	}
-
-	/**
-	 * Tests the <code>replaceHtmlEscapeNumber</code> method.
-	 */
-	public void testReplaceHtmlEscapeNumber()
-	{
-		assertNull(Strings.replaceHtmlEscapeNumber(null));
-		assertEquals("", Strings.replaceHtmlEscapeNumber(""));
-		assertEquals("abcdefghijklmë", Strings.replaceHtmlEscapeNumber("abcdefghijklmë"));
-		assertEquals("a &#", Strings.replaceHtmlEscapeNumber("a &#"));
-		assertEquals(
-				"Çüéâäàåçêë",
-				Strings
-						.replaceHtmlEscapeNumber("&#199;&#252;&#233;&#226;&#228;&#224;&#229;&#231;&#234;&#235;"));
-	}
-
-	/**
-	 * Tests the <code>firstPathComponent</code> method.
-	 */
-	public void testFirstPathComponent()
-	{
-		assertNull(Strings.firstPathComponent(null, '.'));
-		assertEquals("", Strings.firstPathComponent("", '.'));
-		assertEquals("foo", Strings.firstPathComponent("foo", '.'));
-		assertEquals("foo", Strings.firstPathComponent("foo.bar", '.'));
-		assertEquals("foo bar", Strings.firstPathComponent("foo bar", '.'));
-	}
-
-	/**
-	 * Tests the <code>isEmpty</code> method.
-	 */
-	public void testIsEmpty()
-	{
-		assertTrue(Strings.isEmpty(null));
-		assertTrue(Strings.isEmpty(""));
-		assertTrue(Strings.isEmpty(" "));
-		assertTrue(Strings.isEmpty("           "));
-		assertTrue(Strings.isEmpty(" \n\t"));
-		assertFalse(Strings.isEmpty("a"));
-		assertFalse(Strings.isEmpty(" a"));
-	}
-
-	/**
-	 * Tests the <code>isTrue</code> method.
-	 * 
-	 * @throws StringValueConversionException
-	 */
-	public void testIsTrue() throws StringValueConversionException
-	{
-		assertFalse(Strings.isTrue(null));
-		assertFalse(Strings.isTrue(""));
-		assertFalse(Strings.isTrue(" \n \t"));
-
-		assertFalse(Strings.isTrue("no"));
-		assertFalse(Strings.isTrue("n"));
-		assertFalse(Strings.isTrue("false"));
-		assertFalse(Strings.isTrue("nO"));
-		assertFalse(Strings.isTrue("N"));
-		assertFalse(Strings.isTrue("fAlSe"));
-		assertFalse(Strings.isTrue("0"));
-
-		assertTrue(Strings.isTrue("yes"));
-		assertTrue(Strings.isTrue("y"));
-		assertTrue(Strings.isTrue("true"));
-		assertTrue(Strings.isTrue("1"));
-		assertTrue(Strings.isTrue("YeS"));
-		assertTrue(Strings.isTrue("Y"));
-		assertTrue(Strings.isTrue("tRuE"));
-		assertTrue(Strings.isTrue("1"));
-
-		try
-		{
-			Strings.isTrue("foo");
-			fail("Exception expected");
-		}
-		catch (StringValueConversionException e)
-		{
-			assertTrue(true);
-		}
-	}
-
-	/**
-	 * Tests the <code>replaceAll</code> method.
-	 */
-	public void testReplaceAll()
-	{
-		assertNull(Strings.replaceAll(null, null, null));
-		assertNull(Strings.replaceAll(null, "", null));
-		assertNull(Strings.replaceAll(null, null, ""));
-		assertNull(Strings.replaceAll(null, "", ""));
-
-		assertEquals("", Strings.replaceAll("", null, null));
-		assertEquals("", Strings.replaceAll("", "", null));
-		assertEquals("", Strings.replaceAll("", null, ""));
-		assertEquals("", Strings.replaceAll("", "", ""));
-		assertEquals("", Strings.replaceAll("", "", "abc"));
-		assertEquals("", Strings.replaceAll("", "abc", "def"));
-		assertEquals("", Strings.replaceAll("abc", "abc", ""));
-
-		assertEquals("abc", Strings.replaceAll("abc", "", ""));
-		assertEquals("abc", Strings.replaceAll("abc", "abc", "abc"));
-		assertEquals("def", Strings.replaceAll("abc", "abc", "def"));
-		assertEquals("abc", Strings.replaceAll("abc", "ABC", ""));
-
-		assertEquals("abc", Strings.replaceAll("abc", "d", null));
-		assertEquals("ab", Strings.replaceAll("abc", "c", null));
-		assertEquals("bc", Strings.replaceAll("abc", "a", null));
-
-		assertEquals("aaaa", Strings.replaceAll("aa", "a", "aa"));
-	}
-
-	/**
-	 * Tests the <code>split</code> method.
-	 */
-	public void testSplit()
-	{
-		assertEquals(new String[0], Strings.split(null, '.'));
-		assertEquals(new String[0], Strings.split("", '.'));
-		assertEquals(new String[] { "", "" }, Strings.split(".", '.'));
-		assertEquals(new String[] { "a", "" }, Strings.split("a.", '.'));
-		assertEquals(new String[] { "a", "b" }, Strings.split("a.b", '.'));
-		assertEquals(new String[] { "a", "b", "c" }, Strings.split("a.b.c", '.'));
-		assertEquals(new String[] { "a", "b", "c" }, Strings.split("a b c", ' '));
-		assertEquals(new String[] { "abc" }, Strings.split("abc", ' '));
-	}
-
-	/**
-	 * Tests the <code>stripEnding</code> method.
-	 */
-	public void testStripEnding()
-	{
-		assertNull(Strings.stripEnding(null, null));
-		assertEquals("", Strings.stripEnding("", null));
-		assertEquals("", Strings.stripEnding("", ""));
-		assertEquals("a", Strings.stripEnding("a", ""));
-		assertEquals("", Strings.stripEnding("a", "a"));
-		assertEquals("a", Strings.stripEnding("a", "aa"));
-		assertEquals("abc", Strings.stripEnding("abc", "ab"));
-	}
-
-	/**
-	 * Tests the <code>toBoolean</code> method.
-	 * 
-	 * @throws StringValueConversionException
-	 */
-	public void testToBoolean() throws StringValueConversionException
-	{
-		assertEquals(Boolean.FALSE, Strings.toBoolean(null));
-		assertEquals(Boolean.FALSE, Strings.toBoolean("off"));
-		assertEquals(Boolean.FALSE, Strings.toBoolean("no"));
-		assertEquals(Boolean.FALSE, Strings.toBoolean("n"));
-		assertEquals(Boolean.FALSE, Strings.toBoolean("false"));
-		assertEquals(Boolean.FALSE, Strings.toBoolean("0"));
-
-		assertEquals(Boolean.TRUE, Strings.toBoolean("on"));
-		assertEquals(Boolean.TRUE, Strings.toBoolean("yes"));
-		assertEquals(Boolean.TRUE, Strings.toBoolean("y"));
-		assertEquals(Boolean.TRUE, Strings.toBoolean("true"));
-		assertEquals(Boolean.TRUE, Strings.toBoolean("1"));
-
-		try
-		{
-			Strings.toBoolean("waar");
-			fail("Exception expected");
-		}
-		catch (StringValueConversionException e)
-		{
-			assertTrue(true);
-		}
-	}
-
-	/**
-	 * Tests the <code>toChar</code> method.
-	 * 
-	 * @throws StringValueConversionException
-	 */
-	public void testToChar() throws StringValueConversionException
-	{
-		assertEquals(' ', Strings.toChar(" "));
-		assertEquals('a', Strings.toChar("a"));
-
-		try
-		{
-			Strings.toChar("");
-			fail("Exception expected");
-		}
-		catch (StringValueConversionException e)
-		{
-		}
-		try
-		{
-			Strings.toChar(null);
-			fail("Exception expected");
-		}
-		catch (StringValueConversionException e)
-		{
-		}
-		try
-		{
-			Strings.toChar("aa");
-			fail("Exception expected");
-		}
-		catch (StringValueConversionException e)
-		{
-		}
-	}
-
-	/**
-	 * Tests the <code>toMultilineMarkup</code> method.
-	 * 
-	 * @todo TODO make paragraphs xhtml compliant.
-	 */
-	public void testToMultilineMarkup()
-	{
-		assertNull(Strings.toMultilineMarkup(null));
-		assertEquals("", Strings.toMultilineMarkup(""));
-		assertEquals("abc", Strings.toMultilineMarkup("abc"));
-		assertEquals("abc", Strings.toMultilineMarkup("abc\n"));
-		assertEquals("abc<br />def", Strings.toMultilineMarkup("abc\ndef"));
-		assertEquals("abc<br />def", Strings.toMultilineMarkup("abc\r\ndef"));
-		assertEquals("abc<br />def<br />ghi", Strings.toMultilineMarkup("abc\ndef\nghi"));
-
-		assertEquals("abc<p>def<p>ghi", Strings.toMultilineMarkup("abc\n\ndef\n\nghi"));
-		assertEquals("abc<p>def<p>ghi", Strings.toMultilineMarkup("abc\r\n\r\ndef\r\n\r\nghi"));
-	}
-
-	/**
-	 * Tests the <code>toString</code> method.
-	 */
-	public void testToString()
-	{
-		assertNull(Strings.toString((Object)null));
-		assertEquals("", Strings.toString(""));
-		
-		assertEquals("<Null Throwable>", Strings.toString((Throwable)null));
-		try
-		{
-			throw new IllegalArgumentException("Foo");
-		}
-		catch (IllegalArgumentException e)
-		{
-			final String toString = Strings.toString((Object)e);
-			assertEquals("java.lang.IllegalArgumentException: Foo", Strings.beforeFirst(toString, '\n').trim());
-		}
-	}
-
-	/**
-	 * Asserts that both string arrays are equal.
-	 * 
-	 * @param expected
-	 *            the expected value
-	 * @param actual
-	 *            the actual value
-	 */
-	private void assertEquals(String[] expected, String[] actual)
-	{
-		if (expected == null)
-		{
-			assertNull(actual);
-		}
-		assertEquals(stringValue(expected), stringValue(actual));
-	}
-
-	/**
-	 * Converts an array of strings to a String. {"a", "b"} becomes: "{a,b}"
-	 * 
-	 * @param arrayOfStrings
-	 *            the array to convert
-	 * @return the array as a string.
-	 */
-	private String stringValue(String[] arrayOfStrings)
-	{
-		StringBuffer sb = new StringBuffer("{");
-		String komma = "";
-		for (int i = 0; i < arrayOfStrings.length; i++)
-		{
-			sb.append(komma);
-			sb.append(arrayOfStrings[i]);
-			komma = ",";
-		}
-		sb.append("}");
-		return sb.toString();
-	}
+    /**
+     *
+     */
+    public void test()
+    {
+        Assert.assertEquals("foo", Strings.lastPathComponent("bar.garply.foo", '.'));
+        Assert.assertEquals("foo", Strings.lastPathComponent("foo", '.'));
+        Assert.assertEquals("bar", Strings.firstPathComponent("bar.garply.foo", '.'));
+        Assert.assertEquals("foo", Strings.lastPathComponent("foo", '.'));
+        Assert.assertEquals("garply.foo", Strings.afterFirstPathComponent("bar.garply.foo", '.'));
+        Assert.assertEquals("", Strings.afterFirstPathComponent("foo", '.'));
+        Assert.assertEquals("bar.baz", Strings.beforeLast("bar.baz.foo", '.'));
+        Assert.assertEquals("", Strings.beforeLast("bar", '.'));
+        Assert.assertEquals("bar", Strings.beforeFirst("bar.baz.foo", '.'));
+        Assert.assertEquals("", Strings.beforeFirst("bar", '.'));
+        Assert.assertEquals("baz.foo", Strings.afterFirst("bar.baz.foo", '.'));
+        Assert.assertEquals("", Strings.afterFirst("bar", '.'));
+        Assert.assertEquals("foo", Strings.afterLast("bar.baz.foo", '.'));
+        Assert.assertEquals("", Strings.afterLast("bar", '.'));
+        Assert.assertEquals("foo", Strings.replaceAll("afaooaaa", "a", ""));
+        Assert.assertEquals("fuzzyffuzzyoofuzzyfuzzyfuzzy", Strings.replaceAll("afaooaaa", "a",
+                "fuzzy"));
+    }
+
+    /**
+     * Tests the <code>beforeFirst</code> method.
+     */
+    public void testBeforeFirst()
+    {
+        assertNull(Strings.beforeFirst(null, '.'));
+        assertEquals("", Strings.beforeFirst("", '.'));
+        assertEquals("", Strings.beforeFirst("", ' '));
+        assertEquals("", Strings.beforeFirst(".", '.'));
+        assertEquals("", Strings.beforeFirst("..", '.'));
+        assertEquals("com", Strings.beforeFirst("com.foo.bar", '.'));
+        assertEquals("com", Strings.beforeFirst("com foo bar", ' '));
+        assertEquals("com foo", Strings.beforeFirst("com foo.bar", '.'));
+    }
+
+    /**
+     * Tests the <code>afterFirst</code> method.
+     */
+    public void testAfterFirst()
+    {
+        assertNull(Strings.afterFirst(null, '.'));
+        assertEquals("", Strings.afterFirst("", '.'));
+        assertEquals("", Strings.afterFirst("", ' '));
+        assertEquals("", Strings.afterFirst(".", '.'));
+        assertEquals(".", Strings.afterFirst("..", '.'));
+        assertEquals("foo.bar", Strings.afterFirst("com.foo.bar", '.'));
+        assertEquals("foo bar", Strings.afterFirst("com foo bar", ' '));
+        assertEquals("bar", Strings.afterFirst("com.foo bar", ' '));
+    }
+
+    /**
+     * Tests the <code>afterLast</code> method.
+     */
+    public void testAfterLast()
+    {
+        assertNull(Strings.afterLast(null, '.'));
+        assertEquals("", Strings.afterLast("", '.'));
+        assertEquals("", Strings.afterLast("", ' '));
+        assertEquals("", Strings.afterLast(".", '.'));
+        assertEquals("", Strings.afterLast("..", '.'));
+        assertEquals("bar", Strings.afterLast("com.foo.bar", '.'));
+        assertEquals("bar", Strings.afterLast("com foo bar", ' '));
+        assertEquals("bar", Strings.afterLast("com foo.bar", '.'));
+    }
+
+    /**
+     * Tests the beforeLastPathComponent method
+     */
+    public void testBeforeLastPathComponent()
+    {
+        assertNull(Strings.beforeLastPathComponent(null, '.'));
+        assertEquals("", Strings.beforeLastPathComponent("", '.'));
+        assertEquals("", Strings.beforeLastPathComponent("", ' '));
+        assertEquals("", Strings.beforeLastPathComponent(".", '.'));
+        assertEquals(".", Strings.beforeLastPathComponent("..", '.'));
+        assertEquals("foo", Strings.beforeLastPathComponent("foo.bar", '.'));
+        assertEquals("", Strings.beforeLastPathComponent("foo.bar", ' '));
+        assertEquals("foo.ba", Strings.beforeLastPathComponent("foo.bar", 'r'));
+        assertEquals("com.foo", Strings.beforeLastPathComponent("com.foo.bar", '.'));
+    }
+
+    /**
+     * Tests the capitalize method.
+     */
+    public void testCapitalize()
+    {
+        assertEquals("Lorem ipsum dolor sit amet", Strings.capitalize("lorem ipsum dolor sit amet"));
+        assertEquals("Lorem ipsum dolor sit amet", Strings.capitalize("Lorem ipsum dolor sit amet"));
+        assertEquals(" abcdefghijklm", Strings.capitalize(" abcdefghijklm"));
+        assertEquals("", Strings.capitalize(""));
+        assertNull(Strings.capitalize(null));
+    }
+
+    /**
+     * Tests the escapeMarkup method.
+     */
+    public void testEscapeMarkup()
+    {
+        assertNull(Strings.escapeMarkup(null));
+        assertEquals("", Strings.escapeMarkup(""));
+
+        assertEquals("&amp;", Strings.escapeMarkup("&"));
+        assertEquals("&#", Strings.escapeMarkup("&#"));
+        assertEquals("&#0000;", Strings.escapeMarkup("&#0000;"));
+
+        assertEquals("&amp;amp;", Strings.escapeMarkup("&amp;"));
+        assertEquals("&lt; &gt;&amp;&quot;&#039;?:;{}[]-_+=()*^%$#@!~`", Strings
+                .escapeMarkup("< >&\"'?:;{}[]-_+=()*^%$#@!~`"));
+        assertEquals("&lt;&nbsp;&gt;&amp;&quot;&#039;?:;{}[]-_+=()*^%$#@!~`", Strings.escapeMarkup(
+                "< >&\"'?:;{}[]-_+=()*^%$#@!~`", true));
+    }
+
+    /**
+     * Tests the escapeMarkup method with whitespace.
+     */
+    public void testEscapeMarkupWhiteSpace()
+    {
+        assertNull(Strings.escapeMarkup(null, true));
+        assertEquals("", Strings.escapeMarkup("", true));
+
+        assertEquals("\n \t", Strings.escapeMarkup("\n \t", false));
+        assertEquals("\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", Strings.escapeMarkup("\n \t", true));
+        assertEquals("  ", Strings.escapeMarkup("  ", false));
+        assertEquals("&nbsp;&nbsp;", Strings.escapeMarkup("  ", true));
+    }
+
+    /**
+     * Tests the escapeMarkup method with unicode escapes.
+     */
+    public void testEscapeMarkupUnicode() throws UnsupportedEncodingException {
+        assertNull(Strings.escapeMarkup(null, true, true));
+        assertEquals("", Strings.escapeMarkup("", true, true));
+
+        assertEquals("&#199;&#252;&#233;&#226;&#228;&#224;&#229;&#231;&#234;&#235;", Strings
+                .escapeMarkup(convertNonASCIIString("Çüéâäàåçêë"), false, true));
+
+        assertEquals("\n \t&#233;", Strings.escapeMarkup(convertNonASCIIString("\n \té"), false, true));
+        assertEquals(convertNonASCIIString("\n \té"), Strings.escapeMarkup(convertNonASCIIString("\n \té"), false, false));
+    }
+
+    /**
+     * Tests the <code>replaceHtmlEscapeNumber</code> method.
+     */
+    public void testReplaceHtmlEscapeNumber() throws UnsupportedEncodingException {
+        assertNull(Strings.replaceHtmlEscapeNumber(null));
+        assertEquals("", Strings.replaceHtmlEscapeNumber(""));
+        assertEquals("abcdefghijklmë", Strings.replaceHtmlEscapeNumber("abcdefghijklmë"));
+        assertEquals("a &#", Strings.replaceHtmlEscapeNumber("a &#"));
+        assertEquals(convertNonASCIIString("Çüéâäàåçêë"),
+                Strings
+                        .replaceHtmlEscapeNumber("&#199;&#252;&#233;&#226;&#228;&#224;&#229;&#231;&#234;&#235;"));
+    }
+
+    private String convertNonASCIIString(String str) throws UnsupportedEncodingException {
+        return new String(str.getBytes(), "iso-8859-1");
+    }
+
+    /**
+     * Tests the <code>firstPathComponent</code> method.
+     */
+    public void testFirstPathComponent()
+    {
+        assertNull(Strings.firstPathComponent(null, '.'));
+        assertEquals("", Strings.firstPathComponent("", '.'));
+        assertEquals("foo", Strings.firstPathComponent("foo", '.'));
+        assertEquals("foo", Strings.firstPathComponent("foo.bar", '.'));
+        assertEquals("foo bar", Strings.firstPathComponent("foo bar", '.'));
+    }
+
+    /**
+     * Tests the <code>isEmpty</code> method.
+     */
+    public void testIsEmpty()
+    {
+        assertTrue(Strings.isEmpty(null));
+        assertTrue(Strings.isEmpty(""));
+        assertTrue(Strings.isEmpty(" "));
+        assertTrue(Strings.isEmpty("           "));
+        assertTrue(Strings.isEmpty(" \n\t"));
+        assertFalse(Strings.isEmpty("a"));
+        assertFalse(Strings.isEmpty(" a"));
+    }
+
+    /**
+     * Tests the <code>isTrue</code> method.
+     *
+     * @throws StringValueConversionException
+     */
+    public void testIsTrue() throws StringValueConversionException
+    {
+        assertFalse(Strings.isTrue(null));
+        assertFalse(Strings.isTrue(""));
+        assertFalse(Strings.isTrue(" \n \t"));
+
+        assertFalse(Strings.isTrue("no"));
+        assertFalse(Strings.isTrue("n"));
+        assertFalse(Strings.isTrue("false"));
+        assertFalse(Strings.isTrue("nO"));
+        assertFalse(Strings.isTrue("N"));
+        assertFalse(Strings.isTrue("fAlSe"));
+        assertFalse(Strings.isTrue("0"));
+
+        assertTrue(Strings.isTrue("yes"));
+        assertTrue(Strings.isTrue("y"));
+        assertTrue(Strings.isTrue("true"));
+        assertTrue(Strings.isTrue("1"));
+        assertTrue(Strings.isTrue("YeS"));
+        assertTrue(Strings.isTrue("Y"));
+        assertTrue(Strings.isTrue("tRuE"));
+        assertTrue(Strings.isTrue("1"));
+
+        try
+        {
+            Strings.isTrue("foo");
+            fail("Exception expected");
+        }
+        catch (StringValueConversionException e)
+        {
+            assertTrue(true);
+        }
+    }
+
+    /**
+     * Tests the <code>replaceAll</code> method.
+     */
+    public void testReplaceAll()
+    {
+        assertNull(Strings.replaceAll(null, null, null));
+        assertNull(Strings.replaceAll(null, "", null));
+        assertNull(Strings.replaceAll(null, null, ""));
+        assertNull(Strings.replaceAll(null, "", ""));
+
+        assertEquals("", Strings.replaceAll("", null, null));
+        assertEquals("", Strings.replaceAll("", "", null));
+        assertEquals("", Strings.replaceAll("", null, ""));
+        assertEquals("", Strings.replaceAll("", "", ""));
+        assertEquals("", Strings.replaceAll("", "", "abc"));
+        assertEquals("", Strings.replaceAll("", "abc", "def"));
+        assertEquals("", Strings.replaceAll("abc", "abc", ""));
+
+        assertEquals("abc", Strings.replaceAll("abc", "", ""));
+        assertEquals("abc", Strings.replaceAll("abc", "abc", "abc"));
+        assertEquals("def", Strings.replaceAll("abc", "abc", "def"));
+        assertEquals("abc", Strings.replaceAll("abc", "ABC", ""));
+
+        assertEquals("abc", Strings.replaceAll("abc", "d", null));
+        assertEquals("ab", Strings.replaceAll("abc", "c", null));
+        assertEquals("bc", Strings.replaceAll("abc", "a", null));
+
+        assertEquals("aaaa", Strings.replaceAll("aa", "a", "aa"));
+    }
+
+    /**
+     * Tests the <code>split</code> method.
+     */
+    public void testSplit()
+    {
+        assertEquals(new String[0], Strings.split(null, '.'));
+        assertEquals(new String[0], Strings.split("", '.'));
+        assertEquals(new String[] { "", "" }, Strings.split(".", '.'));
+        assertEquals(new String[] { "a", "" }, Strings.split("a.", '.'));
+        assertEquals(new String[] { "a", "b" }, Strings.split("a.b", '.'));
+        assertEquals(new String[] { "a", "b", "c" }, Strings.split("a.b.c", '.'));
+        assertEquals(new String[] { "a", "b", "c" }, Strings.split("a b c", ' '));
+        assertEquals(new String[] { "abc" }, Strings.split("abc", ' '));
+    }
+
+    /**
+     * Tests the <code>stripEnding</code> method.
+     */
+    public void testStripEnding()
+    {
+        assertNull(Strings.stripEnding(null, null));
+        assertEquals("", Strings.stripEnding("", null));
+        assertEquals("", Strings.stripEnding("", ""));
+        assertEquals("a", Strings.stripEnding("a", ""));
+        assertEquals("", Strings.stripEnding("a", "a"));
+        assertEquals("a", Strings.stripEnding("a", "aa"));
+        assertEquals("abc", Strings.stripEnding("abc", "ab"));
+    }
+
+    /**
+     * Tests the <code>toBoolean</code> method.
+     *
+     * @throws StringValueConversionException
+     */
+    public void testToBoolean() throws StringValueConversionException
+    {
+        assertEquals(Boolean.FALSE, Strings.toBoolean(null));
+        assertEquals(Boolean.FALSE, Strings.toBoolean("off"));
+        assertEquals(Boolean.FALSE, Strings.toBoolean("no"));
+        assertEquals(Boolean.FALSE, Strings.toBoolean("n"));
+        assertEquals(Boolean.FALSE, Strings.toBoolean("false"));
+        assertEquals(Boolean.FALSE, Strings.toBoolean("0"));
+
+        assertEquals(Boolean.TRUE, Strings.toBoolean("on"));
+        assertEquals(Boolean.TRUE, Strings.toBoolean("yes"));
+        assertEquals(Boolean.TRUE, Strings.toBoolean("y"));
+        assertEquals(Boolean.TRUE, Strings.toBoolean("true"));
+        assertEquals(Boolean.TRUE, Strings.toBoolean("1"));
+
+        try
+        {
+            Strings.toBoolean("waar");
+            fail("Exception expected");
+        }
+        catch (StringValueConversionException e)
+        {
+            assertTrue(true);
+        }
+    }
+
+    /**
+     * Tests the <code>toChar</code> method.
+     *
+     * @throws StringValueConversionException
+     */
+    public void testToChar() throws StringValueConversionException
+    {
+        assertEquals(' ', Strings.toChar(" "));
+        assertEquals('a', Strings.toChar("a"));
+
+        try
+        {
+            Strings.toChar("");
+            fail("Exception expected");
+        }
+        catch (StringValueConversionException e)
+        {
+        }
+        try
+        {
+            Strings.toChar(null);
+            fail("Exception expected");
+        }
+        catch (StringValueConversionException e)
+        {
+        }
+        try
+        {
+            Strings.toChar("aa");
+            fail("Exception expected");
+        }
+        catch (StringValueConversionException e)
+        {
+        }
+    }
+
+    /**
+     * Tests the <code>toMultilineMarkup</code> method.
+     *
+     * @todo TODO make paragraphs xhtml compliant.
+     */
+    public void testToMultilineMarkup()
+    {
+        assertNull(Strings.toMultilineMarkup(null));
+        assertEquals("", Strings.toMultilineMarkup(""));
+        assertEquals("abc", Strings.toMultilineMarkup("abc"));
+        assertEquals("abc", Strings.toMultilineMarkup("abc\n"));
+        assertEquals("abc<br />def", Strings.toMultilineMarkup("abc\ndef"));
+        assertEquals("abc<br />def", Strings.toMultilineMarkup("abc\r\ndef"));
+        assertEquals("abc<br />def<br />ghi", Strings.toMultilineMarkup("abc\ndef\nghi"));
+
+        assertEquals("abc<p>def<p>ghi", Strings.toMultilineMarkup("abc\n\ndef\n\nghi"));
+        assertEquals("abc<p>def<p>ghi", Strings.toMultilineMarkup("abc\r\n\r\ndef\r\n\r\nghi"));
+    }
+
+    /**
+     * Tests the <code>toString</code> method.
+     */
+    public void testToString()
+    {
+        assertNull(Strings.toString((Object)null));
+        assertEquals("", Strings.toString(""));
+
+        assertEquals("<Null Throwable>", Strings.toString(null));
+        try
+        {
+            throw new IllegalArgumentException("Foo");
+        }
+        catch (IllegalArgumentException e)
+        {
+            final String toString = Strings.toString((Object)e);
+            assertEquals("java.lang.IllegalArgumentException: Foo", Strings.beforeFirst(toString, '\n').trim());
+        }
+    }
+
+    /**
+     * Asserts that both string arrays are equal.
+     *
+     * @param expected
+     *            the expected value
+     * @param actual
+     *            the actual value
+     */
+    private void assertEquals(String[] expected, String[] actual)
+    {
+        if (expected == null)
+        {
+            assertNull(actual);
+        }
+        assertEquals(stringValue(expected), stringValue(actual));
+    }
+
+    /**
+     * Converts an array of strings to a String. {"a", "b"} becomes: "{a,b}"
+     *
+     * @param arrayOfStrings
+     *            the array to convert
+     * @return the array as a string.
+     */
+    private String stringValue(String[] arrayOfStrings)
+    {
+        StringBuffer sb = new StringBuffer("{");
+        String komma = "";
+        for (int i = 0; i < arrayOfStrings.length; i++)
+        {
+            sb.append(komma);
+            sb.append(arrayOfStrings[i]);
+            komma = ",";
+        }
+        sb.append("}");
+        return sb.toString();
+    }
 }
