1   package com.atlassian.core.util;
2   
3   import junit.framework.TestCase;
4   
5   /**
6    * @since v3.19
7    */
8   public class XMLUtilsTest extends TestCase
9   {
10      public void testEscape()
11      {
12          // these two MUST be escaped
13          assertEquals("&lt;", XMLUtils.escape("<"));
14          assertEquals("&amp;", XMLUtils.escape("&"));
15  
16          // the rest MAY be
17          assertEquals("&gt;", XMLUtils.escape(">"));
18          assertEquals("&quot;", XMLUtils.escape("\""));
19          assertEquals("&apos;", XMLUtils.escape("'"));
20  
21          // no C0 control characters allowed
22          assertEquals("\uFFFD", XMLUtils.escape("\u0000"));
23          assertEquals("\uFFFD", XMLUtils.escape("\u0007"));
24          assertEquals("\uFFFD", XMLUtils.escape("\u0011"));
25          assertEquals("\uFFFD", XMLUtils.escape("\u0014"));
26  
27          // no surrogates allowed
28          assertEquals("\uFFFD", XMLUtils.escape("\uD84C"));
29          assertEquals("\uFFFD", XMLUtils.escape("\uDFB4"));
30  
31          // C1 control character should be escaped
32          // http://www.cafeconleche.org/books/effectivexml/chapters/03.html
33          assertEquals("&#128;", XMLUtils.escape("\u0080"));
34          assertEquals("&#159;", XMLUtils.escape("\u009f"));
35  
36          // valid white space is left alone
37          assertEquals(" ", XMLUtils.escape(" "));
38          assertEquals("\t", XMLUtils.escape("\t"));
39          assertEquals("\r", XMLUtils.escape("\r"));
40          assertEquals("\n", XMLUtils.escape("\n"));
41  
42          assertEquals("\uFFFD", XMLUtils.escape("\uFFFE"));
43          assertEquals("\uFFFD", XMLUtils.escape("\uFFFF"));
44      }
45  }