1 31 32 package org.opencms.i18n; 33 34 import java.io.ByteArrayOutputStream ; 35 import java.io.OutputStreamWriter ; 36 import java.nio.charset.Charset ; 37 38 import junit.framework.TestCase; 39 40 49 public class TestCmsEncoder extends TestCase { 50 51 private static final String ENC_ISO_8859_1 = "ISO-8859-1"; 52 private static final String ENC_ISO_8859_15 = "ISO-8859-15"; 53 private static final String ENC_US_ASCII = "US-ASCII"; 54 private static final String ENC_UTF_8 = CmsEncoder.ENCODING_UTF_8; 55 private static final String ENC_WINDOWS_1252 = "Cp1252"; 56 57 private static final String STRING_1 = "Test: \u00e4\u00f6\u00fc\u00c4\u00d6\u00dc\u00df\u20ac"; 60 private static final String STRING_2 = "Test: \u00e4\u00f6\u00fc\u00c4\u00d6\u00dc\u00df€"; 61 private static final String STRING_3 = "Test: äöüÄÖÜ߀"; 62 private static final String STRING_4 = "\u00e4\u00f6\u00fc\u20ac#|#12||&#;\u00c4\u00d6\u00dctest"; 63 private static final String STRING_5 = "äöü€#|#12||&#;ÄÖÜtest"; 64 65 private static final String [][] TESTS_DECODE = { 66 {STRING_3, STRING_2, ENC_ISO_8859_1}, 67 {STRING_3, STRING_1, ENC_ISO_8859_15}, 68 {STRING_3, STRING_1, ENC_UTF_8}, 69 {STRING_3, STRING_3, ENC_US_ASCII}, 70 {STRING_3, STRING_1, ENC_WINDOWS_1252}, 71 {STRING_5, STRING_4, ENC_UTF_8}}; 72 73 private static final String [][] TESTS_ENCODE = { 74 {STRING_1, STRING_2, ENC_ISO_8859_1}, 75 {STRING_1, STRING_1, ENC_ISO_8859_15}, 76 {STRING_1, STRING_1, ENC_UTF_8}, 77 {STRING_1, STRING_3, ENC_US_ASCII}, 78 {STRING_1, STRING_1, ENC_WINDOWS_1252}, 79 {STRING_4, STRING_5, ENC_US_ASCII}}; 80 81 84 public void testDecodeHtmlEntities() { 85 86 for (int i = 0; i < TESTS_DECODE.length; i++) { 87 String source = TESTS_DECODE[i][0]; 88 String dest = TESTS_DECODE[i][1]; 89 String encoding = TESTS_DECODE[i][2]; 90 91 String result = CmsEncoder.decodeHtmlEntities(source, encoding); 92 assertEquals(result, dest); 93 } 94 } 95 96 100 public void testDecodeUmlauts() { 101 102 Charset defaultCs = Charset.forName(new OutputStreamWriter (new ByteArrayOutputStream ()).getEncoding()); 103 System.out.println("Default Charset: " + defaultCs.name()); 104 String param = "%C3%BC"; String decoded = CmsEncoder.decode(param, CmsEncoder.ENCODING_UTF_8); 106 String decoded2 = CmsEncoder.decode(param, CmsEncoder.ENCODING_ISO_8859_1); 107 assertEquals("ü", decoded); 108 assertFalse("ü".equals(decoded2)); 109 } 110 111 118 public void testDoubleEncoding() { 119 120 String original = "Online Project (VFS)"; 121 String encode1 = CmsEncoder.escapeWBlanks(original, ENC_UTF_8); 122 String encode2 = CmsEncoder.escapeWBlanks(encode1, ENC_UTF_8); 123 assertFalse(encode1.equals(encode2)); 124 assertEquals("Online%2520Project%2520%2528VFS%2529", encode2); 125 } 126 127 130 public void testEncodeForHtml() { 131 132 for (int i = 0; i < TESTS_ENCODE.length; i++) { 133 String source = TESTS_ENCODE[i][0]; 134 String dest = TESTS_ENCODE[i][1]; 135 String encoding = TESTS_ENCODE[i][2]; 136 137 String result = CmsEncoder.encodeHtmlEntities(source, encoding); 138 assertEquals(result, dest); 139 } 140 } 141 142 145 public void testParamEncoding() { 146 147 String term = "Test äöüÄÖÜ߀ +-"; 148 String encoded = CmsEncoder.encodeParameter(term); 149 String result = CmsEncoder.decodeParameter(encoded); 150 151 System.out.print(encoded); 152 assertEquals(term, result); 153 } 154 155 161 public void testEncodePercent() { 162 163 String original = "% abc"; 164 String encoded = CmsEncoder.encode(original); 165 assertFalse("A single '%' charater must be transformed by encoding.", original.equals(encoded)); 166 original = "%25 abc"; 167 encoded = CmsEncoder.encode(original); 168 assertFalse("A encoded sequence \"%25\" must be transformed by a further encoding.", original.equals(encoded)); 169 } 170 171 174 public void testLookupEncoding() { 175 176 assertEquals(CmsEncoder.lookupEncoding("UTF-8", null), CmsEncoder.ENCODING_UTF_8); 177 assertEquals(CmsEncoder.lookupEncoding("utf-8", null), CmsEncoder.ENCODING_UTF_8); 178 assertEquals(CmsEncoder.lookupEncoding("UTF8", null), CmsEncoder.ENCODING_UTF_8); 179 assertEquals(CmsEncoder.lookupEncoding("utf8", null), CmsEncoder.ENCODING_UTF_8); 180 assertEquals(CmsEncoder.lookupEncoding("ISO-8859-1", null), "ISO-8859-1"); 181 assertEquals(CmsEncoder.lookupEncoding("iso-8859-1", null), "ISO-8859-1"); 182 assertEquals(CmsEncoder.lookupEncoding("ISO8859-1", null), "ISO-8859-1"); 183 assertEquals(CmsEncoder.lookupEncoding("iso8859-1", null), "ISO-8859-1"); 184 assertEquals(CmsEncoder.lookupEncoding("ISO_8859-1", null), "ISO-8859-1"); 185 assertEquals(CmsEncoder.lookupEncoding("iso_8859-1", null), "ISO-8859-1"); 186 assertEquals(CmsEncoder.lookupEncoding("ISO_8859_1", null), "ISO-8859-1"); 187 assertEquals(CmsEncoder.lookupEncoding("iso_8859_1", null), "ISO-8859-1"); 188 assertEquals(CmsEncoder.lookupEncoding("latin1", null), "ISO-8859-1"); 189 } 190 191 194 public void testParameterEncoding() { 195 196 String param; 197 String result; 198 199 param = "+"; 200 201 result = CmsEncoder.encode(param, CmsEncoder.ENCODING_UTF_8); 202 result = CmsEncoder.decode(result, CmsEncoder.ENCODING_UTF_8); 203 204 assertEquals(param, result); 205 206 param = "+Köln -Düsseldorf &value"; 207 208 result = CmsEncoder.encode(param, CmsEncoder.ENCODING_UTF_8); 209 result = CmsEncoder.decode(result, CmsEncoder.ENCODING_UTF_8); 210 211 assertEquals(param, result); 212 } 213 214 220 public void testRecursiveDecodingOfDoubleEncoded() { 221 222 String original = "Online Project (VFS)"; 223 String encode1 = CmsEncoder.escapeWBlanks(original, ENC_UTF_8); 224 String encode2 = CmsEncoder.escapeWBlanks(encode1, ENC_UTF_8); 225 String decoded = CmsEncoder.decode(encode2, ENC_UTF_8); 226 assertEquals(encode1, decoded); 227 } 228 229 } 230 | Popular Tags |