19b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com/*
29b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * Copyright (C) 2010 Google Inc.
39b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com *
49b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * Licensed under the Apache License, Version 2.0 (the "License");
59b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * you may not use this file except in compliance with the License.
69b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * You may obtain a copy of the License at
79b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com *
89b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * http://www.apache.org/licenses/LICENSE-2.0
99b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com *
109b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * Unless required by applicable law or agreed to in writing, software
119b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * distributed under the License is distributed on an "AS IS" BASIS,
129b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * See the License for the specific language governing permissions and
149b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * limitations under the License.
159b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com */
169b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
179b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.compackage com.android.i18n.addressinput;
189b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
199b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.comimport com.android.i18n.addressinput.LookupKey.KeyType;
209b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
219b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.comimport java.util.HashMap;
229b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.comimport java.util.Map;
239b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
2486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.comimport junit.framework.TestCase;
2586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
269b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com/**
279b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com * Unit tests for the LookupKey class.
289b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com */
299b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.compublic class LookupKeyTest extends TestCase {
3086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    private static final String ROOT_KEY = "data";
3186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    private static final String ROOT_EXAMPLE_KEY = "examples";
3286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    private static final String US_KEY = "data/US";
3386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    private static final String CALIFORNIA_KEY = "data/US/CA";
3486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    private static final String EXAMPLE_LOCAL_US_KEY = "examples/US/local/_default";
3586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
3686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    // Data key for Da-an District, Taipei Taiwan
3786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    private static final String TW_KEY = "data/TW/\u53F0\u5317\u5E02/\u5927\u5B89\u5340";
3886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
3986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    // Example key for TW's address (local script)
4086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    private static final String TW_EXAMPLE_LOCAL_KEY = "examples/TW/local/_default";
4186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
4286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    // Example key for TW's address (latin script)
4386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    private static final String TW_EXAMPLE_LATIN_KEY = "examples/TW/latin/_default";
4486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
4586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    private static final String RANDOM_KEY = "sdfIisooIFOOBAR";
4686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    private static final String RANDOM_COUNTRY_KEY = "data/asIOSDxcowW";
4786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
4886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testRootKey() {
4986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder(KeyType.DATA).build();
5086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(ROOT_KEY, key.toString());
5186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
5286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key2 = new LookupKey.Builder(key.toString()).build();
5386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(ROOT_KEY, key2.toString());
549b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com    }
5586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
5686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testDataKeys() {
5786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder(US_KEY).build();
5886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(US_KEY, key.toString());
5986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
6086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key2 = new LookupKey.Builder(CALIFORNIA_KEY).build();
6186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(CALIFORNIA_KEY, key2.toString());
629b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com    }
639b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
6486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testExampleRootKeys() {
6586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder(KeyType.EXAMPLES).build();
6686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(ROOT_EXAMPLE_KEY, key.toString());
6786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    }
689b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
6986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testExampleKeys() {
7086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        AddressData address = new AddressData.Builder().setCountry("US")
7186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .setLanguageCode("en")
7286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .build();
739b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
7486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder(KeyType.EXAMPLES).setAddressData(address).build();
7586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(EXAMPLE_LOCAL_US_KEY, key.toString());
769b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
7786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        key = new LookupKey.Builder(EXAMPLE_LOCAL_US_KEY).build();
7886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(EXAMPLE_LOCAL_US_KEY, key.toString());
7986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    }
8086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
8186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testKeyWithWrongScriptType() {
8286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        String wrongScript = "examples/US/asdfasdfasdf/_default";
8386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        try {
8486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            new LookupKey.Builder(wrongScript).build();
8586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            fail("should fail since the script type is wrong");
8686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        } catch (RuntimeException e) {
8786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            // Expected.
8886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        }
8986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    }
9086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
9186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testFallbackToCountry() {
9286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        // Admin Area is missing.
9386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        AddressData address = new AddressData.Builder().setCountry("US")
9486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .setLocality("Mt View")
9586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .build();
9686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
9786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder(KeyType.DATA).setAddressData(address).build();
9886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
9986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("locality should be omitted since admin area is not specified", US_KEY,
10086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                     key.toString());
1019b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
10286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        // Tries key string with the same problem (missing Admin Area).
10386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        key = new LookupKey.Builder("data/US//Mt View").build();
1049b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
10586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("locality should be omitted since admin area is not specified", US_KEY,
10686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                     key.toString());
10786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    }
10886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
10986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testNonUsAddress() {
11086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        AddressData address = new AddressData.Builder().setCountry("TW")
11186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       // Taipei City
11286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .setAdminArea("\u53F0\u5317\u5E02")
11386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       // Da-an District
11486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .setLocality("\u5927\u5B89\u5340")
11586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .build();
11686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
11786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder(KeyType.DATA).setAddressData(address).build();
11886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(TW_KEY, key.toString());
1199b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
12086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        key = new LookupKey.Builder(KeyType.EXAMPLES).setAddressData(address).build();
12186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(TW_EXAMPLE_LOCAL_KEY, key.toString());
1229b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
12386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        address = new AddressData.Builder(address).setLanguageCode("zh-latn").build();
12486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        key = new LookupKey.Builder(KeyType.EXAMPLES).setAddressData(address).build();
12586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(TW_EXAMPLE_LATIN_KEY, key.toString());
1269b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com    }
12786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
12886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testGetKeyForUpperLevelFieldWithDataKey() {
12986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        AddressData address = new AddressData.Builder().setCountry("US")
13086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .setAdminArea("CA")
13186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .setLocality("Mt View")
13286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .build();
13386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
13486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder(KeyType.DATA).setAddressData(address).build();
13586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey newKey = key.getKeyForUpperLevelField(AddressField.COUNTRY);
13686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertNotNull("failed to get key for " + AddressField.COUNTRY, newKey);
13786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("data/US", newKey.toString());
13886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
13986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        newKey = key.getKeyForUpperLevelField(AddressField.ADMIN_AREA);
14086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertNotNull("failed to get key for " + AddressField.ADMIN_AREA, newKey);
14186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("data/US/CA", newKey.toString());
14286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("original key should not be changed", "data/US/CA/Mt View", key.toString());
14386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
14486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        newKey = key.getKeyForUpperLevelField(AddressField.LOCALITY);
14586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertNotNull("failed to get key for " + AddressField.LOCALITY, newKey);
14686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("data/US/CA/Mt View", newKey.toString());
14786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
14886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        newKey = key.getKeyForUpperLevelField(AddressField.DEPENDENT_LOCALITY);
14986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertNull("should return null for field not contained in current key", newKey);
15086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
15186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        newKey = key.getKeyForUpperLevelField(AddressField.RECIPIENT);
15286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertNull("should return null since field '" + AddressField.RECIPIENT +
15386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                   "' is not in address hierarchy", newKey);
15486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    }
15586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
15686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testGetKeyForUpperLevelFieldWithExampleKey() {
15786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder("examples/US/latin/_default").build();
15886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
15986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        try {
16086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            key.getKeyForUpperLevelField(AddressField.COUNTRY);
16186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            fail("should fail if you try to get parent key for an example key.");
16286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        } catch (RuntimeException e) {
16386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            // Expected.
16486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        }
16586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    }
16686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
16786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testGetParentKey() {
16886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        AddressData address = new AddressData.Builder().setCountry("US")
16986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .setAdminArea("CA")
17086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .setLocality("Mt View")
17186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .setDependentLocality("El Camino")
17286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com                                                       .build();
17386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
17486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder(KeyType.DATA).setAddressData(address).build();
17586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("data/US/CA/Mt View/El Camino", key.toString());
17686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
17786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        key = key.getParentKey();
17886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("data/US/CA/Mt View", key.toString());
17986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
18086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        key = key.getParentKey();
18186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("data/US/CA", key.toString());
18286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
18386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        key = key.getParentKey();
18486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("data/US", key.toString());
18586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
18686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        key = key.getParentKey();
18786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("data", key.toString());
18886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
18986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        key = key.getParentKey();
19086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertNull("root key's parent should be null", key);
19186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    }
19286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
19386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testInvalidKeyTypeWillFail() {
19486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        try {
19586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            new LookupKey.Builder(RANDOM_KEY).build();
19686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            fail("Should fail if key string does not start with a valid key type");
19786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        } catch (RuntimeException e) {
19886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            // Expected.
19986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        }
20086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    }
20186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
20286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    /**
20386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com     * Ensures that even when the input key string is random, we still create a key. (We do not
20486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com     * verify if the key maps to an real world entity like a city or country).
20586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com     */
20686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testWeDontVerifyKeyName() {
20786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder(RANDOM_COUNTRY_KEY).build();
20886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals(RANDOM_COUNTRY_KEY, key.toString());
20986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    }
21086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
21186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testHash() {
21286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        String keys[] = { ROOT_KEY, ROOT_EXAMPLE_KEY, US_KEY, CALIFORNIA_KEY };
21386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        Map<LookupKey, String> map = new HashMap<LookupKey, String>();
21486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
21586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        for (String key : keys) {
21686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            map.put(new LookupKey.Builder(key).build(), key);
21786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        }
21886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
21986eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        for (String key : keys) {
22086eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            assertTrue(map.containsKey(new LookupKey.Builder(key).build()));
22186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com            assertEquals(key, map.get(new LookupKey.Builder(key).build()));
22286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        }
22386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertFalse(map.containsKey(new LookupKey.Builder(RANDOM_COUNTRY_KEY).build()));
22486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    }
22586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com
22686eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testGetValueForUpperLevelField() {
22786eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder("data/US/CA").build();
22886eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("US", key.getValueForUpperLevelField(AddressField.COUNTRY));
2299b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com    }
2309b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com
23186eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com    public void testGetValueForUpperLevelFieldInvalid() {
23286eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key = new LookupKey.Builder("data").build();
23386eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("", key.getValueForUpperLevelField(AddressField.COUNTRY));
23486eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        LookupKey key2 = new LookupKey.Builder("data/").build();
23586eb8dc8d730348b3e9e7aa50a02781b5b7db3d1lararennie@google.com        assertEquals("", key2.getValueForUpperLevelField(AddressField.COUNTRY));
2369b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com    }
2379b19e1202dec7ddb9c43d9459c901da291030d2flararennie@google.com}
238