diff --git a/src/de/schildbach/pte/AvvAachenProvider.java b/src/de/schildbach/pte/AvvAachenProvider.java index 0ec629fc..c055fd3d 100644 --- a/src/de/schildbach/pte/AvvAachenProvider.java +++ b/src/de/schildbach/pte/AvvAachenProvider.java @@ -46,11 +46,26 @@ public class AvvAachenProvider extends AbstractHafasClientInterfaceProvider { setApiAuthorization(apiAuthorization); } + private static final String[] PLACES = { "AC", "Aachen" }; + @Override protected String[] splitStationName(final String name) { + // Some stations in Aachen city have 3 names: "Aachen, station name", "station name, AC" and "AC, station name". + // Some (other) stations has 2 variants: "Aachen, station name" and "station name, Aachen" + // If you type the station name first, you get the variant "station name, AC" resp. "station name, Aachen", + // which would be parsed as a station AC resp. Aachen in "station name". + for (final String place: PLACES) { + if (name.endsWith(", " + place)) { + return new String[] { "Aachen" , name.substring(0, name.length() - place.length() - 2) }; + } + } final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(name); - if (m.matches()) + if (m.matches()) { + // also remove the abbreviating variant, just for consistency + if (m.group(1).equals("AC")) + return new String[] { "Aachen", m.group(2) }; return new String[] { m.group(1), m.group(2) }; + } return super.splitStationName(name); } diff --git a/test/de/schildbach/pte/live/AvvAachenProviderLiveTest.java b/test/de/schildbach/pte/live/AvvAachenProviderLiveTest.java index 6b50192d..40340f4c 100644 --- a/test/de/schildbach/pte/live/AvvAachenProviderLiveTest.java +++ b/test/de/schildbach/pte/live/AvvAachenProviderLiveTest.java @@ -20,8 +20,10 @@ package de.schildbach.pte.live; import static org.hamcrest.CoreMatchers.hasItem; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import java.util.Date; +import java.util.Objects; import org.junit.Test; @@ -74,6 +76,20 @@ public class AvvAachenProviderLiveTest extends AbstractProviderLiveTest { assertThat(result.getLocations(), hasItem(new Location(LocationType.STATION, "1576", "Aachen", "Gaßmühle"))); } + @Test + public void suggestLocationBadSuffix() throws Exception { + final SuggestLocationsResult result = suggestLocations("Turmstraße"); + print(result); + assertTrue(Objects.requireNonNull(result.getLocations().get(0).name).contains("Turmstr")); + } + + @Test + public void suggestLocationSpecialPlaceStationOrder() throws Exception { + final SuggestLocationsResult result = suggestLocations("Jupp-Müller"); + print(result); + assertTrue(Objects.requireNonNull(result.getLocations().get(0).name).contains("Jupp-Müller")); + } + @Test public void suggestLocationsPOI() throws Exception { final SuggestLocationsResult result = suggestLocations("Suermondt-Ludwig-Museum");