diff options
-rw-r--r-- | src/com/android/emailcommon/mail/Address.java | 54 | ||||
-rw-r--r-- | src/com/android/mail/providers/Message.java | 10 | ||||
-rw-r--r-- | tests/src/com/android/emailcommon/mail/AddressUnitTests.java | 89 |
3 files changed, 69 insertions, 84 deletions
diff --git a/src/com/android/emailcommon/mail/Address.java b/src/com/android/emailcommon/mail/Address.java index ccd18a395..307c1a001 100644 --- a/src/com/android/emailcommon/mail/Address.java +++ b/src/com/android/emailcommon/mail/Address.java @@ -85,7 +85,7 @@ public class Address implements Parcelable { private static final Address[] EMPTY_ADDRESS_ARRAY = new Address[0]; - // delimiters are chars that do not appear in an email address, used by pack/unpack + // delimiters are chars that do not appear in an email address, used by fromHeader private static final char LIST_DELIMITER_EMAIL = '\1'; private static final char LIST_DELIMITER_PERSONAL = '\2'; @@ -423,45 +423,46 @@ public class Address implements Parcelable { } /** - * Returns exactly the same result as Address.toString(Address.unpack(packedList)). + * Returns exactly the same result as Address.toString(Address.fromHeader(addressList)). */ - public static String unpackToString(String packedList) { - return toString(unpack(packedList)); + public static String fromHeaderToString(String addressList) { + return toString(fromHeader(addressList)); } /** - * Returns exactly the same result as Address.pack(Address.parse(textList)). + * Returns exactly the same result as Address.toHeader(Address.parse(addressList)). */ - public static String parseAndPack(String textList) { - return Address.pack(Address.parse(textList)); + public static String parseToHeader(String addressList) { + return Address.toHeader(Address.parse(addressList)); } /** - * Returns null if the packedList has 0 addresses, otherwise returns the first address. - * The same as Address.unpack(packedList)[0] for non-empty list. + * Returns null if the addressList has 0 addresses, otherwise returns the first address. + * The same as Address.fromHeader(addressList)[0] for non-empty list. * This is an utility method that offers some performance optimization opportunities. */ - public static Address unpackFirst(String packedList) { - Address[] array = unpack(packedList); + public static Address firstAddress(String addressList) { + Address[] array = fromHeader(addressList); return array.length > 0 ? array[0] : null; } /** - * Convert a packed list of addresses to a form suitable for use in an RFC822 header. + * This method exists to convert an address list formatted in a deprecated legacy format to the + * standard RFC822 header format. {@link #fromHeader(String)} is capable of reading the legacy + * format and the RFC822 format. {@link #toHeader()} always produces the RFC822 format. + * * This implementation is brute-force, and could be replaced with a more efficient version * if desired. */ - public static String packedToHeader(String packedList) { - return toHeader(unpack(packedList)); + public static String reformatToHeader(String addressList) { + return toHeader(fromHeader(addressList)); } /** - * Unpacks an address list that is either CSV of RFC822 addresses OR (for backward - * compatibility) previously packed with pack() - * @param addressList string packed with pack() or CSV of RFC822 addresses - * @return array of addresses resulting from unpack + * @param addressList a CSV of RFC822 addresses or the deprecated legacy string format + * @return array of addresses parsed from <code>addressList</code> */ - public static Address[] unpack(String addressList) { + public static Address[] fromHeader(String addressList) { if (addressList == null || addressList.length() == 0) { return EMPTY_ADDRESS_ARRAY; } @@ -505,21 +506,6 @@ public class Address implements Parcelable { return addresses.toArray(new Address[addresses.size()]); } - /** - * Generate a String containing RFC822 addresses separated by commas - * NOTE: We used to "pack" these addresses in an app-specific format, but no longer do so - */ - public static String pack(Address[] addresses) { - return Address.toHeader(addresses); - } - - /** - * Produces the same result as pack(array), but only packs one (this) address. - */ - public String pack() { - return toHeader(); - } - public static final Creator<Address> CREATOR = new Creator<Address>() { @Override public Address createFromParcel(Parcel parcel) { diff --git a/src/com/android/mail/providers/Message.java b/src/com/android/mail/providers/Message.java index 74935eda8..35a543d4a 100644 --- a/src/com/android/mail/providers/Message.java +++ b/src/com/android/mail/providers/Message.java @@ -370,14 +370,14 @@ public class Message implements Parcelable, HtmlMessage { public Message(Context context, MimeMessage mimeMessage, Uri emlFileUri) throws MessagingException { // Set message header values. - setFrom(Address.pack(mimeMessage.getFrom())); - setTo(Address.pack(mimeMessage.getRecipients( + setFrom(Address.toHeader(mimeMessage.getFrom())); + setTo(Address.toHeader(mimeMessage.getRecipients( com.android.emailcommon.mail.Message.RecipientType.TO))); - setCc(Address.pack(mimeMessage.getRecipients( + setCc(Address.toHeader(mimeMessage.getRecipients( com.android.emailcommon.mail.Message.RecipientType.CC))); - setBcc(Address.pack(mimeMessage.getRecipients( + setBcc(Address.toHeader(mimeMessage.getRecipients( com.android.emailcommon.mail.Message.RecipientType.BCC))); - setReplyTo(Address.pack(mimeMessage.getReplyTo())); + setReplyTo(Address.toHeader(mimeMessage.getReplyTo())); subject = mimeMessage.getSubject(); final Date sentDate = mimeMessage.getSentDate(); diff --git a/tests/src/com/android/emailcommon/mail/AddressUnitTests.java b/tests/src/com/android/emailcommon/mail/AddressUnitTests.java index 13bf686ed..48186e464 100644 --- a/tests/src/com/android/emailcommon/mail/AddressUnitTests.java +++ b/tests/src/com/android/emailcommon/mail/AddressUnitTests.java @@ -44,15 +44,14 @@ public class AddressUnitTests extends AndroidTestCase { ; private static final int MULTI_ADDRESSES_COUNT = 10; - private static final Address PACK_ADDR_1 = new Address("john@gmail.com", "John Doe"); - private static final Address PACK_ADDR_2 = new Address("foo@bar.com", null); - private static final Address PACK_ADDR_3 = new Address( - "mar.y+test@gmail.com", "Mar-y, B; B*arr"); - private static final Address[][] PACK_CASES = { - {PACK_ADDR_2}, {PACK_ADDR_1}, - {PACK_ADDR_1, PACK_ADDR_2}, {PACK_ADDR_2, PACK_ADDR_1}, - {PACK_ADDR_1, PACK_ADDR_3}, {PACK_ADDR_2, PACK_ADDR_2}, - {PACK_ADDR_1, PACK_ADDR_2, PACK_ADDR_3}, {PACK_ADDR_3, PACK_ADDR_1, PACK_ADDR_2} + private static final Address ADDR_1 = new Address("john@gmail.com", "John Doe"); + private static final Address ADDR_2 = new Address("foo@bar.com", null); + private static final Address ADDR_3 = new Address("mar.y+test@gmail.com", "Mar-y, B; B*arr"); + private static final Address[][] TO_HEADER_CASES = { + {ADDR_2}, {ADDR_1}, + {ADDR_1, ADDR_2}, {ADDR_2, ADDR_1}, + {ADDR_1, ADDR_3}, {ADDR_2, ADDR_2}, + {ADDR_1, ADDR_2, ADDR_3}, {ADDR_3, ADDR_1, ADDR_2} }; Address mAddress1; @@ -557,34 +556,34 @@ public class AddressUnitTests extends AndroidTestCase { * NOTE: This is not a claim that these edge cases are "correct", only to maintain consistent * behavior while I am changing some of the code in the function under test. */ - public void testEmptyPack() { + public void testEmptyToHeader() { String result; // null input => null string - result = Address.pack(null); + result = Address.toHeader(null); assertNull("packing null", result); // zero-length input => null string - result = Address.pack(new Address[] { }); + result = Address.toHeader(new Address[] { }); assertNull("packing empty array", result); } /** - * Simple quick checks of empty-input edge conditions for unpack() + * Simple quick checks of empty-input edge conditions for fromHeader() * * NOTE: This is not a claim that these edge cases are "correct", only to maintain consistent * behavior while I am changing some of the code in the function under test. */ - public void testEmptyUnpack() { + public void testEmptyFromHeader() { Address[] result; /* // null input => empty array - result = Address.unpack(null); + result = Address.fromHeader(null); assertTrue("unpacking null address", result != null && result.length == 0); */ // empty string input => empty array - result = Address.unpack(""); + result = Address.fromHeader(""); assertTrue("unpacking zero-length", result != null && result.length == 0); } @@ -613,60 +612,60 @@ public class AddressUnitTests extends AndroidTestCase { return true; } - public void testPackUnpack() { - for (Address[] list : PACK_CASES) { - String packed = Address.pack(list); - assertTrue(packed, addressArrayEquals(list, Address.unpack(packed))); + public void testToHeaderFromHeader() { + for (Address[] list : TO_HEADER_CASES) { + String packed = Address.toHeader(list); + assertTrue(packed, addressArrayEquals(list, Address.fromHeader(packed))); } } /** - * Tests that unpackToString() returns the same result as toString(unpack()). + * Tests that fromHeaderToString() returns the same result as toString(fromHeader()). */ - public void testUnpackToString() { - assertNull(Address.unpackToString(null)); - assertNull(Address.unpackToString("")); - - for (Address[] list : PACK_CASES) { - String packed = Address.pack(list); - String s1 = Address.unpackToString(packed); - String s2 = Address.toString(Address.unpack(packed)); + public void testFromHeaderToString() { + assertNull(Address.fromHeaderToString(null)); + assertNull(Address.fromHeaderToString("")); + + for (Address[] list : TO_HEADER_CASES) { + String packed = Address.toHeader(list); + String s1 = Address.fromHeaderToString(packed); + String s2 = Address.toString(Address.fromHeader(packed)); assertEquals(s2, s2, s1); } } /** - * Tests that parseAndPack() returns the same result as pack(parse()). + * Tests that parseToHeader() returns the same result as toHeader(parse()). */ public void testParseAndPack() { - String s1 = Address.parseAndPack(MULTI_ADDRESSES_LIST); - String s2 = Address.pack(Address.parse(MULTI_ADDRESSES_LIST)); + String s1 = Address.parseToHeader(MULTI_ADDRESSES_LIST); + String s2 = Address.toHeader(Address.parse(MULTI_ADDRESSES_LIST)); assertEquals(s2, s1); } public void testSinglePack() { Address[] addrArray = new Address[1]; - for (Address address : new Address[]{PACK_ADDR_1, PACK_ADDR_2, PACK_ADDR_3}) { - String packed1 = address.pack(); + for (Address address : new Address[]{ADDR_1, ADDR_2, ADDR_3}) { + String packed1 = address.toHeader(); addrArray[0] = address; - String packed2 = Address.pack(addrArray); + String packed2 = Address.toHeader(addrArray); assertEquals(packed1, packed2); } } /** * Tests that: - * 1. unpackFirst() with empty list returns null. - * 2. unpackFirst() with non-empty returns the same as unpack()[0] + * 1. firstAddress() with empty list returns null. + * 2. firstAddress() with non-empty returns the same as fromHeader()[0] */ - public void testUnpackFirst() { - assertNull(Address.unpackFirst(null)); - assertNull(Address.unpackFirst("")); - - for (Address[] list : PACK_CASES) { - String packed = Address.pack(list); - Address[] array = Address.unpack(packed); - Address first = Address.unpackFirst(packed); + public void testFirstAddress() { + assertNull(Address.firstAddress(null)); + assertNull(Address.firstAddress("")); + + for (Address[] list : TO_HEADER_CASES) { + String packed = Address.toHeader(list); + Address[] array = Address.fromHeader(packed); + Address first = Address.firstAddress(packed); assertTrue(packed, addressEquals(array[0], first)); } } |