@Override
 public void tearDown() throws Exception {
   if (mFile != null) {
     mFile.delete();
   }
   MimeVisitor.unregisterConverter(TestMimeVisitor.class);
   MimeVisitor.unregisterMutator(TestMimeVisitor.class);
   cleanUp();
 }
  public void testMimeConverter() throws Exception {
    MimeVisitor.registerConverter(TestMimeVisitor.class);

    ExpectedResults expected = new ExpectedResults();
    String subject = NAME_PREFIX + " testMimeConverter oldsubject";
    expected.convertedSubject = NAME_PREFIX + " testMimeConverter newsubject";
    expected.rawContent = TestUtil.getTestMessage(subject, RECIPIENT_NAME, SENDER_NAME, null);
    expected.wasMutated = false;

    // Test ParsedMessage created from byte[]
    ParsedMessage pm = new ParsedMessage(expected.rawContent.getBytes(), false);
    verifyParsedMessage(pm, expected);
    pm = new ParsedMessage(expected.rawContent.getBytes(), true);
    verifyParsedMessage(pm, expected);

    // Test ParsedMessage created from File
    mFile = File.createTempFile("TestParsedMessage", ".msg");
    FileOutputStream out = new FileOutputStream(mFile);
    out.write(expected.rawContent.getBytes());
    out.close();

    pm = new ParsedMessage(mFile, null, false);
    verifyParsedMessage(pm, expected);
    pm = new ParsedMessage(mFile, null, true);
    verifyParsedMessage(pm, expected);

    // Test ParsedMessage created from MimeMessage.  Can't verify entire content
    // because JavaMail mangles the headers.
    MimeMessage mimeMsg =
        new ZMimeMessage(
            JMSession.getSession(), new SharedByteArrayInputStream(expected.rawContent.getBytes()));
    pm = new ParsedMessage(mimeMsg, false);
    assertTrue((new String(pm.getRawData()).contains("oldsubject")));
    assertTrue(getContent(pm.getMimeMessage()).contains("newsubject"));
    assertTrue(pm.getSubject().contains("newsubject"));
    pm = new ParsedMessage(mimeMsg, true);
    assertTrue((new String(pm.getRawData()).contains("oldsubject")));
    assertTrue(getContent(pm.getMimeMessage()).contains("newsubject"));
    assertTrue(pm.getSubject().contains("newsubject"));
  }
  /**
   * Tests message mutation. We can't verify the entire content, since mutation calls JavaMail,
   * which mangles the headers. We'll have to settle for confirming that the subject was updated
   * correctly.
   */
  public void testMimeMutator() throws Exception {
    MimeVisitor.registerMutator(TestMimeVisitor.class);

    String subject = NAME_PREFIX + " testMimeConverter oldsubject";
    String content = TestUtil.getTestMessage(subject, RECIPIENT_NAME, SENDER_NAME, null);

    // Test ParsedMessage created from byte[]
    ParsedMessage pm = new ParsedMessage(content.getBytes(), false);

    pm = new ParsedMessage(content.getBytes(), true);
    String substring = "newsubject";
    verifyMutatedMessage(pm, substring, true);

    // Test ParsedMessage created from File
    mFile = createTempFile(content);
    pm = new ParsedMessage(mFile, null, false);
    verifyMutatedMessage(pm, substring, true);
    mFile.delete();

    mFile = createTempFile(content);
    pm = new ParsedMessage(mFile, null, true);
    verifyMutatedMessage(pm, substring, true);

    // Test ParsedMessage created from MimeMessage, attachment indexing off.
    MimeMessage mimeMsg =
        new ZMimeMessage(
            JMSession.getSession(), new SharedByteArrayInputStream(content.getBytes()));
    pm = new ParsedMessage(mimeMsg, false);
    verifyMutatedMessage(pm, substring, true);

    // Test ParsedMessage created from MimeMessage, attachment indexing on.
    mimeMsg =
        new ZMimeMessage(
            JMSession.getSession(), new SharedByteArrayInputStream(content.getBytes()));
    pm = new ParsedMessage(mimeMsg, true);
    verifyMutatedMessage(pm, substring, true);
  }