Added getReader a conveniance method that returns a correct configured reader suitabl...
[mime4j.git] / src / test / java / org / apache / james / mime4j / MimeTokenStreamReaderTest.java
blob88a600f86c7ff546ee355fbbbb83ded2d17b95ba
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
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
17 * under the License.
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 {
35 super.setUp();
36 parser = new MimeTokenStream();
39 protected void tearDown() throws Exception {
40 super.tearDown();
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);
81 parser.parse(in);
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);
119 parser.parse(in);
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()));
126 checkBody(body);
129 private void checkBody(String body) throws IOException {
130 Reader reader = parser.getReader();
131 assertNotNull(reader);
132 assertEquals(body, IOUtils.toString(reader));