blob: 58f36dc94421ea57e1c3582dedae53ffe8b6c66c [file] [log] [blame]
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.james.mime4j.message;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import org.apache.james.mime4j.Charsets;
import org.apache.james.mime4j.dom.BinaryBody;
import org.apache.james.mime4j.dom.Message;
import org.apache.james.mime4j.dom.Multipart;
import org.apache.james.mime4j.dom.TextBody;
import org.apache.james.mime4j.dom.field.ContentTypeField;
import org.apache.james.mime4j.dom.field.ParsedField;
import org.apache.james.mime4j.field.DefaultFieldParser;
import org.apache.james.mime4j.stream.Field;
import org.apache.james.mime4j.stream.NameValuePair;
import org.junit.Assert;
import org.junit.Test;
public class AbstractEntityBuilderTest {
static class AbstractEntityBuilderImpl extends AbstractEntityBuilder {
}
@Test
public void testFieldOperations() throws Exception {
AbstractEntityBuilder builder = new AbstractEntityBuilderImpl();
ParsedField field1 = DefaultFieldParser.parse("Content-Type: text/plain");
builder.addField(field1);
Assert.assertTrue(builder.containsField("Content-Type"));
Assert.assertTrue(builder.containsField("CONTENT-TYPE"));
Assert.assertSame(field1, builder.getField("Content-Type"));
Assert.assertSame(field1, builder.getField("CONTENT-TYPE"));
List<Field> fields1 = builder.getFields();
Assert.assertNotNull(fields1);
Assert.assertEquals(1, fields1.size());
Assert.assertSame(field1, fields1.get(0));
ParsedField field2 = DefaultFieldParser.parse("Content-Transfer-Encoding: 8bit");
builder.addField(field2);
List<Field> fields2 = builder.getFields("Stuff");
Assert.assertNotNull(fields2);
Assert.assertEquals(0, fields2.size());
List<Field> fields3 = builder.getFields("Content-Transfer-Encoding");
Assert.assertNotNull(fields3);
Assert.assertEquals(1, fields3.size());
Assert.assertSame(field2, fields3.get(0));
builder.removeFields("CONTENT-TYPE");
Assert.assertFalse(builder.containsField("Content-Type"));
Assert.assertFalse(builder.containsField("CONTENT-TYPE"));
List<Field> fields4 = builder.getFields();
Assert.assertNotNull(fields4);
Assert.assertEquals(1, fields4.size());
Assert.assertSame(field2, fields4.get(0));
ParsedField field3 = DefaultFieldParser.parse("Content-Transfer-Encoding: 7bit");
builder.addField(field3);
Assert.assertSame(field2, builder.getField("Content-Transfer-Encoding"));
List<Field> fields5 = builder.getFields("Content-Transfer-Encoding");
Assert.assertNotNull(fields5);
Assert.assertEquals(2, fields5.size());
Assert.assertSame(field2, fields5.get(0));
Assert.assertSame(field3, fields5.get(1));
builder.clearFields();
Assert.assertFalse(builder.containsField("Content-Type"));
Assert.assertFalse(builder.containsField("Content-Transfer-Encoding"));
List<Field> fields6 = builder.getFields();
Assert.assertNotNull(fields6);
Assert.assertEquals(0, fields6.size());
}
@Test
public void testContentType() throws Exception {
AbstractEntityBuilder builder = new AbstractEntityBuilderImpl();
builder.setContentType("text/plain");
Assert.assertEquals("text/plain", builder.getMimeType());
Assert.assertEquals(null, builder.getCharset());
Assert.assertTrue(builder.containsField("Content-Type"));
builder.setContentType("text/plain", new NameValuePair("charset", "ASCII"), new NameValuePair("stuff", null));
Assert.assertEquals("text/plain", builder.getMimeType());
Assert.assertEquals("ASCII", builder.getCharset());
Assert.assertTrue(builder.containsField("Content-Type"));
builder.setContentType(null);
Assert.assertEquals(null, builder.getMimeType());
Assert.assertEquals(null, builder.getCharset());
Assert.assertFalse(builder.containsField("Content-Type"));
}
@Test
public void testContentTransferEncoding() throws Exception {
AbstractEntityBuilder builder = new AbstractEntityBuilderImpl();
builder.setContentTransferEncoding("7bit");
Assert.assertEquals("7bit", builder.getContentTransferEncoding());
Assert.assertTrue(builder.containsField("Content-Transfer-Encoding"));
builder.setContentTransferEncoding(null);
Assert.assertEquals(null, builder.getContentTransferEncoding());
Assert.assertFalse(builder.containsField("Content-Transfer-Encoding"));
}
@Test
public void testContentDisposition() throws Exception {
AbstractEntityBuilder builder = new AbstractEntityBuilderImpl();
builder.setContentDisposition("attachment");
Assert.assertEquals("attachment", builder.getDispositionType());
Assert.assertEquals(null, builder.getFilename());
Assert.assertEquals(-1L, builder.getSize());
Assert.assertEquals(null, builder.getCreationDate());
Assert.assertEquals(null, builder.getModificationDate());
Assert.assertEquals(null, builder.getReadDate());
Assert.assertTrue(builder.containsField("Content-Disposition"));
builder.setContentDisposition("attachment", "some-file.txt");
Assert.assertEquals("attachment", builder.getDispositionType());
Assert.assertEquals("some-file.txt", builder.getFilename());
Assert.assertEquals(-1L, builder.getSize());
Assert.assertEquals(null, builder.getCreationDate());
Assert.assertEquals(null, builder.getModificationDate());
Assert.assertEquals(null, builder.getReadDate());
Assert.assertTrue(builder.containsField("Content-Disposition"));
builder.setContentDisposition("attachment", "some-other-file.txt", 1234L);
Assert.assertEquals("attachment", builder.getDispositionType());
Assert.assertEquals("some-other-file.txt", builder.getFilename());
Assert.assertEquals(1234L, builder.getSize());
Assert.assertEquals(null, builder.getCreationDate());
Assert.assertEquals(null, builder.getModificationDate());
Assert.assertEquals(null, builder.getReadDate());
Assert.assertTrue(builder.containsField("Content-Disposition"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
Date t1 = dateFormat.parse("2014-08-01 12:00");
Date t2 = dateFormat.parse("2014-08-01 12:30");
Date t3 = dateFormat.parse("2014-08-01 14:00");
builder.setContentDisposition("attachment", "some-other-file.txt", 1234L, t1, t2, t3);
Assert.assertEquals("attachment", builder.getDispositionType());
Assert.assertEquals("some-other-file.txt", builder.getFilename());
Assert.assertEquals(1234L, builder.getSize());
Assert.assertEquals(t1, builder.getCreationDate());
Assert.assertEquals(t2, builder.getModificationDate());
Assert.assertEquals(t3, builder.getReadDate());
Assert.assertTrue(builder.containsField("Content-Disposition"));
builder.setContentDisposition(null);
Assert.assertEquals(null, builder.getDispositionType());
Assert.assertFalse(builder.containsField("Content-Disposition"));
}
@Test
public void testSetTextBody() throws Exception {
AbstractEntityBuilder builder = new AbstractEntityBuilderImpl();
TextBody body1 = BasicBodyFactory.INSTANCE.textBody("test", Charsets.ISO_8859_1);
builder.setBody(body1);
Assert.assertSame(body1, builder.getBody());
Assert.assertEquals("text/plain", builder.getMimeType());
Assert.assertEquals("ISO-8859-1", builder.getCharset());
Assert.assertTrue(builder.containsField("Content-Type"));
TextBody body2 = BasicBodyFactory.INSTANCE.textBody("test");
builder.setBody(body2);
Assert.assertSame(body2, builder.getBody());
Assert.assertEquals("text/plain", builder.getMimeType());
Assert.assertEquals(null, builder.getCharset());
Assert.assertTrue(builder.containsField("Content-Type"));
builder.setBody((TextBody) null);
Assert.assertFalse(builder.containsField("Content-Type"));
}
@Test
public void testSetBinaryBody() throws Exception {
AbstractEntityBuilder builder = new AbstractEntityBuilderImpl();
BinaryBody body = BasicBodyFactory.INSTANCE.binaryBody(new byte[]{1, 2, 3});
builder.setBody(body);
Assert.assertSame(body, builder.getBody());
Assert.assertEquals("application/octet-stream", builder.getMimeType());
Assert.assertEquals(null, builder.getCharset());
Assert.assertTrue(builder.containsField("Content-Type"));
builder.setBody((TextBody) null);
Assert.assertFalse(builder.containsField("Content-Type"));
}
@Test
public void testSetMessageBody() throws Exception {
AbstractEntityBuilder builder = new AbstractEntityBuilderImpl();
Message message = new MessageImpl();
builder.setBody(message);
Assert.assertSame(message, builder.getBody());
Assert.assertEquals("message/rfc822", builder.getMimeType());
Assert.assertEquals(null, builder.getCharset());
Assert.assertTrue(builder.containsField("Content-Type"));
builder.setBody((Message) null);
Assert.assertFalse(builder.containsField("Content-Type"));
}
@Test
public void testSetMultipartBody() throws Exception {
AbstractEntityBuilder builder = new AbstractEntityBuilderImpl();
Multipart multipart = new MultipartImpl("stuff");
builder.setBody(multipart);
Assert.assertSame(multipart, builder.getBody());
Assert.assertEquals("multipart/stuff", builder.getMimeType());
Assert.assertEquals(null, builder.getCharset());
Assert.assertTrue(builder.containsField("Content-Type"));
final ContentTypeField field = (ContentTypeField) builder.getField("Content-Type");
Assert.assertNotNull(field.getBoundary());
builder.setBody((Message) null);
Assert.assertFalse(builder.containsField("Content-Type"));
}
}