AddressUnitTests.java revision c6893ddf0fc1a647ca13a2b3aac2c68ca345de37
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
1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage com.android.email.mail;
1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.test.AndroidTestCase;
2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest;
2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
22e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Predaimport java.net.URLEncoder;
23e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Predaimport java.io.UnsupportedEncodingException;
24e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda
2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/**
2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * This is a series of unit tests for the Address class.  These tests must be locally
2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * complete - no server(s) required.
2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project@SmallTest
3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class AddressUnitTests extends AndroidTestCase {
3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
32deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    private static final String MULTI_ADDRESSES_LIST =
33deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project            "noname1@dom1.com, "
34deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project            + "<noname2@dom2.com>, "
35deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project            + "simple name <address3@dom3.org>, "
36deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project            + "\"name,4\" <address4@dom4.org>,"
37deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project            + "\"big \\\"G\\\"\" <bigG@dom5.net>,"
38deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project            + "\u65E5\u672C\u8A9E <address6@co.jp>,"
39deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project            + "\"\u65E5\u672C\u8A9E\" <address7@co.jp>,"
40deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project            + "\uD834\uDF01\uD834\uDF46 <address8@ne.jp>,"
41deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project            + "\"\uD834\uDF01\uD834\uDF46\" <address9@ne.jp>";
42deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    private static final int MULTI_ADDRESSES_COUNT = 9;
43e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda
44e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    private static final Address PACK_ADDR_1 = new Address("john@gmail.com", "John Doe");
45e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    private static final Address PACK_ADDR_2 = new Address("foo@bar.com", null);
46e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    private static final Address PACK_ADDR_3 = new Address("mar.y+test@gmail.com", "Mar-y, B; B*arr");
47e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    private static final Address[][] PACK_CASES = {
48e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        {PACK_ADDR_2}, {PACK_ADDR_1},
49e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        {PACK_ADDR_1, PACK_ADDR_2}, {PACK_ADDR_2, PACK_ADDR_1},
50e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        {PACK_ADDR_1, PACK_ADDR_3}, {PACK_ADDR_2, PACK_ADDR_2},
51e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        {PACK_ADDR_1, PACK_ADDR_2, PACK_ADDR_3}, {PACK_ADDR_3, PACK_ADDR_1, PACK_ADDR_2}
52e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    };
53deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    Address mAddress1;
5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    Address mAddress2;
5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    Address mAddress3;
5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Setup code.  We generate a handful of Address objects
6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    protected void setUp() throws Exception {
6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        super.setUp();
6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAddress1 = new Address("address1", "personal1");
6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAddress2 = new Address("address2", "");
6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAddress3 = new Address("address3", null);
6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
71deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test for setAddress().
72deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
73deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testSetAddress() {
74deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        String bareAddress = "user1@dom1.com";
75deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        String bracketAddress = "<user2@dom2.com>";
76deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
77deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address address = new Address(bareAddress);
78deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bare address", "user1@dom1.com", address.getAddress());
79deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
80deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setAddress(bracketAddress);
81deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bracket address", "user2@dom2.com", address.getAddress());
82deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
83deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
84deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
85deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test for empty setPersonal().
86deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
87deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testNullPersonal() {
88deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address address = new Address("user1@dom1.org");
89deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("no name", address.getPersonal());
90deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
91deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setPersonal(null);
92deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("null name", address.getPersonal());
93deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
94deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setPersonal("");
95deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("empty name", address.getPersonal());
96deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
97deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setPersonal("\"\"");
98deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("quoted empty address", address.getPersonal());
99deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
100deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
101deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
102deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test for setPersonal().
103deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
104deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testSetPersonal() {
105deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address address = new Address("user1@dom1.net", "simple name");
106deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("simple name", "simple name", address.getPersonal());
107deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
108deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setPersonal("big \\\"G\\\"");
109deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name", "big \"G\"", address.getPersonal());
110deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
111deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setPersonal("=?UTF-8?Q?big \"G\"?=");
112deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted printable name", "big \"G\"", address.getPersonal());
113deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
114deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setPersonal("=?UTF-8?B?YmlnICJHIg==?=");
115deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("base64 encoded name", "big \"G\"", address.getPersonal());
116deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
117deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
118deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
119deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test for setPersonal() with utf-16 and utf-32.
120deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
121deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testSetPersonalMultipleEncodings() {
122deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address address = new Address("user1@dom1.co.jp", "=?UTF-8?B?5bK45pys?=");
123deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("base64 utf-16 name", "\u5CB8\u672C", address.getPersonal());
124deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
125deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setPersonal("\"=?UTF-8?Q?=E5=B2=B8=E6=9C=AC?=\"");
126deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted printable utf-16 name", "\u5CB8\u672C", address.getPersonal());
127deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
128deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setPersonal("=?ISO-2022-JP?B?GyRCNF9LXBsoQg==?=");
129deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("base64 jis encoded name", "\u5CB8\u672C", address.getPersonal());
130deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
131deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setPersonal("\"=?UTF-8?B?8J2MgfCdjYY=?=\"");
132deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("base64 utf-32 name", "\uD834\uDF01\uD834\uDF46", address.getPersonal());
133deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
134deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        address.setPersonal("=?UTF-8?Q?=F0=9D=8C=81=F0=9D=8D=86?=");
135deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted printable utf-32 name",
136deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\uD834\uDF01\uD834\uDF46", address.getPersonal());
137deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
138deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
139deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
1403469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * TODO: more in-depth tests for parse()
14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
1443469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Simple quick checks of empty-input edge conditions for parse()
1453469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     *
1463469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * NOTE:  This is not a claim that these edge cases are "correct", only to maintain consistent
1473469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * behavior while I am changing some of the code in the function under test.
1483469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     */
1493469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    public void testEmptyParse() {
1503469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        Address[] result;
1513469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1523469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        // null input => empty array
1533469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        result = Address.parse(null);
1543469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        assertTrue("parsing null address", result != null && result.length == 0);
1553469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1563469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        // empty string input => empty array
1573469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        result = Address.parse("");
1583469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        assertTrue("parsing zero-length", result != null && result.length == 0);
159deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
160deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        // spaces
161deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        result = Address.parse("   ");
162deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertTrue("parsing spaces", result != null && result.length == 0);
163deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
164deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        // spaces with comma
165deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        result = Address.parse("  ,  ");
166deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertTrue("parsing spaces with comma", result != null && result.length == 0);
167deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
168deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
169deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
170deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test parsing for single address.
171deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
172deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testSingleParse() {
173deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address1 = Address.parse("address1@dom1.com");
174deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bare address count", 1, address1.length);
175deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bare address", "address1@dom1.com", address1[0].getAddress());
176deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("name of bare address", address1[0].getPersonal());
177deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
178deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address2 = Address.parse("<address2@dom2.com>");
179deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bracket address count", 1, address2.length);
180deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bracket address", "address2@dom2.com", address2[0].getAddress());
181deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("name of bracket address", address2[0].getPersonal());
182deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
183deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address3 = Address.parse("first last <address3@dom3.org>");
184deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("address with name count", 1, address3.length);
185deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("address with name", "address3@dom3.org", address3[0].getAddress());
186deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("name of address with name", "first last", address3[0].getPersonal());
187deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
188deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address4 = Address.parse("\"first,last\" <address4@dom4.org>");
189deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("address with quoted name count", 1, address4.length);
190deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("address with quoted name", "address4@dom4.org", address4[0].getAddress());
191deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("name of address with quoted name", "first,last", address4[0].getPersonal());
192deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
193deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
194deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
195deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test parsing for illegal address.
196deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
197deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testIllegalParse() {
198deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address1 = Address.parse("address1");
199deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no atmark", 0, address1.length);
200deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
201deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address2 = Address.parse("address2@");
202deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no domain", 0, address2.length);
203deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
204deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address3 = Address.parse("@dom3.com");
205deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no local part", 0, address3.length);
206deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
207deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address4 = Address.parse("address4@sub@dom4.org");
208deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("more than one atmark", 0, address4.length);
209deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
210deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address5 = Address.parse("address5@dom5");
211deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("not dot in domain part", 0, address5.length);
212deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
213deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address6 = Address.parse("address6@dom6.com.");
214deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("domain ends with dot", 0, address6.length);
215deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
216deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] address7 = Address.parse("address7@.dom7.org");
217deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("domain starts with dot", 0, address7.length);
218deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
219deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
220deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
221deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test parsing for address part.
222deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
223deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testParsingAddress() {
224deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] addresses = Address.parse("address1@dom1.net, <address2@dom2.com>");
225deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("address count", 2, addresses.length);
226deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
227deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bare address", "address1@dom1.net", addresses[0].getAddress());
228deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("bare address name", addresses[0].getPersonal());
229deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
230deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bracket address", "address2@dom2.com", addresses[1].getAddress());
231deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("bracket address name", addresses[1].getPersonal());
2323469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    }
2333469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
2343469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    /**
235deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test parsing for simple name part.
23696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
237deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testParsingSimpleName() {
238deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] addresses = Address.parse(
239deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "name 1 <address1@dom1.net>, " +
240deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\"name,2\" <address2@dom2.org>");
241deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("address count", 2, addresses.length);
242deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
243deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bare name address", "address1@dom1.net", addresses[0].getAddress());
244deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bare name", "name 1", addresses[0].getPersonal());
245deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
246deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted name address", "address2@dom2.org", addresses[1].getAddress());
247deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted name", "name,2", addresses[1].getPersonal());
248deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
249deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
250deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
251deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test parsing for utf-16 name part.
252deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
253deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testParsingUtf16Name() {
254deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] addresses = Address.parse(
255deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\u3042\u3044\u3046 \u3048\u304A <address1@dom1.jp>, " +
256deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\"\u3042\u3044\u3046,\u3048\u304A\" <address2@dom2.jp>");
257deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("address count", 2, addresses.length);
258deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
259deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bare utf-16 name address", "address1@dom1.jp", addresses[0].getAddress());
260deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bare utf-16 name",
261deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\u3042\u3044\u3046 \u3048\u304A", addresses[0].getPersonal());
262deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
263deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted utf-16 name address",
264deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "address2@dom2.jp", addresses[1].getAddress());
265deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted utf-16 name",
266deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\u3042\u3044\u3046,\u3048\u304A", addresses[1].getPersonal());
267deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
268deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
269deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
270deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test parsing for utf-32 name part.
271deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
272deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testParsingUtf32Name() {
273deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] addresses = Address.parse(
274deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\uD834\uDF01\uD834\uDF46 \uD834\uDF22 <address1@dom1.net>, " +
275deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\"\uD834\uDF01\uD834\uDF46,\uD834\uDF22\" <address2@dom2.com>");
276deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("address count", 2, addresses.length);
277deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
278deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bare utf-32 name address", "address1@dom1.net", addresses[0].getAddress());
279deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("bare utf-32 name",
280deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\uD834\uDF01\uD834\uDF46 \uD834\uDF22", addresses[0].getPersonal());
281deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
282deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted utf-32 name address",
283deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "address2@dom2.com", addresses[1].getAddress());
284deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted utf-32 name",
285deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\uD834\uDF01\uD834\uDF46,\uD834\uDF22", addresses[1].getPersonal());
286deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
287deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
288deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
289deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test parsing for multi addresses.
290deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
291deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testParseMulti() {
292deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] addresses = Address.parse(MULTI_ADDRESSES_LIST);
293deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
294deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("multi addrsses count", MULTI_ADDRESSES_COUNT, addresses.length);
295deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
296deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no name 1 address", "noname1@dom1.com", addresses[0].getAddress());
297deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("no name 1 name", addresses[0].getPersonal());
298deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no name 2 address", "noname2@dom2.com", addresses[1].getAddress());
299deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("no name 2 name", addresses[1].getPersonal());
300deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("simple name address", "address3@dom3.org", addresses[2].getAddress());
301deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("simple name name", "simple name", addresses[2].getPersonal());
302deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted name address", "address4@dom4.org", addresses[3].getAddress());
303deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted name name", "name,4", addresses[3].getPersonal());
304deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name address", "bigG@dom5.net", addresses[4].getAddress());
305deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name name", "big \"G\"", addresses[4].getPersonal());
306deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 name address", "address6@co.jp", addresses[5].getAddress());
307deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 name name", "\u65E5\u672C\u8A9E", addresses[5].getPersonal());
308deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 quoted name address", "address7@co.jp", addresses[6].getAddress());
309deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 quoted name name", "\u65E5\u672C\u8A9E",
310deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                addresses[6].getPersonal());
311deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 name address", "address8@ne.jp", addresses[7].getAddress());
312deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 name name", "\uD834\uDF01\uD834\uDF46", addresses[7].getPersonal());
313deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 quoted name address", "address9@ne.jp", addresses[8].getAddress());
314deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 quoted name name", "\uD834\uDF01\uD834\uDF46",
315deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                addresses[8].getPersonal());
316deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
317deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
318deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
319deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test various combinations of the toString (single) method
320deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
321deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testToStringSingle() {
322deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] addresses = Address.parse(MULTI_ADDRESSES_LIST);
323deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
324deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("multi addrsses count", MULTI_ADDRESSES_COUNT, addresses.length);
325deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
326deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        // test for toString() results.
327deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no name 1", "noname1@dom1.com", addresses[0].toString());
328deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no name 2", "noname2@dom2.com", addresses[1].toString());
329deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("simple name", "simple name <address3@dom3.org>", addresses[2].toString());
330deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted name", "\"name,4\" <address4@dom4.org>", addresses[3].toString());
331deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name", "\"big \"G\"\" <bigG@dom5.net>", addresses[4].toString());
332deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 name", "\u65E5\u672C\u8A9E <address6@co.jp>",
333deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                addresses[5].toString());
334deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 quoted name", "\u65E5\u672C\u8A9E <address7@co.jp>",
335deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                addresses[6].toString());
336deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 name", "\uD834\uDF01\uD834\uDF46 <address8@ne.jp>",
337deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                addresses[7].toString());
338deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 quoted name", "\uD834\uDF01\uD834\uDF46 <address9@ne.jp>",
339deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                addresses[8].toString());
340deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
341deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
342deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
343deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test various combinations of the toString (multi) method
344deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
345deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testToStringMulti() {
346deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] addresses = Address.parse(MULTI_ADDRESSES_LIST);
347deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
348deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("multi addrsses count", MULTI_ADDRESSES_COUNT, addresses.length);
349deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
350deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        String line = Address.toString(addresses);
351deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("toString multi",
352deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "noname1@dom1.com,"
353deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "noname2@dom2.com,"
354deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "simple name <address3@dom3.org>,"
355deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "\"name,4\" <address4@dom4.org>,"
356deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "\"big \"G\"\" <bigG@dom5.net>,"
357deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "\u65E5\u672C\u8A9E <address6@co.jp>,"
358deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "\u65E5\u672C\u8A9E <address7@co.jp>,"
359deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "\uD834\uDF01\uD834\uDF46 <address8@ne.jp>,"
360deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "\uD834\uDF01\uD834\uDF46 <address9@ne.jp>",
361deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                line);
362deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
363deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
364deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
365deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test parsing for quoted and encoded name part.
366deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
367deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testParsingQuotedEncodedName() {
368deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] addresses = Address.parse(
369deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "\"big \\\"G\\\"\" <bigG@dom1.com>, =?UTF-8?B?5pel5pys6Kqe?= <address2@co.jp>");
370deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
371deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("address count", 2, addresses.length);
372deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
373deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name address", "bigG@dom1.com", addresses[0].getAddress());
374deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name", "big \"G\"", addresses[0].getPersonal());
375deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
376deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("encoded name address", "address2@co.jp", addresses[1].getAddress());
377deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("encoded name", "\u65E5\u672C\u8A9E", addresses[1].getPersonal());
378deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
379deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
380deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
381deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test various combinations of the toHeader (single) method
382deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
383deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testToHeaderSingle() {
384deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address noName1 = new Address("noname1@dom1.com");
385deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address noName2 = new Address("<noname2@dom2.com>", "");
386deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address simpleName = new Address("address3@dom3.org", "simple name");
387deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address dquoteName = new Address("address4@dom4.org", "name,4");
388deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address quotedName = new Address("bigG@dom5.net", "big \"G\"");
389deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address utf16Name = new Address("<address6@co.jp>", "\"\u65E5\u672C\u8A9E\"");
390deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address utf32Name = new Address("<address8@ne.jp>", "\uD834\uDF01\uD834\uDF46");
391deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
392deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        // test for internal states.
393deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no name 1 address", "noname1@dom1.com", noName1.getAddress());
394deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("no name 1 name", noName1.getPersonal());
395deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no name 2 address", "noname2@dom2.com", noName2.getAddress());
396deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("no name 2 name", noName2.getPersonal());
397deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("simple name address", "address3@dom3.org", simpleName.getAddress());
398deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("simple name name", "simple name", simpleName.getPersonal());
399deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted name address", "address4@dom4.org", dquoteName.getAddress());
400deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted name name", "name,4", dquoteName.getPersonal());
401deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name address", "bigG@dom5.net", quotedName.getAddress());
402deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name name", "big \"G\"", quotedName.getPersonal());
403deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 name address", "address6@co.jp", utf16Name.getAddress());
404deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 name name", "\u65E5\u672C\u8A9E", utf16Name.getPersonal());
405deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 name address", "address8@ne.jp", utf32Name.getAddress());
406deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 name name", "\uD834\uDF01\uD834\uDF46", utf32Name.getPersonal());
407deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
408deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        // Test for toHeader() results.
409deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no name 1", "noname1@dom1.com", noName1.toHeader());
410deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no name 2", "noname2@dom2.com", noName2.toHeader());
411deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("simple name", "simple name <address3@dom3.org>", simpleName.toHeader());
412deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted name", "\"name,4\" <address4@dom4.org>", dquoteName.toHeader());
413deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name", "\"big \\\"G\\\"\" <bigG@dom5.net>", quotedName.toHeader());
414deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 name", "=?UTF-8?B?5pel5pys6Kqe?= <address6@co.jp>",
415deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                utf16Name.toHeader());
416deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 name", "=?UTF-8?B?8J2MgfCdjYY=?= <address8@ne.jp>",
417deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                utf32Name.toHeader());
418deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
419deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
420deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    /**
421deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     * Test various combinations of the toHeader (multi) method
422deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project     */
423deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    public void testToHeaderMulti() {
424deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address noName1 = new Address("noname1@dom1.com");
425deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address noName2 = new Address("<noname2@dom2.com>", "");
426deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address simpleName = new Address("address3@dom3.org", "simple name");
427deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address dquoteName = new Address("address4@dom4.org", "name,4");
428deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address quotedName = new Address("bigG@dom5.net", "big \"G\"");
429deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address utf16Name = new Address("<address6@co.jp>", "\"\u65E5\u672C\u8A9E\"");
430deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address utf32Name = new Address("<address8@ne.jp>", "\uD834\uDF01\uD834\uDF46");
431deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
432deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        // test for internal states.
433deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no name 1 address", "noname1@dom1.com", noName1.getAddress());
434deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("no name 1 name", noName1.getPersonal());
435deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("no name 2 address", "noname2@dom2.com", noName2.getAddress());
436deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertNull("no name 2 name", noName2.getPersonal());
437deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("simple name address", "address3@dom3.org", simpleName.getAddress());
438deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("simple name name", "simple name", simpleName.getPersonal());
439deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted name address", "address4@dom4.org", dquoteName.getAddress());
440deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("double quoted name name", "name,4", dquoteName.getPersonal());
441deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name address", "bigG@dom5.net", quotedName.getAddress());
442deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("quoted name name", "big \"G\"", quotedName.getPersonal());
443deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 name address", "address6@co.jp", utf16Name.getAddress());
444deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-16 name name", "\u65E5\u672C\u8A9E", utf16Name.getPersonal());
445deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 name address", "address8@ne.jp", utf32Name.getAddress());
446deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("utf-32 name name", "\uD834\uDF01\uD834\uDF46", utf32Name.getPersonal());
447deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
448deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        Address[] addresses = new Address[] {
449deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                noName1, noName2, simpleName, dquoteName, quotedName, utf16Name, utf32Name,
450deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        };
451deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        String line = Address.toHeader(addresses);
452deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project
453deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project        assertEquals("toHeader() multi",
454deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                "noname1@dom1.com, "
455deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "noname2@dom2.com, "
456deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "simple name <address3@dom3.org>, "
457deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "\"name,4\" <address4@dom4.org>, "
458deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "\"big \\\"G\\\"\" <bigG@dom5.net>, "
459deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "=?UTF-8?B?5pel5pys6Kqe?= <address6@co.jp>, "
460deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                + "=?UTF-8?B?8J2MgfCdjYY=?= <address8@ne.jp>",
461deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project                line);
462deabfc0cb513d1becdb557e3a8a853839992bb5cThe Android Open Source Project    }
46396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
46496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
46596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Test various combinations of the toFriendly (single) method
46696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
46796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testToFriendlySingle() {
46896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertEquals("personal1", mAddress1.toFriendly());
46996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertEquals("address2", mAddress2.toFriendly());
47096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertEquals("address3", mAddress3.toFriendly());
47196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
47296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
47396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
47496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Test various combinations of the toFriendly (array) method
47596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
47696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testToFriendlyArray() {
47796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Address[] list1 = null;
47896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Address[] list2 = new Address[0];
47996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Address[] list3 = new Address[] { mAddress1 };
48096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Address[] list4 = new Address[] { mAddress1, mAddress2, mAddress3 };
48196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
48296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertEquals(null, Address.toFriendly(list1));
48396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertEquals(null, Address.toFriendly(list2));
48496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertEquals("personal1", Address.toFriendly(list3));
48596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertEquals("personal1,address2,address3", Address.toFriendly(list4));
48696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
48796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
48896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
4893469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Simple quick checks of empty-input edge conditions for pack()
4903469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     *
4913469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * NOTE:  This is not a claim that these edge cases are "correct", only to maintain consistent
4923469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * behavior while I am changing some of the code in the function under test.
4933469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     */
4943469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    public void testEmptyPack() {
4953469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        String result;
4963469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
4973469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        // null input => null string
4983469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        result = Address.pack(null);
4993469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        assertNull("packing null", result);
5003469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
5013469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        // zero-length input => empty string
5023469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        result = Address.pack(new Address[] { });
5033469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        assertEquals("packing empty array", "", result);
5043469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    }
5053469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
5063469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    /**
5073469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Simple quick checks of empty-input edge conditions for unpack()
5083469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     *
5093469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * NOTE:  This is not a claim that these edge cases are "correct", only to maintain consistent
5103469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * behavior while I am changing some of the code in the function under test.
5113469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     */
5123469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    public void testEmptyUnpack() {
5133469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        Address[] result;
5143469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
5153469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        // null input => empty array
5163469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        result = Address.unpack(null);
5173469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        assertTrue("unpacking null address", result != null && result.length == 0);
5183469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
5193469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        // empty string input => empty array
5203469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        result = Address.unpack("");
5213469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        assertTrue("unpacking zero-length", result != null && result.length == 0);
5223469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    }
5233469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
524e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    private static boolean addressEquals(Address a1, Address a2) {
525e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        if (!a1.equals(a2)) {
526e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            return false;
527e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        }
528e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        final String displayName1 = a1.getPersonal();
529e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        final String displayName2 = a2.getPersonal();
530e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        if (displayName1 == null) {
531e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            return displayName2 == null;
532e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        } else {
533e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            return displayName1.equals(displayName2);
534e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        }
535e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    }
536e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda
537e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    private static boolean addressArrayEquals(Address[] array1, Address[] array2) {
538e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        if (array1.length != array2.length) {
539e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            return false;
540e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        }
541e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        for (int i = array1.length - 1; i >= 0; --i) {
542e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            if (!addressEquals(array1[i], array2[i])) {
543e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda                return false;
544e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            }
545e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        }
546e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        return true;
547e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    }
548e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda
549e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    public void testPackUnpack() {
550e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        for (Address[] list : PACK_CASES) {
551e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            String packed = Address.pack(list);
552e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            assertTrue(packed, addressArrayEquals(list, Address.unpack(packed)));
553e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        }
554e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    }
555e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda
556e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    public void testLegacyPackUnpack() {
557e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        for (Address[] list : PACK_CASES) {
558e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            String packed = legacyPack(list);
559e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            assertTrue(packed, addressArrayEquals(list, Address.legacyUnpack(packed)));
560e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        }
561e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    }
562e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda
563c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda    public void testSinglePack() {
564c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        Address[] addrArray = new Address[1];
565c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        for (Address address : new Address[]{PACK_ADDR_1, PACK_ADDR_2, PACK_ADDR_3}) {
566c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda            String packed1 = address.pack();
567c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda            addrArray[0] = address;
568c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda            String packed2 = Address.pack(addrArray);
569c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda            assertEquals(packed1, packed2);
570c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda        }
571c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda    }
572c6893ddf0fc1a647ca13a2b3aac2c68ca345de37Mihai Preda
573ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda    public void testIsValidAddress() {
574ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda        String notValid[] = {"", "foo", "john@", "x@y", "x@y.", "foo.com"};
575ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda        String valid[] = {"x@y.z", "john@gmail.com", "a@b.c.d"};
576ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda        for (String address : notValid) {
577ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda            assertTrue(address, !Address.isValidAddress(address));
578ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda        }
579ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda        for (String address : valid) {
580ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda            assertTrue(address, Address.isValidAddress(address));
581ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda        }
582ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda
583ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda        // isAllValid() must accept empty address list as valid
584ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda        assertTrue("Empty address list is valid", Address.isAllValid(""));
585ed0e683d86d27aecb39347b1749b5c572594ba6cMihai Preda    }
586e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda
587e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    /**
588e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda     * Legacy pack() used for testing legacyUnpack().
589e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda     * The packed list is a comma separated list of:
590e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda     * URLENCODE(address)[;URLENCODE(personal)]
591e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda     * @See pack()
592e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda     */
593e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    private static String legacyPack(Address[] addresses) {
594e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        if (addresses == null) {
595e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            return null;
596e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        } else if (addresses.length == 0) {
597e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            return "";
598e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        }
599e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        StringBuffer sb = new StringBuffer();
600e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        for (int i = 0, count = addresses.length; i < count; i++) {
601e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            Address address = addresses[i];
602e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            try {
603e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda                sb.append(URLEncoder.encode(address.getAddress(), "UTF-8"));
604e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda                if (address.getPersonal() != null) {
605e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda                    sb.append(';');
606e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda                    sb.append(URLEncoder.encode(address.getPersonal(), "UTF-8"));
607e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda                }
608e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda                if (i < count - 1) {
609e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda                    sb.append(',');
610e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda                }
611e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            }
612e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            catch (UnsupportedEncodingException uee) {
613e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda                return null;
614e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda            }
615e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        }
616e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda        return sb.toString();
617e8d58c01ec3f5f783bbca6841d95ca44570c6fd9Mihai Preda    }
61896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project}
619