1f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia/*
2f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * Copyright (C) 2011 Google Inc.
3f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia *
4f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * Licensed under the Apache License, Version 2.0 (the "License");
5f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * you may not use this file except in compliance with the License.
6f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * You may obtain a copy of the License at
7f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia *
8f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * http://www.apache.org/licenses/LICENSE-2.0
9f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia *
10f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * Unless required by applicable law or agreed to in writing, software
11f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * distributed under the License is distributed on an "AS IS" BASIS,
12f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * See the License for the specific language governing permissions and
14f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * limitations under the License.
15f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia */
16f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
17f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jiapackage com.android.i18n.phonenumbers.geocoding;
18f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
19f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jiaimport junit.framework.TestCase;
20f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
21f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jiaimport java.io.ByteArrayInputStream;
22f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jiaimport java.io.ByteArrayOutputStream;
23f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jiaimport java.io.IOException;
24f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jiaimport java.io.ObjectInputStream;
25f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jiaimport java.io.ObjectOutputStream;
26f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jiaimport java.util.SortedMap;
27f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jiaimport java.util.TreeMap;
28f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
29f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia/**
30f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * Unittests for FlyweightMapStorage.java
31f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia *
32f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia * @author Philippe Liard
33f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia */
34f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jiapublic class FlyweightMapStorageTest extends TestCase {
35f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia  private final SortedMap<Integer, String> areaCodeMap = new TreeMap<Integer, String>();
36f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
37f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia  public FlyweightMapStorageTest() {
38f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    areaCodeMap.put(331402, "Paris");
39f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    areaCodeMap.put(331434, "Paris");
40f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    areaCodeMap.put(334910, "Marseille");
41f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    areaCodeMap.put(334911, "Marseille");
42f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia  }
43f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
44f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia  public void testReadFromSortedMap() {
45f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    FlyweightMapStorage mapStorage = new FlyweightMapStorage();
46f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    mapStorage.readFromSortedMap(areaCodeMap);
47f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
48f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    assertEquals(331402, mapStorage.getPrefix(0));
49f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    assertEquals(331434, mapStorage.getPrefix(1));
50f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    assertEquals(334910, mapStorage.getPrefix(2));
51f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    assertEquals(334911, mapStorage.getPrefix(3));
52f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
53f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    String desc = mapStorage.getDescription(0);
54f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    assertEquals("Paris", desc);
55f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    assertTrue(desc == mapStorage.getDescription(1));  // Same identity.
56f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
57f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    desc = mapStorage.getDescription(2);
58f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    assertEquals("Marseille", desc);
59f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    assertTrue(desc == mapStorage.getDescription(3));  // Same identity.
60f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia  }
61f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
62f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia  public void testWriteAndReadExternal() throws IOException {
63f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    FlyweightMapStorage mapStorage = new FlyweightMapStorage();
64f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    mapStorage.readFromSortedMap(areaCodeMap);
65f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
66f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
67f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
68f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    mapStorage.writeExternal(objectOutputStream);
69f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    objectOutputStream.flush();
70f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
71f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    FlyweightMapStorage newMapStorage = new FlyweightMapStorage();
72f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    ObjectInputStream objectInputStream =
73f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia        new ObjectInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()));
74f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    newMapStorage.readExternal(objectInputStream);
75f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia
76f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    String expected = mapStorage.toString();
77f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    assertFalse(expected.length() == 0);
78f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia    assertEquals(expected, newMapStorage.toString());
79f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia  }
80f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia}
81