/**************************************************************** * 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.util.Arrays; import java.util.List; import org.apache.james.mime4j.field.AbstractField; import org.apache.james.mime4j.parser.Field; import junit.framework.TestCase; public class CopyConstructorTest extends TestCase { public void testCopyEmptyMessage() throws Exception { Message original = new Message(); Message copy = new Message(original); assertNull(copy.getHeader()); assertNull(copy.getBody()); assertNull(copy.getParent()); } public void testCopyMessage() throws Exception { Message parent = new Message(); Header header = new Header(); Body body = new BodyFactory().textBody("test"); Message original = new Message(); original.setHeader(header); original.setBody(body); original.setParent(parent); Message copy = new Message(original); assertNotNull(copy.getHeader()); assertNotSame(header, copy.getHeader()); assertNotNull(copy.getBody()); assertNotSame(body, copy.getBody()); assertSame(copy, copy.getBody().getParent()); assertNull(copy.getParent()); } public void testCopyEmptyBodyPart() throws Exception { BodyPart original = new BodyPart(); BodyPart copy = new BodyPart(original); assertNull(copy.getHeader()); assertNull(copy.getBody()); assertNull(copy.getParent()); } public void testCopyBodyPart() throws Exception { Message parent = new Message(); Header header = new Header(); Body body = new BodyFactory().textBody("test"); BodyPart original = new BodyPart(); original.setHeader(header); original.setBody(body); original.setParent(parent); BodyPart copy = new BodyPart(original); assertNotNull(copy.getHeader()); assertNotSame(header, copy.getHeader()); assertNotNull(copy.getBody()); assertNotSame(body, copy.getBody()); assertSame(copy, copy.getBody().getParent()); assertNull(copy.getParent()); } public void testCopyEmptyMultipart() throws Exception { Multipart original = new Multipart("mixed"); Multipart copy = new Multipart(original); assertSame(original.getPreamble(), copy.getPreamble()); assertSame(original.getEpilogue(), copy.getEpilogue()); assertSame(original.getSubType(), copy.getSubType()); assertTrue(copy.getBodyParts().isEmpty()); assertNull(copy.getParent()); } public void testCopyMultipart() throws Exception { Message parent = new Message(); BodyPart bodyPart = new BodyPart(); Multipart original = new Multipart("mixed"); original.setPreamble("preamble"); original.setEpilogue("epilogue"); original.setParent(parent); original.addBodyPart(bodyPart); Multipart copy = new Multipart(original); assertSame(original.getPreamble(), copy.getPreamble()); assertSame(original.getEpilogue(), copy.getEpilogue()); assertSame(original.getSubType(), copy.getSubType()); assertEquals(1, copy.getBodyParts().size()); assertNull(copy.getParent()); BodyPart bodyPartCopy = copy.getBodyParts().iterator().next(); assertNotSame(bodyPart, bodyPartCopy); assertSame(parent, bodyPart.getParent()); assertNull(bodyPartCopy.getParent()); } public void testCopyMultipartMessage() throws Exception { BodyPart bodyPart1 = new BodyPart(); BodyPart bodyPart2 = new BodyPart(); Multipart multipart = new Multipart("mixed"); multipart.addBodyPart(bodyPart1); multipart.addBodyPart(bodyPart2); Message original = new Message(); original.setHeader(new Header()); original.setBody(multipart); Message copy = new Message(original); Multipart multipartCopy = (Multipart) copy.getBody(); List<BodyPart> bodyParts = multipartCopy.getBodyParts(); BodyPart bodyPartCopy1 = bodyParts.get(0); BodyPart bodyPartCopy2 = bodyParts.get(1); assertNotSame(bodyPart1, bodyPartCopy1); assertEquals(original, bodyPart1.getParent()); assertEquals(copy, bodyPartCopy1.getParent()); assertNotSame(bodyPart2, bodyPartCopy2); assertEquals(original, bodyPart2.getParent()); assertEquals(copy, bodyPartCopy2.getParent()); } public void testCopyHeader() throws Exception { Field f1 = AbstractField.parse("name1: value1"); Field f2 = AbstractField.parse("name2: value"); Field f3 = AbstractField.parse("name1: value2"); Header original = new Header(); original.addField(f1); original.addField(f2); original.addField(f3); Header copy = new Header(original); // copy must have same fields as original assertEquals(Arrays.asList(f1, f2, f3), copy.getFields()); assertEquals(Arrays.asList(f1, f3), copy.getFields("name1")); // modify original original.removeFields("name1"); assertEquals(Arrays.asList(f2), original.getFields()); // copy may not be affected assertEquals(Arrays.asList(f1, f2, f3), copy.getFields()); assertEquals(Arrays.asList(f1, f3), copy.getFields("name1")); } }