| /**************************************************************** |
| * 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")); |
| } |
| |
| } |