15b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa/*
25b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * Copyright (C) 2009 The Android Open Source Project
35b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa *
45b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License");
55b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * you may not use this file except in compliance with the License.
65b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * You may obtain a copy of the License at
75b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa *
85b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa *      http://www.apache.org/licenses/LICENSE-2.0
95b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa *
105b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
115b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS,
125b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * See the License for the specific language governing permissions and
145b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * limitations under the License.
155b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa */
165b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
175b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawapackage com.android.providers.contacts;
185b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
195b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawaimport android.test.suitebuilder.annotation.SmallTest;
205b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
2138210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport com.android.providers.contacts.PostalSplitter.Postal;
225b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
235b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawaimport junit.framework.TestCase;
245b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
2538210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport java.util.Locale;
2638210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki
275b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa/**
285b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * Tests for {@link PostalSplitter}, especially for ja_JP locale.
295b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * This class depends on the assumption that all the tests in {@link NameSplitterTest} pass.
305b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa *
315b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * Run the test like this:
325b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * <code>
335b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * adb shell am instrument -e class com.android.providers.contacts.PostalSplitterForJapaneseTest -w
345b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa *         com.android.providers.contacts.tests/android.test.InstrumentationTestRunner
355b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa * </code>
365b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa */
375b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa@SmallTest
385b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawapublic class PostalSplitterForJapaneseTest extends TestCase {
395b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    private PostalSplitter mPostalSplitter;
405b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
415b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    // Postal address for Tokyo Metropolitan City Hall (Tokyo-Tocho) as of 2009 + pseudo PO box.
425b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    // Japanese don't use neighborhood, so it is not used in this test suite.
435b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    //
445b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    // "Nihon" in Kanji
455b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    private static final String COUNTRY = "\u65E5\u672C";
465b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    private static final String POSTCODE = "163-8001";
475b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    // "Tokyo-to" in Kanji
485b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    private static final String REGION = "\u6771\u4EAC\u90FD";
495b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    // "Sinjuku-ku" in Kanji
505b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    private static final String CITY = "\u65B0\u5BBF\u533A";
515b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    // Nishi-Sinjuku 2-8-1
525b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    private static final String STREET = "\u897F\u65B0\u5BBF 2-8-1";
535b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    // Pseudo PO box for test: "Sisyobako 404"
545b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    private static final String POBOX = "\u79C1\u66F8\u7BB1";
555b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
565b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    @Override
575b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    protected void setUp() throws Exception {
585b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        super.setUp();
595b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
605b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        mPostalSplitter = new PostalSplitter(Locale.JAPAN);
615b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
625b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
635b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    public void testNull() {
645b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertSplitPostal(null, null, null, null, null, null, null, null);
655b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(null, null, null, null, null, null, null, null);
665b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
675b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
685b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    public void testEmpty() {
695b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertSplitPostal("", null, null, null, null, null, null, null);
705b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(null, null, null, null, null, null, null, null);
715b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
725b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
735b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    public void testSpaces() {
745b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertSplitPostal(" ", " ", null, null, null, null, null, null);
755b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(" ", " ", null, null, null, null, null, null);
765b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
775b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
785b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    public void testPobox() {
795b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(CITY + "\n" + POBOX, null, POBOX, null, CITY, null, null, null);
805b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
815b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
825b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    public void testNormal() {
835b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(POSTCODE + "\n" + REGION + " " + CITY + "\n" + STREET,
845b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa                STREET, null, null, CITY, REGION, POSTCODE, null);
855b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
865b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
875b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    public void testMissingRegion() {
885b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(POSTCODE + "\n" + REGION + "\n" + STREET,
895b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa                STREET, null, null, REGION, null, POSTCODE, null);
905b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
915b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(POSTCODE + "\n" + STREET,
925b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa                STREET, null, null, null, null, POSTCODE, null);
935b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
945b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(COUNTRY + " " + POSTCODE + "\n" + STREET,
955b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa                STREET, null, null, null, null, POSTCODE, COUNTRY);
965b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
975b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
985b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    public void testMissingPostcode() {
995b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(REGION + " " + CITY + "\n" + STREET,
1005b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa                STREET, null, null, CITY, REGION, null, null);
1015b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
1025b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(COUNTRY + "\n" + REGION + " " + CITY + "\n" + STREET,
1035b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa                STREET, null, null, CITY, REGION, null, COUNTRY);
1045b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
1055b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(COUNTRY + "\n" + STREET,
1065b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa                STREET, null, null, null, null, null, COUNTRY);
1075b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
1085b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
1095b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    public void testMissingStreet() {
1105b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertJoinedPostal(COUNTRY + "\n" + STREET,
1115b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa                null, null, STREET, null, null, null, COUNTRY);
1125b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
1135b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
1145b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    private void assertSplitPostal(String formattedPostal, String street, String pobox,
1155b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa            String neighborhood, String city, String region, String postcode, String country) {
1165b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        final Postal postal = new Postal();
1175b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        mPostalSplitter.split(postal, formattedPostal);
1185b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertEquals(street, postal.street);
1195b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertEquals(pobox, postal.pobox);
1205b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertEquals(neighborhood, postal.neighborhood);
1215b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertEquals(city, postal.city);
1225b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertEquals(region, postal.region);
1235b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertEquals(postcode, postal.postcode);
1245b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertEquals(country, postal.country);
1255b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
1265b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
1275b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    private void assertJoinedPostal(String formattedPostal, String street, String pobox,
1285b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa            String neighborhood, String city, String region, String postcode, String country) {
1295b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        final Postal postal = new Postal();
1305b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        postal.street = street;
1315b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        postal.pobox = pobox;
1325b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        postal.neighborhood = neighborhood;
1335b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        postal.city = city;
1345b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        postal.region = region;
1355b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        postal.postcode = postcode;
1365b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        postal.country = country;
1375b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa
1385b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        final String joined = mPostalSplitter.join(postal);
1395b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa        assertEquals(formattedPostal, joined);
1405b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa    }
1415b6f7fbb003a085088b2ae4e61b07774d61f8565Daisuke Miyakawa}
142