/* * Copyright (C) 2014 The Android Open Source Project * * 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.android.email; import android.test.AndroidTestCase; import com.android.emailcommon.internet.MimeBodyPart; import com.android.emailcommon.internet.MimeMessage; import com.android.emailcommon.mail.Address; import com.android.emailcommon.mail.Message.RecipientType; import com.android.emailcommon.mail.MessagingException; import com.android.emailcommon.mail.Part; import com.android.emailcommon.provider.EmailContent; import com.android.emailcommon.utility.ConversionUtilities; import com.android.emailcommon.utility.ConversionUtilities.BodyFieldData; import java.util.ArrayList; import java.util.Date; public class LegacyConversionsTest extends AndroidTestCase { /** * Test basic fields conversion from Store message to Provider message. */ public void testUpdateMessageFields_Basic() throws MessagingException { final MimeMessage message = new MimeMessage(); message.setUid("UID.12345678"); message.setSentDate(new Date(1)); message.setMessageId("Test-Message-ID"); message.setSubject("This is the subject"); final EmailContent.Message localMessage = new EmailContent.Message(); final boolean result = LegacyConversions.updateMessageFields(localMessage, message, 1, 1); assertTrue(result); assertEquals(message.getUid(), localMessage.mServerId); assertEquals(message.getSubject(), localMessage.mSubject); assertEquals(message.getMessageId(), localMessage.mMessageId); assertEquals(message.getSentDate().getTime(), localMessage.mTimeStamp); } /** * Test the conversion of plain ASCII (not MIME-encoded) email addresses. */ public void testUpdateMessageFields_PlainAddresses() throws MessagingException { // create plain ASCII email addresses final String fromList = "Sender "; final String replyToList = "Reply1 ,Reply2 "; final String toList = "ToA ,ToB "; final String ccList = "CcA ,CcB "; final String bccList = "BccA ,Bcc2 "; // parse the addresses final Address from = Address.fromHeader(fromList)[0]; final Address[] replies = Address.fromHeader(replyToList); final Address[] tos = Address.fromHeader(toList); final Address[] ccs = Address.fromHeader(ccList); final Address[] bccs = Address.fromHeader(bccList); // make a message with the email addresses final MimeMessage message = new MimeMessage(); message.setFrom(from); message.setReplyTo(replies); message.setRecipients(RecipientType.TO, tos); message.setRecipients(RecipientType.CC, ccs); message.setRecipients(RecipientType.BCC, bccs); // convert the message to a local message using the conversation method final EmailContent.Message localMessage = new EmailContent.Message(); final boolean result = LegacyConversions.updateMessageFields(localMessage, message, 1, 1); assertTrue(result); // verify that we will store the email addresses in decoded form assertEquals(fromList, localMessage.mFrom); assertEquals(replyToList, localMessage.mReplyTo); assertEquals(toList, localMessage.mTo); assertEquals(ccList, localMessage.mCc); assertEquals(bccList, localMessage.mBcc); } /** * Test the conversion of MIME-encoded non-ASCII email addresses. */ public void testUpdateMessageFields_EncodedAddresses() throws MessagingException { final String e = "=?EUC-KR?B?uvG50Ln4yKO4pg==?="; // Mime Encoded value of 비밀번호를 final String d = "\uBE44\uBC00\uBC88\uD638\uB97C"; // Mime Decoded value of e // create the email address in encoded form String fromList = String.format("%s ", e); String replyToList = String.format("%s ,%s ", e, e); String toList = String.format("%s ,%s ", e, e); String ccList = String.format("%s ,%s ", e, e); String bccList = String.format("%s ,%s ", e, e); // parse the encoded addresses final Address from = Address.fromHeader(fromList)[0]; final Address[] replies = Address.fromHeader(replyToList); final Address[] tos = Address.fromHeader(toList); final Address[] ccs = Address.fromHeader(ccList); final Address[] bccs = Address.fromHeader(bccList); // make a message with the email addresses final MimeMessage message = new MimeMessage(); message.setFrom(from); message.setReplyTo(replies); message.setRecipients(RecipientType.TO, tos); message.setRecipients(RecipientType.CC, ccs); message.setRecipients(RecipientType.BCC, bccs); // convert the message to a local message using the conversion method final EmailContent.Message localMessage = new EmailContent.Message(); final boolean result = LegacyConversions.updateMessageFields(localMessage, message, 1, 1); assertTrue(result); // verify that we will store the email addresses in decoded form String decodedFrom = String.format("%s ", d); String decodedReply = String.format("%s ,%s ", d, d); String decodedTo = String.format("%s ,%s ", d, d); String decodedCc = String.format("%s ,%s ", d, d); String decodedBcc = String.format("%s ,%s ", d, d); assertEquals(decodedFrom, localMessage.mFrom); assertEquals(decodedReply, localMessage.mReplyTo); assertEquals(decodedTo, localMessage.mTo); assertEquals(decodedCc, localMessage.mCc); assertEquals(decodedBcc, localMessage.mBcc); } /** * Test basic conversion from Store message to Provider message, when the provider message * does not have a proper message-id. */ public void testUpdateMessageFields_NoMessageId() throws MessagingException { final MimeMessage message = new MimeMessage(); // set, then remove the message id message.setMessageId("Test-Message-ID"); message.removeHeader("Message-ID"); // create a local message with an ID final EmailContent.Message localMessage = new EmailContent.Message(); localMessage.mMessageId = "Test-Message-ID-Second"; final boolean result = LegacyConversions.updateMessageFields(localMessage, message, 1, 1); assertTrue(result); assertEquals("Test-Message-ID-Second", localMessage.mMessageId); } /** * Basic test of body parts conversion from Store message to Provider message. * This tests that a null body part simply results in null text, and does not crash * or return "null". */ public void testUpdateBodyFieldsNullText() throws MessagingException { ArrayList viewables = new ArrayList(); viewables.add(new MimeBodyPart(null, "text/plain")); // a "null" body part of type text/plain should result in a null mTextContent final BodyFieldData data = ConversionUtilities.parseBodyFields(viewables); assertNull(data.textContent); } }