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
10 * http://www.apache.org/licenses/LICENSE-2.0
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
19 package org
.apache
.james
.mime4j
;
21 import java
.io
.ByteArrayInputStream
;
22 import java
.io
.IOException
;
23 import java
.io
.InputStream
;
24 import java
.io
.Reader
;
26 import org
.apache
.commons
.io
.IOUtils
;
28 import junit
.framework
.TestCase
;
30 public class MimeTokenStreamReaderTest
extends TestCase
{
32 MimeTokenStream parser
;
34 protected void setUp() throws Exception
{
36 parser
= new MimeTokenStream();
39 protected void tearDown() throws Exception
{
43 public void testShouldReadSimpleBody() throws Exception
{
44 byte[] bytes
= ExampleMail
.RFC822_SIMPLE_BYTES
;
45 String body
= ExampleMail
.RFC822_SIMPLE_BODY
;
46 checkSimpleMail(bytes
, body
, 4);
49 public void testShouldReadOnePartMimeASCIIBody() throws Exception
{
50 byte[] bytes
= ExampleMail
.ONE_PART_MIME_ASCII_BYTES
;
51 String body
= ExampleMail
.ONE_PART_MIME_ASCII_BODY
;
52 checkSimpleMail(bytes
, body
, 11);
55 public void testShouldReadOnePartMime8859Body() throws Exception
{
56 byte[] bytes
= ExampleMail
.ONE_PART_MIME_8859_BYTES
;
57 String body
= ExampleMail
.ONE_PART_MIME_8859_BODY
;
58 checkSimpleMail(bytes
, body
, 11);
61 public void testShouldReadOnePartMimeBase64ASCIIBody() throws Exception
{
62 byte[] bytes
= ExampleMail
.ONE_PART_MIME_BASE64_ASCII_BYTES
;
63 String body
= ExampleMail
.ONE_PART_MIME_BASE64_ASCII_BODY
;
64 checkSimpleMail(bytes
, body
, 11);
67 public void testShouldReadOnePartMimeBase64Latin1Body() throws Exception
{
68 byte[] bytes
= ExampleMail
.ONE_PART_MIME_BASE64_LATIN1_BYTES
;
69 String body
= ExampleMail
.ONE_PART_MIME_BASE64_LATIN1_BODY
;
70 checkSimpleMail(bytes
, body
, 11);
73 public void testShouldReadOnePartMimeQuotedPrintable() throws Exception
{
74 byte[] bytes
= ExampleMail
.ONE_PART_MIME_QUOTED_PRINTABLE_ASCII_BYTES
;
75 String body
= ExampleMail
.ONE_PART_MIME_QUOTED_PRINTABLE_ASCII_BODY
;
76 checkSimpleMail(bytes
, body
, 11);
79 public void testShouldReadPartBodies() throws IOException
, MimeException
{
80 InputStream in
= new ByteArrayInputStream(ExampleMail
.MIME_MIXED_MULTIPART_VARIOUS_ENCODINGS_BYTES
);
82 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_START_HEADER
),MimeTokenStream
.stateToString(parser
.next()));
83 for (int i
=0;i
<5;i
++) {
84 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_FIELD
),MimeTokenStream
.stateToString(parser
.next()));
86 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_END_HEADER
),MimeTokenStream
.stateToString(parser
.next()));
87 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_START_MULTIPART
),MimeTokenStream
.stateToString(parser
.next()));
88 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_PREAMBLE
),MimeTokenStream
.stateToString(parser
.next()));
89 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_START_BODYPART
),MimeTokenStream
.stateToString(parser
.next()));
90 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_START_HEADER
),MimeTokenStream
.stateToString(parser
.next()));
91 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_FIELD
),MimeTokenStream
.stateToString(parser
.next()));
92 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_FIELD
),MimeTokenStream
.stateToString(parser
.next()));
93 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_END_HEADER
),MimeTokenStream
.stateToString(parser
.next()));
94 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_BODY
),MimeTokenStream
.stateToString(parser
.next()));
95 checkBody(ExampleMail
.MIME_MIXED_MULTIPART_VARIOUS_ENCODINGS_7BIT
);
96 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_END_BODYPART
),MimeTokenStream
.stateToString(parser
.next()));
97 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_START_BODYPART
),MimeTokenStream
.stateToString(parser
.next()));
98 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_START_HEADER
),MimeTokenStream
.stateToString(parser
.next()));
99 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_FIELD
),MimeTokenStream
.stateToString(parser
.next()));
100 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_FIELD
),MimeTokenStream
.stateToString(parser
.next()));
101 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_END_HEADER
),MimeTokenStream
.stateToString(parser
.next()));
102 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_BODY
),MimeTokenStream
.stateToString(parser
.next()));
103 checkBody(ExampleMail
.MIME_MIXED_MULTIPART_VARIOUS_ENCODINGS_QUOTED_PRINTABLE
);
104 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_END_BODYPART
),MimeTokenStream
.stateToString(parser
.next()));
105 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_START_BODYPART
),MimeTokenStream
.stateToString(parser
.next()));
106 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_START_HEADER
),MimeTokenStream
.stateToString(parser
.next()));
107 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_FIELD
),MimeTokenStream
.stateToString(parser
.next()));
108 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_FIELD
),MimeTokenStream
.stateToString(parser
.next()));
109 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_END_HEADER
),MimeTokenStream
.stateToString(parser
.next()));
110 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_BODY
),MimeTokenStream
.stateToString(parser
.next()));
111 checkBody(ExampleMail
.MIME_MIXED_MULTIPART_VARIOUS_ENCODINGS_BASE64
);
112 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_END_BODYPART
),MimeTokenStream
.stateToString(parser
.next()));
117 private void checkSimpleMail(byte[] bytes
, String body
, int fields
) throws IOException
, MimeException
{
118 InputStream in
= new ByteArrayInputStream(bytes
);
120 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_START_HEADER
),MimeTokenStream
.stateToString(parser
.next()));
121 for (int i
=0;i
<fields
;i
++) {
122 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_FIELD
),MimeTokenStream
.stateToString(parser
.next()));
124 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_END_HEADER
),MimeTokenStream
.stateToString(parser
.next()));
125 assertEquals(MimeTokenStream
.stateToString(MimeTokenStream
.T_BODY
),MimeTokenStream
.stateToString(parser
.next()));
129 private void checkBody(String body
) throws IOException
{
130 Reader reader
= parser
.getReader();
131 assertNotNull(reader
);
132 assertEquals(body
, IOUtils
.toString(reader
));