View Javadoc
1   package org.apache.maven.doxia.util;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.net.URLEncoder;
23  import java.util.Locale;
24  
25  import org.codehaus.plexus.PlexusTestCase;
26  
27  /**
28   * Test case for <code>HtmlTools</code>.
29   *
30   * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
31   * @version $Id: HtmlToolsTest.java 1091043 2011-04-11 11:44:39Z ltheussl $
32   */
33  public class HtmlToolsTest
34      extends PlexusTestCase
35  {
36      /**
37       * Verify the expected results.
38       */
39      public void testEscapeHTML()
40      {
41          assertEquals( HtmlTools.escapeHTML( null ), "" );
42          assertEquals( HtmlTools.escapeHTML( "" ), "" );
43          assertEquals( HtmlTools.escapeHTML( "\u0009" ), "\u0009" );
44          assertEquals( HtmlTools.escapeHTML( "\u0001" ), "\u0001" );
45  
46          // Predefined entities
47          assertEquals( HtmlTools.escapeHTML( "<" ), "&lt;" );
48          assertEquals( HtmlTools.escapeHTML( ">" ), "&gt;" );
49          assertEquals( HtmlTools.escapeHTML( "&" ), "&amp;" );
50          assertEquals( HtmlTools.escapeHTML( "\"" ), "&quot;" );
51          assertEquals( HtmlTools.escapeHTML( "\'" ), "&apos;" );
52          assertEquals( HtmlTools.escapeHTML( "\'", false ), "\'" );
53  
54          // xml mode
55          assertEquals( HtmlTools.escapeHTML( "&amp;" ), "&amp;amp;" );
56          assertEquals( HtmlTools.escapeHTML( "\u00e4", true ), "\u00e4" );
57          assertEquals( HtmlTools.escapeHTML( "\u00e4", false ), "&#xe4;" );
58          assertEquals( HtmlTools.escapeHTML( "\u0159", false ), "&#x159;" );
59          assertEquals( HtmlTools.escapeHTML( "\uD835\uDFED", false ), "&#x1d7ed;" );
60      }
61  
62      /**
63       * Verify the expected results.
64       */
65      public void testUnescapeHTML()
66      {
67          assertNull( HtmlTools.unescapeHTML( null ) );
68          assertEquals( "", HtmlTools.unescapeHTML( "" ) );
69          assertEquals( "\u0009", HtmlTools.unescapeHTML( "\u0009" ) );
70          assertEquals( "\u0001", HtmlTools.unescapeHTML( "\u0001" ) );
71          assertEquals( "<", HtmlTools.unescapeHTML( "&lt;" ) );
72          assertEquals( ">", HtmlTools.unescapeHTML( "&gt;" ) );
73          assertEquals( "&", HtmlTools.unescapeHTML( "&amp;" ) );
74          assertEquals( "\"", HtmlTools.unescapeHTML( "&quot;" ) );
75          assertEquals( "&apos;", HtmlTools.unescapeHTML( "&apos;" ) );
76          assertEquals( "\'", HtmlTools.unescapeHTML( "&apos;", true ) );
77          assertEquals( "&amp;", HtmlTools.unescapeHTML( "&amp;amp;" ) );
78          assertEquals( "&lt;Fran&ccedil;ais&gt;", HtmlTools.unescapeHTML( "&amp;lt;Fran&amp;ccedil;ais&amp;gt;" ) );
79          assertEquals( "\u0159", HtmlTools.unescapeHTML( "&#x159;" ) );
80          assertEquals( "\uD808\uDF45", HtmlTools.unescapeHTML( "&#x12345;" ) );
81          assertEquals( "\uD835\uDFED", HtmlTools.unescapeHTML( "&#x1d7ed;" ) );
82          assertEquals( "\uD808\uDF45\uD835\uDFED", HtmlTools.unescapeHTML( "&#x12345;&#x1d7ed;" ) );
83          assertEquals( "&#x1d7ed &#x1d7ed", HtmlTools.unescapeHTML( "&#x1d7ed &#x1d7ed" ) );
84          assertEquals( "&#x1d7ed \uD835\uDFED", HtmlTools.unescapeHTML( "&#x1d7ed &#x1d7ed;" ) );
85          assertEquals( "&#xQWER;", HtmlTools.unescapeHTML( "&#xQWER;" ) );
86          assertEquals( "\u00E5", HtmlTools.unescapeHTML( "&#229;" ) );
87          assertEquals( "<>&\"\u00E5\u0159\uD835\uDFED",
88                        HtmlTools.unescapeHTML( "&lt;&gt;&amp;&quot;&#229;&#x159;&#x1d7ed;" ) );
89      }
90  
91      /**
92       * Verify the expected results.
93       */
94      public void testEncodeId()
95      {
96          assertEquals( HtmlTools.encodeId( null ), null );
97          assertEquals( HtmlTools.encodeId( "" ), "a" );
98          assertEquals( HtmlTools.encodeId( " " ), "a" );
99          assertEquals( HtmlTools.encodeId( " _ " ), "a_" );
100         assertEquals( HtmlTools.encodeId( "1" ), "a1" );
101         assertEquals( HtmlTools.encodeId( "1anchor" ), "a1anchor" );
102         assertEquals( HtmlTools.encodeId( "_anchor" ), "a_anchor" );
103         assertEquals( HtmlTools.encodeId( "a b-c123 " ), "a_b-c123" );
104         assertEquals( HtmlTools.encodeId( "   anchor" ), "anchor" );
105         assertEquals( HtmlTools.encodeId( "myAnchor" ), "myAnchor" );
106         assertEquals( HtmlTools.encodeId( "H\u00E5kon" ), "Hkon" );
107         assertEquals( HtmlTools.encodeId( "Theu\u00DFl" ), "Theul" );
108     }
109 
110     /**
111      * Verify the expected results.
112      *
113      * @throws Exception should not happen.
114      */
115     public void testEncodeURL()
116         throws Exception
117     {
118         assertNull( HtmlTools.encodeURL( null ) );
119         assertEquals( HtmlTools.encodeURL( "" ), "" );
120         assertEquals( HtmlTools.encodeURL( "http://www.example.com/?This is a simple test." ),
121                       "http://www.example.com/?This%20is%20a%20simple%20test." );
122 
123         assertEquals( HtmlTools.encodeURL( "http://www.example.com/?This is a simple & short test." ),
124                       "http://www.example.com/?This%20is%20a%20simple%20&%20short%20test." );
125 
126         String url = "\uD808\uDF45";
127         assertEquals( HtmlTools.encodeURL( url ), URLEncoder.encode( url, "UTF-8" ).toLowerCase( Locale.ENGLISH ) );
128     }
129 
130     /**
131      * Verify the expected results.
132      */
133     public void testIsId()
134     {
135         assertFalse( HtmlTools.isId( null ) );
136         assertFalse( HtmlTools.isId( "" ) );
137         assertFalse( HtmlTools.isId( " " ) );
138         assertFalse( HtmlTools.isId( " _ " ) );
139         assertFalse( HtmlTools.isId( "1" ) );
140         assertFalse( HtmlTools.isId( "1anchor" ) );
141         assertFalse( HtmlTools.isId( "_anchor" ) );
142         assertFalse( HtmlTools.isId( "a b-c123 " ) );
143         assertFalse( HtmlTools.isId( "   anchor" ) );
144         assertTrue( HtmlTools.isId( "myAnchor" ) );
145         assertTrue( HtmlTools.isId( "a_" ) );
146         assertTrue( HtmlTools.isId( "a-" ) );
147         assertTrue( HtmlTools.isId( "a:" ) );
148         assertTrue( HtmlTools.isId( "a." ) );
149         assertFalse( HtmlTools.isId( "Theu\u00DFl" ) );
150     }
151 
152     /**
153      * Verify the expected results.
154      */
155     public void testGetHtmlTag()
156     {
157         assertNull( HtmlTools.getHtmlTag( null ) );
158         assertNull( HtmlTools.getHtmlTag( "" ) );
159         assertNull( HtmlTools.getHtmlTag( "weirdHtmlTag" ) );
160         assertNotNull( HtmlTools.getHtmlTag( "strong" ) );
161     }
162 }