/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* Licensed 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 com.alibaba.citrus.service.mail;
import static com.alibaba.citrus.test.TestUtil.*;
import static org.junit.Assert.*;
import javax.mail.MessagingException;
import javax.mail.Part;
import com.alibaba.citrus.service.mail.builder.content.AbstractContent;
import com.alibaba.citrus.util.ToStringBuilder.MapBuilder;
import org.junit.Before;
import org.junit.Test;
/**
* 测试<code>AbstractContent</code>的基本功能。
*
* @author Michael Zhou
*/
public class MailContentBasicTests extends AbstractMailBuilderTests {
private MyContent content1;
private MyContent content2;
@Before
public void init() {
content1 = new MyContent();
content1.setId("content1");
content1.setMailBuilder(builder);
content1.name = "content1_name";
content2 = new MyContent();
content2.setId("content2");
content2.setParentContent(content1);
content2.name = "content2_name";
assertNotNull(content1.name);
assertNotNull(content2.name);
}
@Test
public void getId() {
assertEquals("content1", content1.getId());
assertEquals("content2", content2.getId());
}
@Test
public void getMailBuilder() {
assertSame(builder, content1.getMailBuilder());
assertSame(builder, content2.getMailBuilder()); // 继承自content1
content1.setMailBuilder(null);
assertNoMailBuilder(content1);
assertNoMailBuilder(content2); // 继承自content1
}
@Test
public void getParentContent() {
assertSame(null, content1.getParentContent());
assertSame(content1, content2.getParentContent());
}
@Test
public void clone_() {
// 一层content
MyContent contentCopy = (MyContent) content1.clone();
assertEquals("content1", contentCopy.getId());
assertNoMailBuilder(contentCopy);
assertEquals(null, contentCopy.getParentContent());
assertEquals("content1_name", contentCopy.name); // clone by copyTo()
// 两层content
contentCopy = (MyContent) content2.clone();
assertEquals("content2", contentCopy.getId());
assertNoMailBuilder(contentCopy);
assertEquals(null, contentCopy.getParentContent());
assertEquals("content2_name", contentCopy.name); // clone by copyTo()
}
@Test
public void clone_newInstance_null() {
class MyContent1 extends MyContent {
@Override
protected AbstractContent newInstance() {
return null;
}
}
try {
new MyContent1().clone();
fail();
} catch (IllegalArgumentException e) {
assertThat(e, exception("MyContent1.newInstance() returned null"));
}
}
@Test
public void clone_newInstance_wrongType() {
class MyContent1 extends MyContent {
@Override
protected AbstractContent newInstance() {
return new MyContent();
}
}
try {
new MyContent1().clone();
fail();
} catch (IllegalArgumentException e) {
assertThat(e, exception("MyContent1.newInstance() returned an object of wrong class"));
}
}
@Test
public void toString_() {
String result = "";
result += "MyContent {\n";
result += " name = content1_name\n";
result += "}";
assertEquals(result, content1.toString());
}
public static class MyContent extends AbstractContent {
public String name;
@Override
protected AbstractContent newInstance() {
return new MyContent();
}
@Override
protected void copyTo(AbstractContent copy) {
((MyContent) copy).name = name;
}
public void render(Part mailPart) throws MessagingException {
mailPart.setContent("", "text/plain");
}
@Override
public void toString(MapBuilder mb) {
mb.append("name", name);
}
}
}