2 * Copyright (C) 2010 Google Inc.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.i18n.addressinput;
19 import com.android.i18n.addressinput.LookupKey.ScriptType;
21 import java.util.ArrayList;
22 import java.util.List;
24 import junit.framework.TestCase;
27 * Tests for the FormatInterpreter class.
29 public class FormatInterpreterTest extends TestCase {
30 private static final AddressData US_CA_ADDRESS;
31 private static final AddressData TW_ADDRESS;
33 private FormatInterpreter formatInterpreter;
36 US_CA_ADDRESS = new AddressData.Builder().setCountry("US")
38 .setLocality("Mt View")
39 .setAddressLine1("1098 Alta Ave")
40 .setPostalCode("94043")
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.")
48 .setOrganization("Giant Bike Store")
49 .setRecipient("Mr. Liu")
55 formatInterpreter = new FormatInterpreter(new FormOptions.Builder().build());
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
70 for (AddressField field : formatInterpreter.getAddressFieldOrder(ScriptType.LOCAL, "US")) {
71 assertEquals("index " + currIndex + " should have matched",
72 format[currIndex].getChar(), field.getChar());
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.
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,
91 for (AddressField field : formatInterpreter.getAddressFieldOrder(ScriptType.LOCAL, "VU")) {
92 assertEquals("index " + currIndex + " should have matched",
93 format[currIndex].getChar(), field.getChar());
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
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());
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);
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);
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
140 for (AddressField field : formatInterpreter.getAddressFieldOrder(ScriptType.LATIN, "TW")) {
141 assertEquals("Unexpected field order -- mismatched on index " + currIndex,
142 format[currIndex].getChar(), field.getChar());
147 public void testUsEnvelopeAddress() {
148 List<String> expected = new ArrayList<String>();
149 expected.add("1098 Alta Ave");
150 expected.add("Mt View, CA 94043");
152 List<String> real = formatInterpreter.getEnvelopeAddress(US_CA_ADDRESS);
154 assertEquals(expected, real);
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>();
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");
167 List<String> real = formatInterpreter.getEnvelopeAddress(TW_ADDRESS);
169 assertEquals(expected, real);
172 public void testEnvelopeAddressIncompleteAddress() {
173 List<String> expected = new ArrayList<String>();
174 expected.add("1098 Alta Ave");
175 expected.add("CA 94043");
177 AddressData address = new AddressData.Builder().set(US_CA_ADDRESS)
178 .set(AddressField.LOCALITY, null).build();
180 List<String> real = formatInterpreter.getEnvelopeAddress(address);
182 assertEquals(expected, real);
185 public void testEnvelopeAddressEmptyAddress() {
186 List<String> expected = new ArrayList<String>();
187 AddressData address = new AddressData.Builder().setCountry("US").build();
189 List<String> real = formatInterpreter.getEnvelopeAddress(address);
190 assertEquals(expected, real);
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")
201 List<String> real = formatInterpreter.getEnvelopeAddress(address);
202 assertEquals(expected, real);
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")
212 List<String> expected = new ArrayList<String>();
213 expected.add("Some Street 12");
214 expected.add("Ahuachapán");
215 expected.add("Ahuachapán");
217 List<String> real = formatInterpreter.getEnvelopeAddress(svAddress);
218 assertEquals(expected, real);
220 final AddressData svAddressWithPostCode = new AddressData.Builder(svAddress)
221 .setPostalCode("CP 2101")
224 expected = new ArrayList<String>();
225 expected.add("Some Street 12");
226 expected.add("CP 2101-Ahuachapán");
227 expected.add("Ahuachapán");
229 real = formatInterpreter.getEnvelopeAddress(svAddressWithPostCode);
230 assertEquals(expected, real);