diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index ddc5f59b..62809778 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -442,7 +442,7 @@ public final class BahnProvider implements NetworkProvider return uri.toString(); } - private static final Pattern P_DEPARTURES_COARSE = Pattern.compile("", Pattern.DOTALL); + private static final Pattern P_DEPARTURES_COARSE = Pattern.compile("", 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 @@ -497,7 +497,7 @@ public final class BahnProvider implements NetworkProvider final String position = mDepFine.group(4) != null ? "Gl. " + ParserUtils.resolveEntities(mDepFine.group(4)) : null; - final String destination = ParserUtils.resolveEntities(mDepFine.group(6)); + final String destination = ParserUtils.resolveEntities(mDepFine.group(6)).trim(); final String line = normalizeLine(ParserUtils.resolveEntities(mDepFine.group(7))); diff --git a/test/de/schildbach/pte/BahnProviderTest.java b/test/de/schildbach/pte/BahnProviderTest.java index 3678371a..82544ada 100644 --- a/test/de/schildbach/pte/BahnProviderTest.java +++ b/test/de/schildbach/pte/BahnProviderTest.java @@ -36,194 +36,22 @@ public class BahnProviderTest + "Berlin Hbf
\n" // + "Übergang\n" // + "
\n" // - + "Berlin-Lichtenberg
"); + + "Berlin-Lichtenberg
\n"); } @Test - public void departureWithPlatform() + public void newDepartureWithMessage() { final Matcher m = assertFineDepartures("" // - + "\n" // - + "S 1\n" // - + "\n" // - + ">>\n" // - + "Gänserndorf\n" // - + "
\n" // - + "10:42Gl. 1"); + + "fpTime=\"21:10\" fpDate=\"01.10.10\" \n" // + + "delay=\"cancel\" \n" // + + "platform =\"1\" \n" // + + "targetLoc=\"Magdeburg Hbf\" \n" // + + "prod=\"RE 38090\" \n" // + + "delayReason=\" Notarzteinsatz am Gleis\"\n"); - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(8)); // position - } - - @Test - public void departureWithOnTime() - { - final Matcher m = assertFineDepartures("" // - + "\n" // - + "RE 38148\n" // - + "\n" // - + ">>\n" // - + "Rathenow\n" // - + "
\n" // - + "21:58 pünktl., Gl. 13"); - - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(5)); // onTime - assertNotNull(m.group(8)); // position - } - - @Test - public void departureWithMessage() - { - final Matcher m = assertFineDepartures("" // - + "\n" // - + "ICE 824\n" // - + "\n" // - + ">>\n" // - + "Dortmund Hbf\n" // - + "
\n" // - + "07:02 ca. +5, Fährt heute nur bis Düsseldorf Hbf, Gl. 10"); - - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(6)); // delay - assertNotNull(m.group(7)); // message - assertNotNull(m.group(8)); // position - } - - @Test - public void departureUpdatedPosition() - { - final Matcher m = assertFineDepartures("" // - + "\n" // - + "RB 30240\n" // - + "\n" // - + ">>\n" // - + "Holzkirchen\n" // - + "
\n" // - + "17:10 pünktl.heute Gl. 7 "); - - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(5)); // onTime - assertNotNull(m.group(8)); // position - } - - @Test - public void departureMessageAndUpdatedPosition() - { - final Matcher m = assertFineDepartures("" // - + "\n" // - + "CNL 450\n" // - + "\n" // - + ">>\n" // - + "Paris Est\n" // - + "
\n" // - + "19:57 pünktl., Änderung im Zuglauf!heute Gl. 7 "); - - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(5)); // onTime - assertNotNull(m.group(7)); // message - assertNotNull(m.group(8)); // position - } - - @Test - public void departureWithWeirdMessage() - { - final Matcher m = assertFineDepartures("" // - + "\n" // - + "ICE 609\n" // - + "\n" // - + ">>\n" // - + "Basel SBB\n" // - + "
\n" // - + "04:52 k.A., Gl. 3"); - - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(8)); // position - } - - @Test - public void departureWithErsatzzugMessage() - { - final Matcher m = assertFineDepartures("" // - + "\n" // - + "RB 93328\n" // - + "\n" // - + ">>\n" // - + "München Hbf Gl.27-36\n" // - + "
\n" // - + "14:49 pünktl., Gl. 1,
Ersatzzug fürRB 5416"); - - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(5)); // onTime - assertNotNull(m.group(8)); // position - } - - @Test - public void departureWithMessageAndErsatzzugMessage() - { - final Matcher m = assertFineDepartures("" // - + "\n" // - + "S 1\n" // - + "\n" // - + ">>\n" // - + "München Ost\n" // - + "
\n" // - + "10:27, Zug fällt aus,
Ersatzzug S "); - - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(7)); // message - } - - @Test - public void departureWithPositionAndMessages() - { - final Matcher m = assertFineDepartures("" // - + "\n" // - + "RB 34075\n" // - + "\n" // - + ">>\n" // - + "Nürnberg Hbf\n" // - + "
\n" // - + "00:18, Zug fällt aus, Gl. 4,
Ersatzzug RB 30535"); - - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(7)); // message - assertNotNull(m.group(8)); // position - } - - @Test - public void departureWithMultipleMessages() - { - final Matcher m = assertFineDepartures("" // - + "\n" // - + "S 11\n" // - + "\n" // - + ">>\n" // - + "Bergisch Gladbach\n" // - + "
\n" // - + "10:59 pünktl., Änderung im Zuglauf!, Fährt heute nur bis Köln-Dellbrück, Gl. 1"); - - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(5)); // onTime - assertNotNull(m.group(7)); // message - assertNotNull(m.group(7)); // position - } - - @Test - public void departureSonderzug() - { - final Matcher m = assertFineDepartures("" // - + "\n" // - + "RE 30534\n" // - + "\n" // - + ">>\n" // - + "Nürnberg Hbf\n" // - + "
\n" // - + "22:58 pünktl., Gl. 2,
 Sonderzug"); - - assertNotNull(m.group(1)); // lineLink - assertNotNull(m.group(5)); // onTime - assertNotNull(m.group(8)); // position + assertNotNull(m.group(4)); // position + assertNotNull(m.group(9)); // message } private void assertFineConnectionDetails(String s) @@ -241,9 +69,10 @@ public class BahnProviderTest // ParserUtils.printGroups(m); - assertNotNull(m.group(2)); // line - assertNotNull(m.group(3)); // destination - assertNotNull(m.group(4)); // time + assertNotNull(m.group(1)); // time + assertNotNull(m.group(2)); // date + assertNotNull(m.group(6)); // destination + assertNotNull(m.group(7)); // line return m; }