assertTrue(!isSameMimeMessage(m2.getMessage(),mail.getMessage()));
// check that the subjects are correct on both mails!
assertEquals(m2.getMessage().getSubject(),"new Subject");
assertEquals(mail.getMessage().getSubject(),"foo");
// cloning again the messages
Mail m2clone = m2.duplicate();
assertTrue(isSameMimeMessage(m2clone.getMessage(),m2.getMessage()));
MimeMessage mm = getWrappedMessage(m2.getMessage());
assertNotSame(m2.getMessage(),m2clone.getMessage());
// test that m2clone has a valid wrapped message
MimeMessage mm3 = getWrappedMessage(m2clone.getMessage());
assertNotNull(mm3);
// dispose m2 and check that the clone has still a valid message and it is the same!
((MailImpl) m2).dispose();
assertEquals(mm3,getWrappedMessage(m2clone.getMessage()));
// change the message that should be not referenced by m2 that has
// been disposed, so it should not clone it!
m2clone.getMessage().setSubject("new Subject 2");
m2clone.getMessage().setText("new Body 3");
assertTrue(isSameMimeMessage(m2clone.getMessage(),mm));
ContainerUtil.dispose(mail);
ContainerUtil.dispose(messageFromSources);
}