Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / libaddressinput / src / java / test / com / android / i18n / addressinput / FormatInterpreterTest.java
1 /*
2  * Copyright (C) 2010 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.android.i18n.addressinput;
18
19 import com.android.i18n.addressinput.LookupKey.ScriptType;
20
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import junit.framework.TestCase;
25
26 /**
27  * Tests for the FormatInterpreter class.
28  */
29 public class FormatInterpreterTest extends TestCase {
30     private static final AddressData US_CA_ADDRESS;
31     private static final AddressData TW_ADDRESS;
32
33     private FormatInterpreter formatInterpreter;
34
35     static {
36         US_CA_ADDRESS = new AddressData.Builder().setCountry("US")
37                                                  .setAdminArea("CA")
38                                                  .setLocality("Mt View")
39                                                  .setAddressLine1("1098 Alta Ave")
40                                                  .setPostalCode("94043")
41                                                  .build();
42
43         TW_ADDRESS = new AddressData.Builder().setCountry("TW")
44                                               .setAdminArea("\u53F0\u5317\u5E02")  // Taipei city
45                                               .setLocality("\u5927\u5B89\u5340")  // Da-an district
46                                               .setAddressLine1("Sec. 3 Hsin-yi Rd.")
47                                               .setPostalCode("106")
48                                               .setOrganization("Giant Bike Store")
49                                               .setRecipient("Mr. Liu")
50                                               .build();
51     }
52
53     @Override
54     public void setUp() {
55         formatInterpreter = new FormatInterpreter(new FormOptions.Builder().build());
56     }
57
58     public void testIterateUsAddressFields() {
59         AddressField[] format = {
60             AddressField.RECIPIENT,
61             AddressField.ORGANIZATION,
62             AddressField.ADDRESS_LINE_1,
63             AddressField.ADDRESS_LINE_2,
64             AddressField.LOCALITY,
65             AddressField.ADMIN_AREA,
66             AddressField.POSTAL_CODE
67         };
68
69         int currIndex = 0;
70         for (AddressField field : formatInterpreter.getAddressFieldOrder(ScriptType.LOCAL, "US")) {
71             assertEquals("index " + currIndex + " should have matched",
72                          format[currIndex].getChar(), field.getChar());
73             currIndex++;
74         }
75     }
76
77     /**
78      * Tests that this works for the case of Vanuatu, since we have no country-specific formatting
79      * data for that country. Should fall back to the default region.
80      */
81     public void testIterateVuAddressFields() {
82         AddressField[] format = {
83             AddressField.RECIPIENT,
84             AddressField.ORGANIZATION,
85             AddressField.ADDRESS_LINE_1,
86             AddressField.ADDRESS_LINE_2,
87             AddressField.LOCALITY,
88         };
89
90         int currIndex = 0;
91         for (AddressField field : formatInterpreter.getAddressFieldOrder(ScriptType.LOCAL, "VU")) {
92             assertEquals("index " + currIndex + " should have matched",
93                          format[currIndex].getChar(), field.getChar());
94             currIndex++;
95         }
96     }
97
98     public void testOverrideFieldOrder() {
99         AddressField[] expectedOrder = {
100             AddressField.ADMIN_AREA,
101             AddressField.ORGANIZATION,
102             AddressField.ADDRESS_LINE_1,
103             AddressField.ADDRESS_LINE_2,
104             AddressField.LOCALITY,
105             AddressField.RECIPIENT,
106             AddressField.POSTAL_CODE
107         };
108
109         FormatInterpreter myInterpreter = new FormatInterpreter(
110                 new FormOptions.Builder().customizeFieldOrder("US",
111                                                               AddressField.ADMIN_AREA,
112                                                               AddressField.RECIPIENT,
113                                                               AddressField.SORTING_CODE,
114                                                               AddressField.POSTAL_CODE).build());
115
116         int currIndex = 0;
117         for (AddressField field : myInterpreter.getAddressFieldOrder(ScriptType.LOCAL, "US")) {
118             assertEquals("Wrong field order for US on index " + currIndex + " of address fields.",
119                          expectedOrder[currIndex], field);
120
121             // Sorting code (CEDEX) is not in US address format and should be
122             // neglected even if it is specified in customizeFieldOrder().
123             assertNotSame(AddressField.SORTING_CODE, field);
124             currIndex++;
125         }
126     }
127
128     public void testIterateTwLatinAddressFields() {
129         AddressField[] format = {
130             AddressField.RECIPIENT,
131             AddressField.ORGANIZATION,
132             AddressField.ADDRESS_LINE_1,
133             AddressField.ADDRESS_LINE_2,
134             AddressField.LOCALITY,
135             AddressField.ADMIN_AREA,
136             AddressField.POSTAL_CODE
137         };
138
139         int currIndex = 0;
140         for (AddressField field : formatInterpreter.getAddressFieldOrder(ScriptType.LATIN, "TW")) {
141             assertEquals("Unexpected field order -- mismatched on index " + currIndex,
142                          format[currIndex].getChar(), field.getChar());
143             currIndex++;
144         }
145     }
146
147     public void testUsEnvelopeAddress() {
148         List<String> expected = new ArrayList<String>();
149         expected.add("1098 Alta Ave");
150         expected.add("Mt View, CA 94043");
151
152         List<String> real = formatInterpreter.getEnvelopeAddress(US_CA_ADDRESS);
153
154         assertEquals(expected, real);
155     }
156
157     public void testTwEnvelopeAddress() {
158         // To be in this order, the whole address should really be in Traditional Chinese - for
159         // readability, only the neighbourhood and city are.
160         List<String> expected = new ArrayList<String>();
161         expected.add("106");
162         expected.add("\u53F0\u5317\u5E02\u5927\u5B89\u5340");  // Taipei city, Da-an district
163         expected.add("Sec. 3 Hsin-yi Rd.");
164         expected.add("Giant Bike Store");
165         expected.add("Mr. Liu");
166
167         List<String> real = formatInterpreter.getEnvelopeAddress(TW_ADDRESS);
168
169         assertEquals(expected, real);
170     }
171
172     public void testEnvelopeAddressIncompleteAddress() {
173         List<String> expected = new ArrayList<String>();
174         expected.add("1098 Alta Ave");
175         expected.add("CA 94043");
176
177         AddressData address = new AddressData.Builder().set(US_CA_ADDRESS)
178                                                        .set(AddressField.LOCALITY, null).build();
179
180         List<String> real = formatInterpreter.getEnvelopeAddress(address);
181
182         assertEquals(expected, real);
183     }
184
185     public void testEnvelopeAddressEmptyAddress() {
186         List<String> expected = new ArrayList<String>();
187         AddressData address = new AddressData.Builder().setCountry("US").build();
188
189         List<String> real = formatInterpreter.getEnvelopeAddress(address);
190         assertEquals(expected, real);
191     }
192
193   public void testEnvelopeAddressLeadingPostPrefix() {
194       List<String> expected = new ArrayList<String>();
195       expected.add("CH-8047 Herrliberg");
196       AddressData address = new AddressData.Builder().setCountry("CH")
197               .setPostalCode("8047")
198               .setLocality("Herrliberg")
199               .build();
200
201       List<String> real = formatInterpreter.getEnvelopeAddress(address);
202       assertEquals(expected, real);
203   }
204
205   public void testSvAddress() {
206       final AddressData svAddress = new AddressData.Builder().setCountry("SV")
207               .setAdminArea("Ahuachapán")
208               .setLocality("Ahuachapán")
209               .setAddressLine1("Some Street 12")
210               .build();
211
212       List<String> expected = new ArrayList<String>();
213       expected.add("Some Street 12");
214       expected.add("Ahuachapán");
215       expected.add("Ahuachapán");
216
217       List<String> real = formatInterpreter.getEnvelopeAddress(svAddress);
218       assertEquals(expected, real);
219
220       final AddressData svAddressWithPostCode = new AddressData.Builder(svAddress)
221               .setPostalCode("CP 2101")
222               .build();
223
224       expected = new ArrayList<String>();
225       expected.add("Some Street 12");
226       expected.add("CP 2101-Ahuachapán");
227       expected.add("Ahuachapán");
228
229       real = formatInterpreter.getEnvelopeAddress(svAddressWithPostCode);
230       assertEquals(expected, real);
231   }
232 }