1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */ 
17   
18  package org.apache.commons.betwixt;
19  
20  import junit.framework.Test;
21  import junit.framework.TestSuite;
22  import junit.textui.TestRunner;
23  
24  /** Test harness for the XMLUtils
25    *
26    * @author Robert Burrell Donkin
27    * @version $Revision: 438373 $
28    */
29  public class TestXMLUtils extends AbstractTestCase {
30      
31      public static void main( String[] args ) {
32          TestRunner.run( suite() );
33      }
34      
35      public static Test suite() {
36          return new TestSuite(TestXMLUtils.class);
37      }
38      
39      public TestXMLUtils(String testName) {
40          super(testName);
41      }
42      
43      /**
44       * Test for some common xml naming 
45       */
46      public void testXMLNameTest() {
47          // just go through some common cases to make sure code is working
48          assertEquals("Testing name 'Name<'", false, XMLUtils.isWellFormedXMLName("Name<"));
49          assertEquals("Testing name 'Name>'", false, XMLUtils.isWellFormedXMLName("Name>"));
50          assertEquals("Testing name 'Name''", false, XMLUtils.isWellFormedXMLName("Name'"));
51          assertEquals("Testing name 'Name_:-.'", true, XMLUtils.isWellFormedXMLName("Name_:-."));
52          assertEquals("Testing name '.Name'", false, XMLUtils.isWellFormedXMLName(".Name"));
53          assertEquals("Testing name '-Name'", false, XMLUtils.isWellFormedXMLName("-Name"));
54          assertEquals("Testing name ':Name'", true, XMLUtils.isWellFormedXMLName(":Name"));
55          assertEquals("Testing name '_Name'", true, XMLUtils.isWellFormedXMLName("_Name"));
56          assertEquals("Testing name 'A0123456789Name", true, XMLUtils.isWellFormedXMLName("A0123456789Name"));
57      }
58      
59      /** Test attribute escaping */
60      public void testAttributeEscaping() {
61          assertEquals("Escaping: <", "&lt;", XMLUtils.escapeAttributeValue("<"));
62          assertEquals("Escaping: >", "&gt;", XMLUtils.escapeAttributeValue(">"));
63          assertEquals("Escaping: '", "&apos;", XMLUtils.escapeAttributeValue("'"));
64          assertEquals("Escaping: \"", "&quot;", XMLUtils.escapeAttributeValue("\""));
65          assertEquals("Escaping: &", "&amp;", XMLUtils.escapeAttributeValue("&"));
66          assertEquals("Escaping: 1<", "1&lt;", XMLUtils.escapeAttributeValue("1<"));
67          assertEquals("Escaping: 1>", "1&gt;", XMLUtils.escapeAttributeValue("1>"));
68          assertEquals("Escaping: 1'", "1&apos;", XMLUtils.escapeAttributeValue("1'"));
69          assertEquals("Escaping: 1\"", "1&quot;", XMLUtils.escapeAttributeValue("1\""));
70          assertEquals("Escaping: 1&", "1&amp;", XMLUtils.escapeAttributeValue("1&"));
71          assertEquals("Escaping: <2", "&lt;2", XMLUtils.escapeAttributeValue("<2"));
72          assertEquals("Escaping: >2", "&gt;2", XMLUtils.escapeAttributeValue(">2"));
73          assertEquals("Escaping: '2", "&apos;2", XMLUtils.escapeAttributeValue("'2"));
74          assertEquals("Escaping: \"2", "&quot;2", XMLUtils.escapeAttributeValue("\"2"));
75          assertEquals("Escaping: &2", "&amp;2", XMLUtils.escapeAttributeValue("&2"));
76          assertEquals("Escaping: a<b", "a&lt;b", XMLUtils.escapeAttributeValue("a<b"));
77          assertEquals("Escaping: a>b", "a&gt;b", XMLUtils.escapeAttributeValue("a>b"));
78          assertEquals("Escaping: a'b", "a&apos;b", XMLUtils.escapeAttributeValue("a'b"));
79          assertEquals("Escaping: a\"b", "a&quot;b", XMLUtils.escapeAttributeValue("a\"b"));
80          assertEquals("Escaping: a&b", "a&amp;b", XMLUtils.escapeAttributeValue("a&b"));
81          assertEquals("Escaping: <<abba", "&lt;&lt;abba", XMLUtils.escapeAttributeValue("<<abba"));
82          assertEquals("Escaping: >>abba", "&gt;&gt;abba", XMLUtils.escapeAttributeValue(">>abba"));
83          assertEquals("Escaping: ''abba", "&apos;&apos;abba", XMLUtils.escapeAttributeValue("''abba"));
84          assertEquals("Escaping: \"\"abba", "&quot;&quot;abba", XMLUtils.escapeAttributeValue("\"\"abba"));
85          assertEquals("Escaping: &&abba", "&amp;&amp;abba", XMLUtils.escapeAttributeValue("&&abba"));
86          assertEquals(
87              "Escaping: a<>b''c\"e>f'&g", 
88              "a&lt;&gt;b&apos;&apos;c&quot;e&gt;f&apos;&amp;g", 
89              XMLUtils.escapeAttributeValue("a<>b''c\"e>f'&g"));
90          
91      }
92      
93      /** 
94       * Test CDATA escaping 
95       * Within a CDATA section, only the CDEnd
96       * string ']]>' is recognized as markup.
97       * Angle brackets and amphersands may occur in their literal form.
98       */
99      public void testCDATAEscaping() {
100         assertEquals("Escaping: <", "<", XMLUtils.escapeCDATAContent("<"));
101         assertEquals("Escaping: >", ">", XMLUtils.escapeCDATAContent(">"));
102         assertEquals("Escaping: '", "'", XMLUtils.escapeCDATAContent("'"));
103         assertEquals("Escaping: \"", "\"", XMLUtils.escapeCDATAContent("\""));
104         assertEquals("Escaping: &", "&", XMLUtils.escapeCDATAContent("&"));
105         assertEquals("Escaping: ]]", "]]", XMLUtils.escapeCDATAContent("]]"));
106         assertEquals("Escaping: ]>", "]>", XMLUtils.escapeCDATAContent("]>"));
107         assertEquals("Escaping: ]]>", "]]&gt;", XMLUtils.escapeCDATAContent("]]>"));
108         assertEquals("Escaping: ]]>]]>", "]]&gt;]]&gt;", XMLUtils.escapeCDATAContent("]]>]]>"));
109         assertEquals("Escaping: ]>]]>", "]>]]&gt;", XMLUtils.escapeCDATAContent("]>]]>"));
110         assertEquals("Escaping: ]]>]]]>", "]]&gt;]]]&gt;", XMLUtils.escapeCDATAContent("]]>]]]>"));
111         assertEquals("Escaping: ", "", XMLUtils.escapeCDATAContent(""));     
112     }
113     
114     
115 }
116