blob: 069777ed4b01b0cb34399b8a2dec885bd1a0c2b8 [file] [log] [blame]
/*
* Copyright (C) 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.i18n.addressinput;
import junit.framework.TestCase;
/**
* Spot check the standard data set for various cases of interest. This is
* not an exhaustive test.
*
*/
public class MarketVerifierTest extends TestCase {
private AddressProblems problems = new AddressProblems();
private MarketVerifier verifier;
protected void setUp() {
problems.clear();
verifier = new MarketVerifier();
}
public void testUnitedStatesOk() {
AddressData addr =
new AddressData.Builder()
.setCountry("US")
.setAdminArea("CA")
.setLocality("Mountain View")
.setAddress("1234 Somewhere")
.setPostalCode("94025")
.build();
verifier.verify(addr, problems);
assertTrue(problems.toString(), problems.isEmpty()); // no mismatch
}
public void testUnitedStatesZipMismatch() {
AddressData addr =
new AddressData.Builder()
.setCountry("US")
.setAdminArea("CA")
.setLocality("Mountain View")
.setPostalCode("12345")
.build();
verifier.verify(addr, problems);
assertEquals(AddressProblemType.MISMATCHING_VALUE,
problems.getProblem(AddressField.POSTAL_CODE));
}
public void testUnitedStatesNotOk() {
AddressData addr =
new AddressData.Builder()
.setCountry("US")
.setAdminArea("CA")
.setLocality(null)
.setDependentLocality("Foo Bar")
.setPostalCode("12345").build();
verifier.verify(addr, problems);
assertEquals(AddressProblemType.MISMATCHING_VALUE,
problems.getProblem(AddressField.POSTAL_CODE));
assertEquals(AddressProblemType.MISSING_REQUIRED_FIELD,
problems.getProblem(AddressField.LOCALITY));
}
public void testChinaOk() {
AddressData addr =
new AddressData.Builder()
.setCountry("CN")
.setAdminArea("Beijing Shi")
.setLocality("Xicheng Qu")
.setAddress("Yitiao Lu")
.setPostalCode("123456")
.build();
verifier.verify(addr, problems);
assertTrue(problems.isEmpty());
}
public void testGermanAddress() {
AddressData addr = new AddressData.Builder()
.setCountry("DE")
.setLocality("Berlin")
.setAddress("Huttenstr. 50")
.setPostalCode("10553")
.setOrganization("BMW AG Niederkassung Berlin")
.setRecipient("Herr Diefendorf")
.build();
verifier.verify(addr, problems);
assertTrue(problems.isEmpty());
// Clones address but leave city empty.
addr = new AddressData.Builder()
.set(addr)
.setLocality(null)
.build();
verifier.verify(addr, problems);
assertEquals(AddressProblemType.MISSING_REQUIRED_FIELD,
problems.getProblem(AddressField.LOCALITY));
}
public void testIrishAddress() {
AddressData addr = new AddressData.Builder()
.setCountry("IE")
.setLocality("Dublin")
.setAdminArea("Co. Dublin")
.setAddress("7424 118 Avenue NW")
.setRecipient("Conan O'Brien")
.build();
verifier.verify(addr, problems);
assertTrue(problems.isEmpty());
// Clones address but leave county empty. This address should be valid
// since county is not required.
addr = new AddressData.Builder()
.set(addr)
.setAdminArea(null)
.build();
verifier.verify(addr, problems);
assertTrue(problems.isEmpty());
}
public void testChinaPostalCodeBadFormat() {
AddressData addr =
new AddressData.Builder()
.setCountry("CN")
.setAdminArea("Beijing Shi")
.setLocality("Xicheng Qu")
.setPostalCode("12345")
.build();
verifier.verify(addr, problems);
// ensure problem is unrecognized format and problem is in POSTAL_CODE
assertEquals(AddressProblemType.UNRECOGNIZED_FORMAT,
problems.getProblem(AddressField.POSTAL_CODE));
}
/**
* If there is a postal code pattern for a certain country, and the input postal
* code is empty, it should not be reported as bad postal code format. Whether
* empty postal code is ok should be determined by checks for required fields.
*/
public void testEmptyPostalCodeReportedAsGoodFormat() {
// Chilean address has a postal code format pattern, but does not require
// postal code. The following address is valid.
AddressData addr = new AddressData.Builder()
.setCountry("CL")
.setAddressLine1("GUSTAVO LE PAIGE ST #159")
.setAdminArea("Atacama")
.setLocality("San Pedro")
.setPostalCode("")
.build();
verifier.verify(addr, problems);
assertTrue(problems.isEmpty());
problems.clear();
// Now checks for US addresses, which requires postal code. The following
// address's postal code is wrong because it misses required field, not
// because it mismatches expected postal code pattern.
addr = new AddressData.Builder()
.setCountry("US")
.setPostalCode("")
.build();
problems.clear();
verifier.verify(addr, problems);
assertEquals(AddressProblemType.MISSING_REQUIRED_FIELD,
problems.getProblem(AddressField.POSTAL_CODE));
}
public void testChinaTaiwanOk() {
AddressData addr =
new AddressData.Builder()
.setCountry("CN")
.setAdminArea("Taiwan")
.setLocality("Taichung City")
.setDependentLocality("Situn District")
.setAddress("12345 Yitiao Lu")
.setPostalCode("407")
.build();
verifier.verify(addr, problems);
assertTrue(problems.isEmpty());
}
public void failingtestChinaTaiwanUnknownDistrict() {
AddressData addr =
new AddressData.Builder().setCountry("CN").setAdminArea("Taiwan").setLocality(
"Taichung City").setDependentLocality("Foo Bar").setPostalCode("400").build();
verifier.verify(addr, problems);
assertEquals(AddressProblemType.UNKNOWN_VALUE,
problems.getProblem(AddressField.DEPENDENT_LOCALITY));
}
public void testStreetVerification() {
// missing street address
AddressData addr =
new AddressData.Builder()
.setCountry("US")
.setAdminArea("CA")
.setLocality("Mountain View")
.setPostalCode("94025")
.build();
assertNull(addr.getAddressLine1());
assertNull(addr.getAddressLine2());
verifier.verify(addr, problems);
assertEquals(AddressProblemType.MISSING_REQUIRED_FIELD,
problems.getProblem(AddressField.STREET_ADDRESS));
}
// Tests The Bahamas' address
public void failingtestBahamas() {
final AddressData address = new AddressData.Builder()
.setAddress("Abaco Beach Resort & Boat Habour")
.setLocality("Treasure Cay")
.setAdminArea("Abaco")
.setCountry("BS")
.build();
verifier.verify(address, problems);
assertTrue(problems.isEmpty());
}
// japan test data copied from
public void testJapan() {
// added AdminArea since address verification can't infer it from Kyoto City
// commented out dependent locality since address verification doesn't use it
// TODO: support inference of higher levels from lower ones
// TODO: add dependent locality support for japan addresses
final AddressData address = new AddressData.Builder() // SHIGERU_MIYAMOTO
.setRecipient("\u5BAE\u672C \u8302")
.setAddress("\u4E0A\u9CE5\u7FBD\u927E\u7ACB\u753A11\u756A\u5730")
.setAdminArea("\u4eac\u90fd\u5e9c") // Kyoto prefecture, added
.setLocality("\u4EAC\u90FD\u5E02") // Kyoto city
// .setDependentLocality("\u5357\u533A")
.setCountry("JP")
.setPostalCode("601-8501")
.build();
verifier.verify(address, problems);
assertTrue(problems.isEmpty());
}
public void testJapanLatin() {
// added AdminArea since address verification can't infer it from Kyoto City
// commented out dependent locality since address verification doesn't use it
// commented out language since address doesn't use it yet
// TODO: support language
final AddressData address = new AddressData.Builder() // SHIGERU_MIYAMOTO_ENGLISH
.setRecipient("Shigeru Miyamoto")
.setAddress("11-1 Kamitoba-hokotate-cho")
.setAdminArea("KYOTO") // added
.setLocality("Kyoto")
// .setDependentLocality("Minami-ku")
// .setLanguage(LanguageCode.forString("ja_Latn"))
.setCountry("JP")
.setPostalCode("601-8501")
.build();
verifier.verify(address, problems);
assertTrue(problems.isEmpty());
}
}