diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index 10ed2e4c..42c3ef52 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -432,7 +432,7 @@ public final class BahnProvider implements NetworkProvider return uri.toString(); } - private static final Pattern P_DEPARTURES_COARSE = Pattern.compile("", Pattern.DOTALL); + static final Pattern P_DEPARTURES_COARSE = Pattern.compile("\\G(?:\n|\\z)", Pattern.DOTALL); static final Pattern P_DEPARTURES_FINE = Pattern.compile("" // + "fpTime=\"(\\d{1,2}:\\d{2})\" fpDate=\"(\\d{2}\\.\\d{2}\\.\\d{2})\" \n" // time, date + "delay=\"(?:-|k\\.A\\.?|cancel|\\+?\\s*(\\d+))\" \n" // delay diff --git a/test/de/schildbach/pte/BahnProviderTest.java b/test/de/schildbach/pte/BahnProviderTest.java index 82544ada..e4906923 100644 --- a/test/de/schildbach/pte/BahnProviderTest.java +++ b/test/de/schildbach/pte/BahnProviderTest.java @@ -29,6 +29,49 @@ import org.junit.Test; */ public class BahnProviderTest { + @Test + public void coarseDeparture() + { + assertCoarseDepartures("" // + + "\n"); + } + + @Test + public void coarseDepartureWithoutTrailingNewLine() + { + assertCoarseDepartures("" // + + ""); + } + + @Test + public void coarseDepartureWithInvalidClosingBracket() + { + assertCoarseDepartures("" // + + "\"\n" // + + "depStation=\"Berlin Sonnenallee\"\n" // + + "delayReason=\" \"\n" // + + "/>\n"); + } + @Test public void connectionUebergang() { @@ -54,7 +97,7 @@ public class BahnProviderTest assertNotNull(m.group(9)); // message } - private void assertFineConnectionDetails(String s) + private void assertFineConnectionDetails(final String s) { Matcher m = BahnProvider.P_CONNECTION_DETAILS_FINE.matcher(s); assertTrue(m.matches()); @@ -62,7 +105,16 @@ public class BahnProviderTest // ParserUtils.printGroups(m); } - private Matcher assertFineDepartures(String s) + private Matcher assertCoarseDepartures(final String s) + { + Matcher m = BahnProvider.P_DEPARTURES_COARSE.matcher(s); + assertTrue(m.find()); + assertFineDepartures(m.group(1)); + + return m; + } + + private Matcher assertFineDepartures(final String s) { Matcher m = BahnProvider.P_DEPARTURES_FINE.matcher(s); assertTrue(m.matches());