package com.gisgraphy.addressparser.format; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.List; import org.apache.log4j.spi.TriggeringEventEvaluator; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.gisgraphy.addressparser.Address; import com.gisgraphy.addressparser.StreetTypeOrder; /** * @author <a href="mailto:david.masclet@gisgraphy.com">David Masclet</a> * */ public class AddressFormaterTest { private static final Address US_CA_ADDRESS; private static final Address US_CA_INCOMPLETE_ADDRESS; private static final Address CN_ADDRESS; private static final Address VN_ADDRESS; private BasicAddressFormater formater; @Before public void setup() { formater = BasicAddressFormater.getInstance(); } static { US_CA_ADDRESS = new Address(); US_CA_ADDRESS.setCountryCode("US"); US_CA_ADDRESS.setState("CA"); US_CA_ADDRESS.setCity("Mt View"); US_CA_ADDRESS.setHouseNumber("1098"); US_CA_ADDRESS.setStreetName("Alta"); US_CA_ADDRESS.setStreetType("Ave"); US_CA_ADDRESS.setZipCode("94043"); VN_ADDRESS = new Address(); VN_ADDRESS.setCountryCode("VN"); VN_ADDRESS.setState("CA"); VN_ADDRESS.setCity("Mt View"); VN_ADDRESS.setHouseNumber("1098"); VN_ADDRESS.setStreetName("Alta"); VN_ADDRESS.setStreetType("Ave"); VN_ADDRESS.setZipCode("94043"); US_CA_INCOMPLETE_ADDRESS = new Address(); US_CA_INCOMPLETE_ADDRESS.setCountryCode("US"); US_CA_INCOMPLETE_ADDRESS.setState("CA"); US_CA_INCOMPLETE_ADDRESS.setHouseNumber("1098"); US_CA_INCOMPLETE_ADDRESS.setStreetName("Alta"); US_CA_INCOMPLETE_ADDRESS.setStreetType("Ave"); US_CA_INCOMPLETE_ADDRESS.setZipCode("94043"); CN_ADDRESS = new Address(); CN_ADDRESS.setCountryCode("CN"); CN_ADDRESS.setState("\u53F0\u5317\u5E02"); // Taipei city CN_ADDRESS.setCity("\u5927\u5B89\u5340"); // Da-an district CN_ADDRESS.setHouseNumber("3"); CN_ADDRESS.setStreetName("Hsin-yi"); CN_ADDRESS.setStreetType("Rd."); CN_ADDRESS.setZipCode("106"); CN_ADDRESS.setRecipientName("Mr. Liu"); } @Test public void constructor() { BasicAddressFormater.getInstance(); } @Test public void testCitySubdivision(){ Address address =new Address(); address.setCitySubdivision("citySubdivision"); address.setCity("city"); address.setStreetName("street"); address.setStreetType("type"); String real = formater.getEnvelopeAddress(address, ScriptType.LTR, DisplayMode.COMMA); Assert.assertEquals("street type, citySubdivision, city", real); real = formater.getEnvelopeAddress(address, ScriptType.LTR, DisplayMode.SINGLE_LINE); Assert.assertEquals("street type citySubdivision, city", real); } @Test public void testLines_US() { List<String> expected = new ArrayList<String>(); expected.add("1098 Alta Ave"); expected.add("Mt View, CA 94043"); List<String> real = formater.getLines(US_CA_ADDRESS); for (int i = 0; i < expected.size(); i++) { Assert.assertEquals(expected.get(i), real.get(i)); } } @Test public void testEnvelopeAddress_US_ALLMODE() { List<String> expected = new ArrayList<String>(); expected.add("1098 Alta Ave"); expected.add("Mt View, CA 94043"); String real = formater.getEnvelopeAddress(US_CA_ADDRESS, DisplayMode.SINGLE_LINE); Assert.assertEquals(expected.get(0) + " " + expected.get(1), real); real = formater.getEnvelopeAddress(US_CA_ADDRESS, DisplayMode.HTML); Assert.assertEquals(expected.get(0) + "<br/>" + expected.get(1), real); real = formater.getEnvelopeAddress(US_CA_ADDRESS, DisplayMode.ENVELOPE); Assert.assertEquals(expected.get(0) + "\r\n" + expected.get(1), real); } @Test public void testEnvelopeAddress_CN_LTR_ALLMODE() { List<String> expected = new ArrayList<String>(); expected.add("Mr. Liu"); expected.add("3 Hsin-yi Rd."); expected.add("\u5927\u5B89\u5340, \u53F0\u5317\u5E02 106"); // Da-an district String real = formater.getEnvelopeAddress(CN_ADDRESS, ScriptType.LTR, DisplayMode.SINGLE_LINE); Assert.assertEquals(BasicAddressFormater.join(expected, " "), real); real = formater.getEnvelopeAddress(CN_ADDRESS, ScriptType.LTR, DisplayMode.HTML); Assert.assertEquals(BasicAddressFormater.join(expected, "<br/>"), real); real = formater.getEnvelopeAddress(CN_ADDRESS, ScriptType.LTR, DisplayMode.ENVELOPE); Assert.assertEquals(BasicAddressFormater.join(expected, "\r\n"), real); real = formater.getEnvelopeAddress(CN_ADDRESS, ScriptType.LTR, DisplayMode.COMMA); Assert.assertEquals(BasicAddressFormater.join(expected, ", "), real); } @Test public void testEnvelopeAddress_CN_RTL_ALLMODE() { List<String> expected = new ArrayList<String>(); expected.add("106, \u53F0\u5317\u5E02"); expected.add("\u5927\u5B89\u5340"); // Taipei city, Da-an district expected.add("Rd. Hsin-yi, 3"); expected.add("Mr. Liu"); String real = formater.getEnvelopeAddress(CN_ADDRESS, ScriptType.RTL, DisplayMode.SINGLE_LINE); Assert.assertEquals(BasicAddressFormater.join(expected, " "), real); real = formater.getEnvelopeAddress(CN_ADDRESS, ScriptType.RTL, DisplayMode.HTML); Assert.assertEquals(BasicAddressFormater.join(expected, "<br/>"), real); real = formater.getEnvelopeAddress(CN_ADDRESS, ScriptType.RTL, DisplayMode.ENVELOPE); Assert.assertEquals(BasicAddressFormater.join(expected, "\r\n"), real); real = formater.getEnvelopeAddress(CN_ADDRESS, ScriptType.RTL, DisplayMode.COMMA); Assert.assertEquals(BasicAddressFormater.join(expected, ", "), real); System.out.println(real); } @Test public void testState_state() { Address address = new Address(); address.setStreetName("california"); address.setStreetType("street"); address.setState("ca"); address.setCountryCode("US"); String real = formater.getEnvelopeAddress(address,DisplayMode.COMMA); assertEquals("california street, ca", real); } @Test public void testPoboxShouldFallBackOnDefaultPatternIfThereIsNoPOBoxInfo(){ Address address= new Address(); Assert.assertEquals(formater.getCountryInfo("ZZ").getFormatString(), formater.getFormatString(ScriptType.LTR, "AG", address)); Assert.assertEquals(formater.getCountryInfo("ZZ").getFormatString(), formater.getFormatString(ScriptType.RTL, "AG", address)); } @Test public void testPobox(){ Address address= new Address(); address.setPOBox("pOBox"); address.setPOBoxAgency("POBoxAgency"); //address.setPOBoxInfo("boxInfo"); address.setPostOfficeBox("postOfficeBox"); Assert.assertEquals(formater.getCountryInfo("AG").getFormatString(), formater.getFormatString(ScriptType.LTR, "AG", address)); Assert.assertEquals(formater.getCountryInfo("AG").getFormatString(), formater.getFormatString(ScriptType.RTL, "AG", address)); } @Test public void testState_statelevel() { Address address = new Address(); address.setStreetName("california"); address.setStreetType("street"); address.setAdm3Name("ca"); address.setCountryCode("TR"); String real = formater.getEnvelopeAddress(address,DisplayMode.COMMA); assertEquals("california street, ca", real); } @Test public void testState_statelevel_fallback() { Address address = new Address(); address.setStreetName("california"); address.setStreetType("street"); address.setAdm1Name("ca"); address.setCountryCode("TR"); String real = formater.getEnvelopeAddress(address,DisplayMode.COMMA); assertEquals("california street, ca", real); } @Test public void testEnvelopeAddressIncompleteAddress() { List<String> expected = new ArrayList<String>(); expected.add("1098 Alta Ave"); expected.add("CA 94043"); List<String> real = formater.getLines(US_CA_INCOMPLETE_ADDRESS); assertEquals(expected, real); } @Test public void testEnvelopeAddressEmptyAddress() { List<String> expected = new ArrayList<String>(); Address address = new Address(); address.setCountryCode("US"); List<String> real = formater.getLines(address); assertEquals(expected, real); address = new Address(); real = formater.getLines(address); assertEquals(expected, real); } @Test public void testStreetTypeThenName() { List<String> expected = new ArrayList<String>(); expected.add("california street"); Address address = new Address(); address.setStreetName("california"); address.setStreetType("street"); address.setCountryCode("US"); List<String> real = formater.getLines(address); assertEquals(expected, real); } @Test public void testStreetNameThenType() { List<String> expected = new ArrayList<String>(); expected.add("rue jean moulin"); Address address = new Address(); address.setStreetName("jean moulin"); address.setStreetType("rue"); address.setCountryCode("FR"); List<String> real = formater.getLines(address); assertEquals(expected, real); } @Test public void detectStreetTypeOrderFromAddress(){ Assert.assertEquals("wrong street type for null address",StreetTypeOrder.unknow,formater.detectStreetTypeOrderFromAddress(null)); Address address =new Address(); Assert.assertEquals("wrong street type for null address",StreetTypeOrder.unknow,formater.detectStreetTypeOrderFromAddress(address)); address =new Address(); address.setCountryCode("zz"); Assert.assertEquals("wrong street type for wrong countrycode",StreetTypeOrder.unknow,formater.detectStreetTypeOrderFromAddress(address)); address =new Address(); address.setCountryCode("US"); Assert.assertEquals("wrong street type for good countrycode",StreetTypeOrder.nameThenType,formater.detectStreetTypeOrderFromAddress(address)); address =new Address(); address.setCountryCode("CA"); Assert.assertEquals("wrong street type for ambiguous countrycode",StreetTypeOrder.unknow,formater.detectStreetTypeOrderFromAddress(address)); address =new Address(); address.setCountryCode("BE"); Assert.assertEquals("wrong street type for ambiguous countrycode",StreetTypeOrder.unknow,formater.detectStreetTypeOrderFromAddress(address)); address =new Address(); address.setCountryCode("CH"); Assert.assertEquals("wrong street type for ambiguous countrycode",StreetTypeOrder.unknow,formater.detectStreetTypeOrderFromAddress(address)); } @Test public void noStreetName(){ Address address =new Address(); address.setCity("Goussainville"); address.setZipCode("95190"); address.setCountryCode("FR"); String str = formater.getEnvelopeAddress(address, DisplayMode.COMMA); System.out.println(str); Assert.assertEquals("Goussainville, 95190", str); } @Test public void countryShouldBeCamelCase(){ Assert.assertEquals("France", formater.getCountryInfo("Fr").getCountryName()); } @Test public void getAdmLevelByContryCode(){ Assert.assertEquals(0, formater.getAdmLevelByContryCode(null)); Assert.assertEquals(0, formater.getAdmLevelByContryCode("toto")); Assert.assertEquals(1, formater.getAdmLevelByContryCode("US")); Assert.assertEquals(0, formater.getAdmLevelByContryCode("FR")); Assert.assertEquals(3, formater.getAdmLevelByContryCode("BS")); } }