196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/* 296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * you may not use this file except in compliance with the License. 696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * You may obtain a copy of the License at 796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * See the License for the specific language governing permissions and 1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * limitations under the License. 1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 172193962ca2b3157e79f731736afa2a0c972e778aMarc Blankpackage com.android.emailcommon.mail; 182193962ca2b3157e79f731736afa2a0c972e778aMarc Blank 1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.test.AndroidTestCase; 2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest; 21629e18ad866917523599ed059898f4d986e49e26Mihai Predaimport org.apache.james.mime4j.decoder.DecoderUtil; 2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 23e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Predaimport java.io.UnsupportedEncodingException; 242577842269f035856b877eb990567c7a32e81252Ben Komaloimport java.net.URLEncoder; 25e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda 2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/** 2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * This is a series of unit tests for the Address class. These tests must be locally 2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * complete - no server(s) required. 2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project@SmallTest 3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class AddressUnitTests extends AndroidTestCase { 32a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 33a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki private static final String MULTI_ADDRESSES_LIST = 34deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "noname1@dom1.com, " 35deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "<noname2@dom2.com>, " 36deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "simple name <address3@dom3.org>, " 37deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "\"name,4\" <address4@dom4.org>," 38deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "\"big \\\"G\\\"\" <bigG@dom5.net>," 39deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "\u65E5\u672C\u8A9E <address6@co.jp>," 40deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "\"\u65E5\u672C\u8A9E\" <address7@co.jp>," 41deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "\uD834\uDF01\uD834\uDF46 <address8@ne.jp>," 42a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki + "\"\uD834\uDF01\uD834\uDF46\" <address9@ne.jp>," 43a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki + "noname@dom.com <noname@dom.com>" // personal == address 44a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki ; 45a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki private static final int MULTI_ADDRESSES_COUNT = 10; 46e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda 47e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda private static final Address PACK_ADDR_1 = new Address("john@gmail.com", "John Doe"); 48e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda private static final Address PACK_ADDR_2 = new Address("foo@bar.com", null); 492577842269f035856b877eb990567c7a32e81252Ben Komalo private static final Address PACK_ADDR_3 = new Address( 502577842269f035856b877eb990567c7a32e81252Ben Komalo "mar.y+test@gmail.com", "Mar-y, B; B*arr"); 51e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda private static final Address[][] PACK_CASES = { 52a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki {PACK_ADDR_2}, {PACK_ADDR_1}, 53a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki {PACK_ADDR_1, PACK_ADDR_2}, {PACK_ADDR_2, PACK_ADDR_1}, 54a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki {PACK_ADDR_1, PACK_ADDR_3}, {PACK_ADDR_2, PACK_ADDR_2}, 55e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda {PACK_ADDR_1, PACK_ADDR_2, PACK_ADDR_3}, {PACK_ADDR_3, PACK_ADDR_1, PACK_ADDR_2} 56e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda }; 57a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Address mAddress1; 5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Address mAddress2; 6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Address mAddress3; 6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Setup code. We generate a handful of Address objects 6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project @Override 6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project protected void setUp() throws Exception { 6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project super.setUp(); 6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAddress1 = new Address("address1", "personal1"); 7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAddress2 = new Address("address2", ""); 7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAddress3 = new Address("address3", null); 7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 74629e18ad866917523599ed059898f4d986e49e26Mihai Preda // see documentation of DecoderUtil.decodeEncodedWords() for details 75629e18ad866917523599ed059898f4d986e49e26Mihai Preda private String padEncoded(String s) { 76629e18ad866917523599ed059898f4d986e49e26Mihai Preda return "=?UTF-8?B?" + s + "?="; 77629e18ad866917523599ed059898f4d986e49e26Mihai Preda } 78629e18ad866917523599ed059898f4d986e49e26Mihai Preda 79629e18ad866917523599ed059898f4d986e49e26Mihai Preda /** 80629e18ad866917523599ed059898f4d986e49e26Mihai Preda * Generate strings of incresing lenght by taking prefix substrings. 81629e18ad866917523599ed059898f4d986e49e26Mihai Preda * For each of them, compare with the decoding of the precomputed base-64 encoding. 82629e18ad866917523599ed059898f4d986e49e26Mihai Preda */ 83629e18ad866917523599ed059898f4d986e49e26Mihai Preda public void testBase64Decode() { 84629e18ad866917523599ed059898f4d986e49e26Mihai Preda String testString = "xyza\0\""; 85629e18ad866917523599ed059898f4d986e49e26Mihai Preda String base64Encoded[] = {"", "eA==", "eHk=", "eHl6", "eHl6YQ==", "eHl6YQA=", "eHl6YQAi"}; 86629e18ad866917523599ed059898f4d986e49e26Mihai Preda int len = testString.length(); 87629e18ad866917523599ed059898f4d986e49e26Mihai Preda for (int i = 1; i <= len; ++i) { 88629e18ad866917523599ed059898f4d986e49e26Mihai Preda String encoded = padEncoded(base64Encoded[i]); 89629e18ad866917523599ed059898f4d986e49e26Mihai Preda String decoded = DecoderUtil.decodeEncodedWords(encoded); 90629e18ad866917523599ed059898f4d986e49e26Mihai Preda String prefix = testString.substring(0, i); 91629e18ad866917523599ed059898f4d986e49e26Mihai Preda assertEquals(""+i, prefix, decoded); 92629e18ad866917523599ed059898f4d986e49e26Mihai Preda } 93629e18ad866917523599ed059898f4d986e49e26Mihai Preda } 94629e18ad866917523599ed059898f4d986e49e26Mihai Preda 9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 96deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test for setAddress(). 97deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 98deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testSetAddress() { 99deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project String bareAddress = "user1@dom1.com"; 100deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project String bracketAddress = "<user2@dom2.com>"; 101a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 102deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address address = new Address(bareAddress); 103deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bare address", "user1@dom1.com", address.getAddress()); 104a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 105deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setAddress(bracketAddress); 106deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bracket address", "user2@dom2.com", address.getAddress()); 107deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 108a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 109deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 110deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test for empty setPersonal(). 111deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 112deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testNullPersonal() { 113deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address address = new Address("user1@dom1.org"); 114deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("no name", address.getPersonal()); 115a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 116deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setPersonal(null); 117deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("null name", address.getPersonal()); 118a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 119deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setPersonal(""); 120deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("empty name", address.getPersonal()); 121a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 122deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setPersonal("\"\""); 123deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("quoted empty address", address.getPersonal()); 124deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 125a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 126deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 127deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test for setPersonal(). 128deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 129deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testSetPersonal() { 130deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address address = new Address("user1@dom1.net", "simple name"); 131deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("simple name", "simple name", address.getPersonal()); 132a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 133deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setPersonal("big \\\"G\\\""); 134deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name", "big \"G\"", address.getPersonal()); 135a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 136deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setPersonal("=?UTF-8?Q?big \"G\"?="); 137deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted printable name", "big \"G\"", address.getPersonal()); 138a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 139deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setPersonal("=?UTF-8?B?YmlnICJHIg==?="); 140deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("base64 encoded name", "big \"G\"", address.getPersonal()); 141deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 142a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 143deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 144deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test for setPersonal() with utf-16 and utf-32. 145deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 146deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testSetPersonalMultipleEncodings() { 147deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address address = new Address("user1@dom1.co.jp", "=?UTF-8?B?5bK45pys?="); 148deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("base64 utf-16 name", "\u5CB8\u672C", address.getPersonal()); 149a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 150deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setPersonal("\"=?UTF-8?Q?=E5=B2=B8=E6=9C=AC?=\""); 151deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted printable utf-16 name", "\u5CB8\u672C", address.getPersonal()); 152a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 153deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setPersonal("=?ISO-2022-JP?B?GyRCNF9LXBsoQg==?="); 154deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("base64 jis encoded name", "\u5CB8\u672C", address.getPersonal()); 155a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 156deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setPersonal("\"=?UTF-8?B?8J2MgfCdjYY=?=\""); 157deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("base64 utf-32 name", "\uD834\uDF01\uD834\uDF46", address.getPersonal()); 158deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 159deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project address.setPersonal("=?UTF-8?Q?=F0=9D=8C=81=F0=9D=8D=86?="); 160deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted printable utf-32 name", 161deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\uD834\uDF01\uD834\uDF46", address.getPersonal()); 162deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 163a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 164deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 1653469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * TODO: more in-depth tests for parse() 16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 167a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 16896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 1693469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * Simple quick checks of empty-input edge conditions for parse() 170a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki * 1713469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * NOTE: This is not a claim that these edge cases are "correct", only to maintain consistent 1723469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * behavior while I am changing some of the code in the function under test. 1733469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project */ 1743469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project public void testEmptyParse() { 1753469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project Address[] result; 176a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 1773469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project // null input => empty array 1783469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project result = Address.parse(null); 1793469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project assertTrue("parsing null address", result != null && result.length == 0); 180a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 1813469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project // empty string input => empty array 1823469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project result = Address.parse(""); 1833469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project assertTrue("parsing zero-length", result != null && result.length == 0); 184a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 185deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project // spaces 186deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project result = Address.parse(" "); 187deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertTrue("parsing spaces", result != null && result.length == 0); 188deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 189deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project // spaces with comma 190deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project result = Address.parse(" , "); 191deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertTrue("parsing spaces with comma", result != null && result.length == 0); 192deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 193a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 194deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 195deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test parsing for single address. 196deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 197deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testSingleParse() { 198deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address1 = Address.parse("address1@dom1.com"); 199deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bare address count", 1, address1.length); 200deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bare address", "address1@dom1.com", address1[0].getAddress()); 201deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("name of bare address", address1[0].getPersonal()); 202deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 203deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address2 = Address.parse("<address2@dom2.com>"); 204deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bracket address count", 1, address2.length); 205deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bracket address", "address2@dom2.com", address2[0].getAddress()); 206deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("name of bracket address", address2[0].getPersonal()); 207deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 208deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address3 = Address.parse("first last <address3@dom3.org>"); 209deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("address with name count", 1, address3.length); 210deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("address with name", "address3@dom3.org", address3[0].getAddress()); 211deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("name of address with name", "first last", address3[0].getPersonal()); 212deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 213deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address4 = Address.parse("\"first,last\" <address4@dom4.org>"); 214deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("address with quoted name count", 1, address4.length); 215deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("address with quoted name", "address4@dom4.org", address4[0].getAddress()); 216deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("name of address with quoted name", "first,last", address4[0].getPersonal()); 217deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 218a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 219deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 220deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test parsing for illegal address. 221deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 222deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testIllegalParse() { 223deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address1 = Address.parse("address1"); 224deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no atmark", 0, address1.length); 225deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 226deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address2 = Address.parse("address2@"); 227deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no domain", 0, address2.length); 228a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 229deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address3 = Address.parse("@dom3.com"); 230deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no local part", 0, address3.length); 231deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 232deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address4 = Address.parse("address4@sub@dom4.org"); 233deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("more than one atmark", 0, address4.length); 234deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 235deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address5 = Address.parse("address5@dom5"); 236deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("not dot in domain part", 0, address5.length); 237deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 238deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address6 = Address.parse("address6@dom6.com."); 239deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("domain ends with dot", 0, address6.length); 240deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 241deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] address7 = Address.parse("address7@.dom7.org"); 242deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("domain starts with dot", 0, address7.length); 243deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 244a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 245deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 246deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test parsing for address part. 247deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 248deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testParsingAddress() { 249deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] addresses = Address.parse("address1@dom1.net, <address2@dom2.com>"); 250deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("address count", 2, addresses.length); 251deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 252deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bare address", "address1@dom1.net", addresses[0].getAddress()); 253deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("bare address name", addresses[0].getPersonal()); 254deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 255deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bracket address", "address2@dom2.com", addresses[1].getAddress()); 256deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("bracket address name", addresses[1].getPersonal()); 2573469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project } 258a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 2593469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project /** 260deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test parsing for simple name part. 26196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 262deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testParsingSimpleName() { 263deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] addresses = Address.parse( 264deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "name 1 <address1@dom1.net>, " + 265deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\"name,2\" <address2@dom2.org>"); 266deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("address count", 2, addresses.length); 267a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 268deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bare name address", "address1@dom1.net", addresses[0].getAddress()); 269deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bare name", "name 1", addresses[0].getPersonal()); 270deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 271deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted name address", "address2@dom2.org", addresses[1].getAddress()); 272deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted name", "name,2", addresses[1].getPersonal()); 273deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 274a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 275deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 276deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test parsing for utf-16 name part. 277deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 278deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testParsingUtf16Name() { 279deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] addresses = Address.parse( 280deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\u3042\u3044\u3046 \u3048\u304A <address1@dom1.jp>, " + 281deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\"\u3042\u3044\u3046,\u3048\u304A\" <address2@dom2.jp>"); 282deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("address count", 2, addresses.length); 283a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 284deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bare utf-16 name address", "address1@dom1.jp", addresses[0].getAddress()); 285deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bare utf-16 name", 286deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\u3042\u3044\u3046 \u3048\u304A", addresses[0].getPersonal()); 287deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 288deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted utf-16 name address", 289deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "address2@dom2.jp", addresses[1].getAddress()); 290deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted utf-16 name", 291deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\u3042\u3044\u3046,\u3048\u304A", addresses[1].getPersonal()); 292deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 293a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 294deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 295deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test parsing for utf-32 name part. 296deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 297deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testParsingUtf32Name() { 298deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] addresses = Address.parse( 299deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\uD834\uDF01\uD834\uDF46 \uD834\uDF22 <address1@dom1.net>, " + 300deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\"\uD834\uDF01\uD834\uDF46,\uD834\uDF22\" <address2@dom2.com>"); 301deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("address count", 2, addresses.length); 302a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 303deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bare utf-32 name address", "address1@dom1.net", addresses[0].getAddress()); 304deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("bare utf-32 name", 305deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\uD834\uDF01\uD834\uDF46 \uD834\uDF22", addresses[0].getPersonal()); 306deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 307deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted utf-32 name address", 308deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "address2@dom2.com", addresses[1].getAddress()); 309deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted utf-32 name", 310deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\uD834\uDF01\uD834\uDF46,\uD834\uDF22", addresses[1].getPersonal()); 311deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 312a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 313deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 314deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test parsing for multi addresses. 315deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 316deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testParseMulti() { 317deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] addresses = Address.parse(MULTI_ADDRESSES_LIST); 318a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 319deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("multi addrsses count", MULTI_ADDRESSES_COUNT, addresses.length); 320a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 321deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no name 1 address", "noname1@dom1.com", addresses[0].getAddress()); 322deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("no name 1 name", addresses[0].getPersonal()); 323deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no name 2 address", "noname2@dom2.com", addresses[1].getAddress()); 324deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("no name 2 name", addresses[1].getPersonal()); 325deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("simple name address", "address3@dom3.org", addresses[2].getAddress()); 326deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("simple name name", "simple name", addresses[2].getPersonal()); 327deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted name address", "address4@dom4.org", addresses[3].getAddress()); 328deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted name name", "name,4", addresses[3].getPersonal()); 329deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name address", "bigG@dom5.net", addresses[4].getAddress()); 330deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name name", "big \"G\"", addresses[4].getPersonal()); 331a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-16 name address", "address6@co.jp", addresses[5].getAddress()); 332a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-16 name name", "\u65E5\u672C\u8A9E", addresses[5].getPersonal()); 333a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-16 quoted name address", "address7@co.jp", addresses[6].getAddress()); 334deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("utf-16 quoted name name", "\u65E5\u672C\u8A9E", 335a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki addresses[6].getPersonal()); 336a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-32 name address", "address8@ne.jp", addresses[7].getAddress()); 337a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-32 name name", "\uD834\uDF01\uD834\uDF46", addresses[7].getPersonal()); 338a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-32 quoted name address", "address9@ne.jp", addresses[8].getAddress()); 339deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("utf-32 quoted name name", "\uD834\uDF01\uD834\uDF46", 340a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki addresses[8].getPersonal()); 341deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 342a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 343deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 344deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test various combinations of the toString (single) method 345deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 346deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testToStringSingle() { 347deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] addresses = Address.parse(MULTI_ADDRESSES_LIST); 348a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 349deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("multi addrsses count", MULTI_ADDRESSES_COUNT, addresses.length); 350deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 351deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project // test for toString() results. 352deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no name 1", "noname1@dom1.com", addresses[0].toString()); 353deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no name 2", "noname2@dom2.com", addresses[1].toString()); 354deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("simple name", "simple name <address3@dom3.org>", addresses[2].toString()); 3552577842269f035856b877eb990567c7a32e81252Ben Komalo assertEquals("double quoted name", 3562577842269f035856b877eb990567c7a32e81252Ben Komalo "\"name,4\" <address4@dom4.org>", addresses[3].toString()); 357deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name", "\"big \"G\"\" <bigG@dom5.net>", addresses[4].toString()); 358deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("utf-16 name", "\u65E5\u672C\u8A9E <address6@co.jp>", 359a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki addresses[5].toString()); 360deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("utf-16 quoted name", "\u65E5\u672C\u8A9E <address7@co.jp>", 361a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki addresses[6].toString()); 362deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("utf-32 name", "\uD834\uDF01\uD834\uDF46 <address8@ne.jp>", 363a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki addresses[7].toString()); 364deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("utf-32 quoted name", "\uD834\uDF01\uD834\uDF46 <address9@ne.jp>", 365a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki addresses[8].toString()); 366a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("name==address", "noname@dom.com", addresses[9].toString()); 367deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 368a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 369deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 370deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test various combinations of the toString (multi) method 371deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 372deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testToStringMulti() { 373f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki final Address[] address = Address.parse("noname1@dom1.com"); 374f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki final Address[] addresses = Address.parse(MULTI_ADDRESSES_LIST); 375a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 376deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("multi addrsses count", MULTI_ADDRESSES_COUNT, addresses.length); 377deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 378f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki { 379f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki String line = Address.toString(address); 380f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki assertEquals("toString multi-1", 381f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki "noname1@dom1.com", 382f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki line); 383f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki } 384f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki { 385f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki String line = Address.toString(addresses); 386f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki assertEquals("toString multi-n", 387f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki "noname1@dom1.com," 388f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "noname2@dom2.com," 389f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "simple name <address3@dom3.org>," 390f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\"name,4\" <address4@dom4.org>," 391f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\"big \"G\"\" <bigG@dom5.net>," 392f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\u65E5\u672C\u8A9E <address6@co.jp>," 393f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\u65E5\u672C\u8A9E <address7@co.jp>," 394f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\uD834\uDF01\uD834\uDF46 <address8@ne.jp>," 395f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\uD834\uDF01\uD834\uDF46 <address9@ne.jp>," 396f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "noname@dom.com", 397f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki line); 398f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki } 399f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki 400f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki // With custom separator 401f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki { 402f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki String line = Address.toString(address, "$"); 403f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki assertEquals("toString multi-1", 404f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki "noname1@dom1.com", 405f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki line); 406f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki } 407f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki 408f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki { 409f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki String line = Address.toString(addresses, "$"); 410f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki assertEquals("toString multi-n", 411f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki "noname1@dom1.com$" 412f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "noname2@dom2.com$" 413f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "simple name <address3@dom3.org>$" 414f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\"name,4\" <address4@dom4.org>$" 415f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\"big \"G\"\" <bigG@dom5.net>$" 416f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\u65E5\u672C\u8A9E <address6@co.jp>$" 417f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\u65E5\u672C\u8A9E <address7@co.jp>$" 418f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\uD834\uDF01\uD834\uDF46 <address8@ne.jp>$" 419f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "\uD834\uDF01\uD834\uDF46 <address9@ne.jp>$" 420f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki + "noname@dom.com", 421f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki line); 422f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki } 423deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 424deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 425deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 426deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test parsing for quoted and encoded name part. 427deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 428deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testParsingQuotedEncodedName() { 429deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] addresses = Address.parse( 430deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "\"big \\\"G\\\"\" <bigG@dom1.com>, =?UTF-8?B?5pel5pys6Kqe?= <address2@co.jp>"); 431deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 432deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("address count", 2, addresses.length); 433deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 434deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name address", "bigG@dom1.com", addresses[0].getAddress()); 435deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name", "big \"G\"", addresses[0].getPersonal()); 436deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 437deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("encoded name address", "address2@co.jp", addresses[1].getAddress()); 438deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("encoded name", "\u65E5\u672C\u8A9E", addresses[1].getPersonal()); 439deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 440deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 441deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 442deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test various combinations of the toHeader (single) method 443deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 444deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testToHeaderSingle() { 445deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address noName1 = new Address("noname1@dom1.com"); 446deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address noName2 = new Address("<noname2@dom2.com>", ""); 447deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address simpleName = new Address("address3@dom3.org", "simple name"); 448deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address dquoteName = new Address("address4@dom4.org", "name,4"); 449deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address quotedName = new Address("bigG@dom5.net", "big \"G\""); 450deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address utf16Name = new Address("<address6@co.jp>", "\"\u65E5\u672C\u8A9E\""); 451deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address utf32Name = new Address("<address8@ne.jp>", "\uD834\uDF01\uD834\uDF46"); 452a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki Address sameName = new Address("address@dom.org", "address@dom.org"); 453a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 454deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project // test for internal states. 455deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no name 1 address", "noname1@dom1.com", noName1.getAddress()); 456deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("no name 1 name", noName1.getPersonal()); 457deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no name 2 address", "noname2@dom2.com", noName2.getAddress()); 458deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("no name 2 name", noName2.getPersonal()); 459deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("simple name address", "address3@dom3.org", simpleName.getAddress()); 460deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("simple name name", "simple name", simpleName.getPersonal()); 461deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted name address", "address4@dom4.org", dquoteName.getAddress()); 462deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted name name", "name,4", dquoteName.getPersonal()); 463deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name address", "bigG@dom5.net", quotedName.getAddress()); 464deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name name", "big \"G\"", quotedName.getPersonal()); 465a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-16 name address", "address6@co.jp", utf16Name.getAddress()); 466a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-16 name name", "\u65E5\u672C\u8A9E", utf16Name.getPersonal()); 467a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-32 name address", "address8@ne.jp", utf32Name.getAddress()); 468a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-32 name name", "\uD834\uDF01\uD834\uDF46", utf32Name.getPersonal()); 469a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("name == address address", "address@dom.org", sameName.getAddress()); 470a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("name == address name", "address@dom.org", sameName.getPersonal()); 471deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 472deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project // Test for toHeader() results. 473deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no name 1", "noname1@dom1.com", noName1.toHeader()); 474deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no name 2", "noname2@dom2.com", noName2.toHeader()); 475deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("simple name", "simple name <address3@dom3.org>", simpleName.toHeader()); 476deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted name", "\"name,4\" <address4@dom4.org>", dquoteName.toHeader()); 477deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name", "\"big \\\"G\\\"\" <bigG@dom5.net>", quotedName.toHeader()); 478deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("utf-16 name", "=?UTF-8?B?5pel5pys6Kqe?= <address6@co.jp>", 479a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki utf16Name.toHeader()); 480deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("utf-32 name", "=?UTF-8?B?8J2MgfCdjYY=?= <address8@ne.jp>", 481a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki utf32Name.toHeader()); 482a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("name == address", "\"address@dom.org\" <address@dom.org>", 483a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki sameName.toHeader()); 484deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 485a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 486deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project /** 487deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project * Test various combinations of the toHeader (multi) method 488deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project */ 489deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project public void testToHeaderMulti() { 490deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address noName1 = new Address("noname1@dom1.com"); 491deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address noName2 = new Address("<noname2@dom2.com>", ""); 492deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address simpleName = new Address("address3@dom3.org", "simple name"); 493deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address dquoteName = new Address("address4@dom4.org", "name,4"); 494deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address quotedName = new Address("bigG@dom5.net", "big \"G\""); 495deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address utf16Name = new Address("<address6@co.jp>", "\"\u65E5\u672C\u8A9E\""); 496deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address utf32Name = new Address("<address8@ne.jp>", "\uD834\uDF01\uD834\uDF46"); 497a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 498deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project // test for internal states. 499deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no name 1 address", "noname1@dom1.com", noName1.getAddress()); 500deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("no name 1 name", noName1.getPersonal()); 501deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("no name 2 address", "noname2@dom2.com", noName2.getAddress()); 502deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertNull("no name 2 name", noName2.getPersonal()); 503deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("simple name address", "address3@dom3.org", simpleName.getAddress()); 504deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("simple name name", "simple name", simpleName.getPersonal()); 505deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted name address", "address4@dom4.org", dquoteName.getAddress()); 506deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("double quoted name name", "name,4", dquoteName.getPersonal()); 507deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name address", "bigG@dom5.net", quotedName.getAddress()); 508deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("quoted name name", "big \"G\"", quotedName.getPersonal()); 509a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-16 name address", "address6@co.jp", utf16Name.getAddress()); 510a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-16 name name", "\u65E5\u672C\u8A9E", utf16Name.getPersonal()); 511a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-32 name address", "address8@ne.jp", utf32Name.getAddress()); 512a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki assertEquals("utf-32 name name", "\uD834\uDF01\uD834\uDF46", utf32Name.getPersonal()); 513deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project 514deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project Address[] addresses = new Address[] { 515deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project noName1, noName2, simpleName, dquoteName, quotedName, utf16Name, utf32Name, 516deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project }; 517deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project String line = Address.toHeader(addresses); 518f33420e68f75c93ac8aa3c645c771c877c0b0b7cMakoto Onuki 519deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project assertEquals("toHeader() multi", 520deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project "noname1@dom1.com, " 521deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "noname2@dom2.com, " 522deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "simple name <address3@dom3.org>, " 523deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "\"name,4\" <address4@dom4.org>, " 524deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "\"big \\\"G\\\"\" <bigG@dom5.net>, " 525deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "=?UTF-8?B?5pel5pys6Kqe?= <address6@co.jp>, " 526deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project + "=?UTF-8?B?8J2MgfCdjYY=?= <address8@ne.jp>", 527deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project line); 528deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project } 529a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 53096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 53196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Test various combinations of the toFriendly (single) method 53296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 533a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki public void testToFriendlySingle() { 53496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project assertEquals("personal1", mAddress1.toFriendly()); 53596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project assertEquals("address2", mAddress2.toFriendly()); 53696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project assertEquals("address3", mAddress3.toFriendly()); 53796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 538a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 53996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 54096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Test various combinations of the toFriendly (array) method 54196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 542a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki public void testToFriendlyArray() { 54396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Address[] list1 = null; 54496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Address[] list2 = new Address[0]; 54596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Address[] list3 = new Address[] { mAddress1 }; 54696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Address[] list4 = new Address[] { mAddress1, mAddress2, mAddress3 }; 547a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 54896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project assertEquals(null, Address.toFriendly(list1)); 54996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project assertEquals(null, Address.toFriendly(list2)); 55096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project assertEquals("personal1", Address.toFriendly(list3)); 551358a8157015c7cfe9ca219a9f516656f5975666dAndy Huang assertEquals("personal1, address2, address3", Address.toFriendly(list4)); 55296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 553a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 55496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 5553469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * Simple quick checks of empty-input edge conditions for pack() 556a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki * 5573469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * NOTE: This is not a claim that these edge cases are "correct", only to maintain consistent 5583469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * behavior while I am changing some of the code in the function under test. 5593469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project */ 5603469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project public void testEmptyPack() { 5613469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project String result; 562a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 5633469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project // null input => null string 5643469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project result = Address.pack(null); 5653469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project assertNull("packing null", result); 566a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 5673469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project // zero-length input => empty string 5683469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project result = Address.pack(new Address[] { }); 5693469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project assertEquals("packing empty array", "", result); 5703469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project } 571a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 5723469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project /** 5733469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * Simple quick checks of empty-input edge conditions for unpack() 574a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki * 5753469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * NOTE: This is not a claim that these edge cases are "correct", only to maintain consistent 5763469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * behavior while I am changing some of the code in the function under test. 5773469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project */ 5783469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project public void testEmptyUnpack() { 5793469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project Address[] result; 580a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 5813469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project // null input => empty array 5823469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project result = Address.unpack(null); 5833469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project assertTrue("unpacking null address", result != null && result.length == 0); 584a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 5853469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project // empty string input => empty array 5863469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project result = Address.unpack(""); 5873469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project assertTrue("unpacking zero-length", result != null && result.length == 0); 5883469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project } 5893469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project 590e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda private static boolean addressEquals(Address a1, Address a2) { 591e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda if (!a1.equals(a2)) { 592e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda return false; 593e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 594e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda final String displayName1 = a1.getPersonal(); 595e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda final String displayName2 = a2.getPersonal(); 596e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda if (displayName1 == null) { 597e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda return displayName2 == null; 598e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } else { 599e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda return displayName1.equals(displayName2); 600e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 601e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 602e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda 603e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda private static boolean addressArrayEquals(Address[] array1, Address[] array2) { 604e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda if (array1.length != array2.length) { 605e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda return false; 606e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 607e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda for (int i = array1.length - 1; i >= 0; --i) { 608e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda if (!addressEquals(array1[i], array2[i])) { 609e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda return false; 610e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 611e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 612e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda return true; 613e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 614e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda 615e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda public void testPackUnpack() { 616e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda for (Address[] list : PACK_CASES) { 617e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda String packed = Address.pack(list); 618e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda assertTrue(packed, addressArrayEquals(list, Address.unpack(packed))); 619e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 620e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 621e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda 62221ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda /** 62321ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda * Tests that unpackToString() returns the same result as toString(unpack()). 62421ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda */ 62521ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda public void testUnpackToString() { 626ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda assertNull(Address.unpackToString(null)); 627ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda assertNull(Address.unpackToString("")); 628ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda 62921ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda for (Address[] list : PACK_CASES) { 63021ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda String packed = Address.pack(list); 63121ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda String s1 = Address.unpackToString(packed); 63221ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda String s2 = Address.toString(Address.unpack(packed)); 63321ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda assertEquals(s2, s2, s1); 63421ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda } 63521ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda } 63621ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda 63721ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda /** 63821ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda * Tests that parseAndPack() returns the same result as pack(parse()). 63921ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda */ 64021ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda public void testParseAndPack() { 64121ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda String s1 = Address.parseAndPack(MULTI_ADDRESSES_LIST); 64221ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda String s2 = Address.pack(Address.parse(MULTI_ADDRESSES_LIST)); 64321ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda assertEquals(s2, s1); 64421ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda } 64521ace307e07cb4c363c4183f4d62f4049f5d92fdMihai Preda 646c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda public void testSinglePack() { 647c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda Address[] addrArray = new Address[1]; 648c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda for (Address address : new Address[]{PACK_ADDR_1, PACK_ADDR_2, PACK_ADDR_3}) { 649c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda String packed1 = address.pack(); 650c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda addrArray[0] = address; 651c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda String packed2 = Address.pack(addrArray); 652c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda assertEquals(packed1, packed2); 653c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda } 654c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda } 655c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda 656ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda /** 657ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda * Tests that: 658ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda * 1. unpackFirst() with empty list returns null. 659ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda * 2. unpackFirst() with non-empty returns the same as unpack()[0] 660ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda */ 661ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda public void testUnpackFirst() { 662ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda assertNull(Address.unpackFirst(null)); 663ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda assertNull(Address.unpackFirst("")); 664ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda 665ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda for (Address[] list : PACK_CASES) { 666ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda String packed = Address.pack(list); 667ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda Address[] array = Address.unpack(packed); 668ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda Address first = Address.unpackFirst(packed); 669ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda assertTrue(packed, addressEquals(array[0], first)); 670ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda } 671ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda } 672ff683a5b98eb0cc9c3e18bd022aa00c617b2eae1Mihai Preda 673ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda public void testIsValidAddress() { 674ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda String notValid[] = {"", "foo", "john@", "x@y", "x@y.", "foo.com"}; 675ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda String valid[] = {"x@y.z", "john@gmail.com", "a@b.c.d"}; 676ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda for (String address : notValid) { 677ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda assertTrue(address, !Address.isValidAddress(address)); 678ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda } 679ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda for (String address : valid) { 680ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda assertTrue(address, Address.isValidAddress(address)); 681ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda } 682a826d3fb03f29a07ea12e44237b2c02ea1926c74Makoto Onuki 683ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda // isAllValid() must accept empty address list as valid 684ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda assertTrue("Empty address list is valid", Address.isAllValid("")); 685ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda } 686e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda 687e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda /** 688e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda * Legacy pack() used for testing legacyUnpack(). 689e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda * The packed list is a comma separated list of: 690e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda * URLENCODE(address)[;URLENCODE(personal)] 691e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda * @See pack() 692e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda */ 693e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda private static String legacyPack(Address[] addresses) { 694e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda if (addresses == null) { 695e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda return null; 696e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } else if (addresses.length == 0) { 697e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda return ""; 698e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 699e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda StringBuffer sb = new StringBuffer(); 700e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda for (int i = 0, count = addresses.length; i < count; i++) { 701e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda Address address = addresses[i]; 702e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda try { 703e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda sb.append(URLEncoder.encode(address.getAddress(), "UTF-8")); 704e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda if (address.getPersonal() != null) { 705e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda sb.append(';'); 706e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda sb.append(URLEncoder.encode(address.getPersonal(), "UTF-8")); 707e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 708e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda if (i < count - 1) { 709e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda sb.append(','); 710e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 711e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 712e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda catch (UnsupportedEncodingException uee) { 713e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda return null; 714e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 715e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 716e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda return sb.toString(); 717e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda } 71896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 719