package com.bericotech.clavin.resolver.multipart; import static org.junit.Assert.*; import com.bericotech.clavin.ClavinException; import com.bericotech.clavin.gazetteer.GeoName; import com.bericotech.clavin.gazetteer.query.LuceneGazetteer; import com.bericotech.clavin.resolver.ResolvedLocation; import java.io.File; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; /*##################################################################### * * CLAVIN (Cartographic Location And Vicinity INdexer) * --------------------------------------------------- * * Copyright (C) 2012-2013 Berico Technologies * http://clavin.bericotechnologies.com * * ==================================================================== * * 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. * * ==================================================================== * * MultiLevelMultipartLocationResolverTest.java * *###################################################################*/ /** * Tests mapping of city and N-level administrative divisions to a * single location. */ @RunWith(Parameterized.class) public class MultiLevelMultipartLocationResolverTest { // expected geonameID numbers for given location names private static final int UNITED_STATES = 6252001; private static final int MASSACHUSETTS = 6254926; private static final int BOSTON_MA = 4930956; private static final int HAVERHILL_MA = 4939085; private static final int WORCESTER_MA = 4956184; private static final int SPRINGFIELD_MA = 4951788; private static final int MISSOURI = 4398678; private static final int SPRINGFIELD_MO = 4409896; private static final int ILLINOIS = 4896861; private static final int SPRINGFIELD_IL = 4250542; private static final int VIRGINIA = 6254928; private static final int FAIRFAX_VA = 4758023; private static final int FAIRFAX_COUNTY_VA = 4758041; private static final int RESTON_VA = 4781530; private static final int SPRINGFIELD_VA = 4787117; private static final int OREGON = 5744337; private static final int SPRINGFIELD_OR = 5754005; private static final int DELAWARE = 4142224; private static final int BETHEL_DE_US = 4141443; private static final int GERMANY = 2921044; private static final int NR_WESTPHALIA = 2861876; // state of North Rhine-Westphalia private static final int BETHEL_GER = 2949766; private static final int UNITED_KINGDOM = 2635167; private static final int ENGLAND = 6269131; private static final int LONDON_UK_41 = 2643741; private static final int LONDON_UK_43 = 2643743; private static final int HAVERHILL_UK = 2647310; private static final int WORCESTER_UK = 2633563; private static final int OXFORDSHIRE = 2640726; private static final int OXFORD_UK = 2640729; private static final int CANADA = 6251999; private static final int ONTARIO = 6093943; private static final int LONDON_ON = 6058560; private static final int PHILIPPINES = 1694008; private static final int DAVAO = 7521309; private static final int DAVAO_ORIENTAL = 1715342; private static final int BOSTON_PH = 1723862; private static final int SWITZERLAND = 2658434; private static final int ZURICH_CANTON = 2657895; private static final int ZURICH_CITY = 2657896; private static final int AUSTRALIA = 2077456; private static final int ASHMORE_AND_CARTIER_ISLANDS = 2077507; private static final int NETHERLANDS_ANTILLES = 8505032; private static final int CLIPPERTON_ISLAND = 4020092; @Parameters(name="{index}: multipartResolve({0} {1})") public static Iterable<Object[]> parameters() { return Arrays.asList(new Object[][] { { Arrays.asList("Springfield", "Massachusetts", "United States"), SPRINGFIELD_MA }, { Arrays.asList("Springfield", "Illinois", "United States"), SPRINGFIELD_IL }, { Arrays.asList("Springfield", "Missouri", "United States"), SPRINGFIELD_MO }, { Arrays.asList("Springfield", "Virginia", "United States"), SPRINGFIELD_VA }, { Arrays.asList("Springfield", "Oregon", "United States"), SPRINGFIELD_OR }, { Arrays.asList("Reston", "Virginia", "United States"), RESTON_VA }, { Arrays.asList("Reston", "Fairfax", "Virginia", "United States"), RESTON_VA }, { Arrays.asList("Reston", "Fairfax County", "VA", "US"), RESTON_VA }, { Arrays.asList("Reston", "Fairfax"), RESTON_VA }, { Arrays.asList("Fairfax", "Virginia"), FAIRFAX_VA }, { Arrays.asList("Fairfax County", "VA"), FAIRFAX_COUNTY_VA }, { Arrays.asList("Reston", "Virginia", "CA"), null }, { Arrays.asList("Boston", "Massachusetts", "United States"), BOSTON_MA }, { Arrays.asList("Haverhill", "Massachusetts", "United States"), HAVERHILL_MA }, { Arrays.asList("Worcester", "Massachusetts", "United States"), WORCESTER_MA }, { Arrays.asList("Haverhill", "England", "United Kingdom"), HAVERHILL_UK }, { Arrays.asList("Worcester", "England", "United Kingdom"), WORCESTER_UK }, { Arrays.asList("Oxford", "England", "United Kingdom"), OXFORD_UK }, { Arrays.asList("Oxford", "Oxfordshire", "United Kingdom"), OXFORD_UK }, { Arrays.asList("London", "England", "United Kingdom"), LONDON_UK_43 }, { Arrays.asList("London", "Ontario", "Canada"), LONDON_ON }, { Arrays.asList("Boston", "Davao", "Philippines"), BOSTON_PH }, { Arrays.asList("Boston", "Davao Oriental", "Philippines"), BOSTON_PH }, { Arrays.asList("Bethel", "Delaware", "United States"), BETHEL_DE_US }, { Arrays.asList("Bethel", "North Rhine-Westphalia", "Germany"), BETHEL_GER }, { Arrays.asList("Bethel", "DE", "US"), BETHEL_DE_US }, { Arrays.asList("Bethel", "NRW", "DE"), BETHEL_GER }, { Arrays.asList("London", "ENG", "UK"), LONDON_UK_43 }, { Arrays.asList("London", "ENG", "GB"), LONDON_UK_43 }, { Arrays.asList("London", "ON", "CA"), LONDON_ON }, { Arrays.asList("London", "ON", "CAN"), LONDON_ON }, { Arrays.asList("Zurich", "ZH", "CH"), ZURICH_CITY }, { Arrays.asList("", "ENG", "UK"), ENGLAND }, { Arrays.asList("London", "", "UK"), LONDON_UK_43 }, { Arrays.asList("London", "", ""), LONDON_UK_43 }, { Arrays.asList("", "ENG", ""), ENGLAND }, { Arrays.asList("", "", "UK"), UNITED_KINGDOM }, { Arrays.asList("Ashmore and Cartier Islands"), ASHMORE_AND_CARTIER_ISLANDS }, { Arrays.asList("Ashmore and Cartier Islands", "Australia"), ASHMORE_AND_CARTIER_ISLANDS }, { Arrays.asList("Netherlands Antilles"), NETHERLANDS_ANTILLES }, { Arrays.asList("Parish of Saint Thomas", "Ashmore and Cartier Islands"), null}, { Arrays.asList("Clipperton Island"), CLIPPERTON_ISLAND }, { Arrays.asList("Clipperton Island", "France"), CLIPPERTON_ISLAND }, { Arrays.asList("", "", ""), null }, { Collections.EMPTY_LIST, null } }); } private static MultipartLocationResolver resolver; @BeforeClass public static void setUpClass() throws ClavinException { resolver = new MultipartLocationResolver(new LuceneGazetteer(new File("./IndexDirectory"))); } private final String[] parts; private final Integer expectedId; public MultiLevelMultipartLocationResolverTest(List<String> parts, Integer expectedId) { this.parts = parts.toArray(new String[0]); this.expectedId = expectedId; } @Test public void testResolveMultipartLocation() throws ClavinException { ResolvedLocation loc = resolver.resolveLocation(false, parts); if (expectedId == null) { assertNull("expected null location", loc); } else { assertNotNull("expected non-null location", loc); GeoName geo = loc.getGeoname(); assertEquals(String.format("Incorrect Location [%s]", geo), expectedId.intValue(), geo.getGeonameID()); } } }