source: contrib/MailArchiver/sources/vendor/mime4j/apache-mime4j-0.7-SNAPSHOT-20110327.010440-17/core/src/test/java/org/apache/james/mime4j/codec/EncoderUtilTest.java @ 6785

Revision 6785, 9.0 KB checked in by rafaelraymundo, 12 years ago (diff)

Ticket #2946 - Liberado codigo do MailArchiver?. Documentação na subpasta DOCS.

Line 
1/****************************************************************
2 * Licensed to the Apache Software Foundation (ASF) under one   *
3 * or more contributor license agreements.  See the NOTICE file *
4 * distributed with this work for additional information        *
5 * regarding copyright ownership.  The ASF licenses this file   *
6 * to you under the Apache License, Version 2.0 (the            *
7 * "License"); you may not use this file except in compliance   *
8 * with the License.  You may obtain a copy of the License at   *
9 *                                                              *
10 *   http://www.apache.org/licenses/LICENSE-2.0                 *
11 *                                                              *
12 * Unless required by applicable law or agreed to in writing,   *
13 * software distributed under the License is distributed on an  *
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15 * KIND, either express or implied.  See the License for the    *
16 * specific language governing permissions and limitations      *
17 * under the License.                                           *
18 ****************************************************************/
19
20package org.apache.james.mime4j.codec;
21
22import java.io.UnsupportedEncodingException;
23import java.nio.charset.Charset;
24
25import junit.framework.TestCase;
26
27import org.apache.james.mime4j.codec.EncoderUtil.Encoding;
28import org.apache.james.mime4j.codec.EncoderUtil.Usage;
29import org.apache.james.mime4j.util.CharsetUtil;
30
31public class EncoderUtilTest extends TestCase {
32
33    public void testEncodeAddressDisplayName() throws Exception {
34        assertEquals("\"\"", EncoderUtil.encodeAddressDisplayName(""));
35        assertEquals("test", EncoderUtil.encodeAddressDisplayName("test"));
36        assertEquals(" test ", EncoderUtil.encodeAddressDisplayName(" test "));
37        assertEquals(" test\ttest ", EncoderUtil
38                .encodeAddressDisplayName(" test\ttest "));
39        assertEquals("\"test()\"", EncoderUtil
40                .encodeAddressDisplayName("test()"));
41        assertEquals("\"John Q. Public\"", EncoderUtil
42                .encodeAddressDisplayName("John Q. Public"));
43        assertEquals("\"Giant; \\\"Big\\\" Box\"", EncoderUtil
44                .encodeAddressDisplayName("Giant; \"Big\" Box"));
45        assertEquals("=?ISO-8859-1?Q?Semmelbr=F6sel?=", EncoderUtil
46                .encodeAddressDisplayName("Semmelbr\366sel"));
47        // dollar sign as to be encoded as =24 when used as a word in a phrase
48        assertEquals("=?UTF-8?Q?Dollar_=24_Euro_=E2=82=AC?=", EncoderUtil
49                .encodeAddressDisplayName("Dollar $ Euro \u20ac"));
50    }
51
52    public void testEncodeAddressLocalPart() throws Exception {
53        assertEquals("john.wayne", EncoderUtil
54                .encodeAddressLocalPart("john.wayne"));
55        assertEquals("\"clint eastwood\"", EncoderUtil
56                .encodeAddressLocalPart("clint eastwood"));
57    }
58
59    public void testEncodeHeaderParameter() throws Exception {
60        assertEquals("p=test", EncoderUtil.encodeHeaderParameter("p", "test"));
61        assertEquals("p=\"test test\"", EncoderUtil.encodeHeaderParameter("p",
62                "test test"));
63        assertEquals("p=\"=test\"", EncoderUtil.encodeHeaderParameter("p",
64                "=test"));
65        assertEquals("p=\"\\\\test\"", EncoderUtil.encodeHeaderParameter("p",
66                "\\test"));
67        assertEquals("p=\"\\\"\\\\\\\"\"", EncoderUtil.encodeHeaderParameter(
68                "p", "\"\\\""));
69    }
70
71    public void testHasToBeEncoded() throws Exception {
72        assertFalse(EncoderUtil.hasToBeEncoded("", 0));
73        assertFalse(EncoderUtil.hasToBeEncoded("only ascii characters", 0));
74
75        assertTrue(EncoderUtil.hasToBeEncoded("non-printable ascii: \010", 0));
76        assertTrue(EncoderUtil.hasToBeEncoded("non-ascii: \u20ac", 0));
77
78        assertFalse(EncoderUtil.hasToBeEncoded("123456789012345678901234567",
79                50));
80        assertTrue(EncoderUtil.hasToBeEncoded("1234567890123456789012345678",
81                50));
82        assertFalse(EncoderUtil.hasToBeEncoded(
83                "\t12345678901234567890123456789", 50));
84    }
85
86    public void testEncodeEncodedWordDetectCharset() throws Exception {
87        assertTrue(EncoderUtil
88                .encodeEncodedWord("only ascii", Usage.TEXT_TOKEN).startsWith(
89                        "=?US-ASCII?"));
90        assertTrue(EncoderUtil.encodeEncodedWord("latin 1: \344",
91                Usage.TEXT_TOKEN).startsWith("=?ISO-8859-1?"));
92        assertTrue(EncoderUtil.encodeEncodedWord("unicode: \u20ac",
93                Usage.TEXT_TOKEN).startsWith("=?UTF-8?"));
94    }
95
96    public void testEncodeEncodedWordForceCharset() throws Exception {
97        assertTrue(EncoderUtil.encodeEncodedWord("only ascii",
98                Usage.TEXT_TOKEN, 0, CharsetUtil.UTF_8, null).startsWith(
99                "=?UTF-8?"));
100    }
101
102    public void testEncodeEncodedWordDetectEncoding() throws Exception {
103        assertTrue(EncoderUtil
104                .encodeEncodedWord("only ascii", Usage.TEXT_TOKEN).startsWith(
105                        "=?US-ASCII?Q?"));
106        assertTrue(EncoderUtil.encodeEncodedWord("\344\344\344\344\344",
107                Usage.TEXT_TOKEN).startsWith("=?ISO-8859-1?B?"));
108    }
109
110    public void testEncodeEncodedWordForceEncoding() throws Exception {
111        assertTrue(EncoderUtil.encodeEncodedWord("only ascii",
112                Usage.TEXT_TOKEN, 0, null, Encoding.B).startsWith(
113                "=?US-ASCII?B?"));
114    }
115
116    public void testEncodeEncodedWordSplit() throws Exception {
117        String sixty = "123456789012345678901234567890123456789012345678901234567890";
118
119        String expected = "=?US-ASCII?Q?" + sixty + "?=";
120        assertEquals(expected, EncoderUtil.encodeEncodedWord(sixty,
121                Usage.TEXT_TOKEN, 0, null, Encoding.Q));
122        assertEquals(75, expected.length());
123
124        String sixtyOne = sixty + "1";
125        String encodedSixtyOne = EncoderUtil.encodeEncodedWord(sixtyOne,
126                Usage.TEXT_TOKEN, 0, null, Encoding.Q);
127        assertTrue(encodedSixtyOne.contains("?= =?US-ASCII?Q?"));
128    }
129
130    public void testEncodeEncodedWord() throws Exception {
131        assertEquals("=?US-ASCII?Q??=", EncoderUtil.encodeEncodedWord("",
132                Usage.TEXT_TOKEN, 0, null, Encoding.Q));
133
134        assertEquals("=?US-ASCII?Q?testing_123?=", EncoderUtil
135                .encodeEncodedWord("testing 123", Usage.TEXT_TOKEN, 0, null,
136                        Encoding.Q));
137
138        assertEquals("=?US-ASCII?B?dGVzdGluZyAxMjM=?=", EncoderUtil
139                .encodeEncodedWord("testing 123", Usage.TEXT_TOKEN, 0, null,
140                        Encoding.B));
141
142        assertEquals("=?windows-1252?Q?100_=80?=", EncoderUtil
143                .encodeEncodedWord("100 \u20ac", Usage.TEXT_TOKEN, 0, Charset
144                        .forName("Cp1252"), Encoding.Q));
145
146        assertEquals("=?windows-1252?B?MTAwIIA=?=", EncoderUtil
147                .encodeEncodedWord("100 \u20ac", Usage.TEXT_TOKEN, 0, Charset
148                        .forName("Cp1252"), Encoding.B));
149    }
150
151    public void testEncodeB() throws Exception {
152        assertEquals("", encodeB(""));
153        assertEquals("YQ==", encodeB("a"));
154        assertEquals("YWI=", encodeB("ab"));
155        assertEquals("YWJj", encodeB("abc"));
156        assertEquals("YWJjZA==", encodeB("abcd"));
157        assertEquals("YWJjZGU=", encodeB("abcde"));
158        assertEquals("YWJjZGVm", encodeB("abcdef"));
159        assertEquals("YWJjZGVmZw==", encodeB("abcdefg"));
160        assertEquals("YWJjZGVmZ2g=", encodeB("abcdefgh"));
161        assertEquals("YWJjZGVmZ2hp", encodeB("abcdefghi"));
162        assertEquals("DQoMCQ==", encodeB("\r\n\f\t"));
163        assertEquals("LT0/VGhhdCdzIGEgdGVzdD89LQ==",
164                encodeB("-=?That's a test?=-"));
165    }
166
167    public void testEncodeQRegular() throws Exception {
168        byte[] b = new byte[132];
169        for (int i = 0; i < 132; i++) {
170            b[i] = (byte) i;
171        }
172
173        String expected = "=00=01=02=03=04=05=06=07=08=09=0A=0B=0C=0D=0E=0F"
174                + "=10=11=12=13=14=15=16=17=18=19=1A=1B=1C=1D=1E=1F_!\"#$%&"
175                + "'()*+,-./0123456789:;<=3D>=3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
176                + "[\\]^=5F`abcdefghijklmnopqrstuvwxyz{|}~=7F=80=81=82=83";
177        assertEquals(expected, EncoderUtil.encodeQ(b, Usage.TEXT_TOKEN));
178    }
179
180    public void testEncodeQRestricted() throws Exception {
181        byte[] b = new byte[136];
182        for (int i = 0; i < 136; i++) {
183            b[i] = (byte) i;
184        }
185
186        String expected = "=00=01=02=03=04=05=06=07=08=09=0A=0B=0C=0D=0E=0F"
187                + "=10=11=12=13=14=15=16=17=18=19=1A=1B=1C=1D=1E=1F_!=22=23"
188                + "=24=25=26=27=28=29*+=2C-=2E/0123456789=3A=3B=3C=3D=3E=3F"
189                + "=40ABCDEFGHIJKLMNOPQRSTUVWXYZ=5B=5C=5D=5E=5F=60abcdefghi"
190                + "jklmnopqrstuvwxyz=7B=7C=7D=7E=7F=80=81=82=83=84=85=86=87";
191        assertEquals(expected, EncoderUtil.encodeQ(b, Usage.WORD_ENTITY));
192    }
193
194    private String encodeB(String s) {
195        try {
196            return EncoderUtil.encodeB(s.getBytes("us-ascii"));
197        } catch (UnsupportedEncodingException e) {
198            throw new Error(e);
199        }
200    }
201
202}
Note: See TracBrowser for help on using the repository browser.