From d7aa7aa4f1e569f3658a7b7f398f190d11310817 Mon Sep 17 00:00:00 2001 From: "andreas.schildbach" Date: Wed, 8 Sep 2010 08:19:24 +0000 Subject: [PATCH] parse multiple messages git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@150 0924bc21-9374-b0fa-ee44-9ff1593b38f0 --- src/de/schildbach/pte/BahnProvider.java | 9 +++- test/de/schildbach/pte/BahnProviderTest.java | 48 ++++++++++++++++---- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index 0e55db6e..3949b4bc 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -446,12 +446,17 @@ public final class BahnProvider implements NetworkProvider , Pattern.DOTALL); private static final Pattern P_DEPARTURES_COARSE = Pattern.compile("
\n(.+?)
", Pattern.DOTALL); static final Pattern P_DEPARTURES_FINE = Pattern.compile(".*?" // - + "(.*?).*?" // line - + ">>\n\\s*(.+?)\\s*\n
\n" // destination + + "\n" // + + "(.*?)\n" // line + + "\n" // + + ">>\n" // + + "\\s*(.+?)\\s*\n" // destination + + "
\n" // + "(\\d{1,2}:\\d{2})" // time + "(?: (?:(pünktl\\.)|ca. \\+(\\d+)))?" // ontime, delay + "(?: k\\.A\\.)?" // + "(?:, ([^<]*))?" // message + + "(?:,
]*>[^<]*)?" // (ersatzzug message) + "(?:(?:, )?(?:heute )?(Gl\\. " + ParserUtils.P_PLATFORM + ")(?:\\s*)?)?" // position , Pattern.DOTALL); private static final Pattern P_DEPARTURES_URI_STATION_ID = Pattern.compile("input=(\\d+)"); diff --git a/test/de/schildbach/pte/BahnProviderTest.java b/test/de/schildbach/pte/BahnProviderTest.java index 54081bfa..e024d7bf 100644 --- a/test/de/schildbach/pte/BahnProviderTest.java +++ b/test/de/schildbach/pte/BahnProviderTest.java @@ -42,7 +42,7 @@ public class BahnProviderTest @Test public void departureWithPlatform() { - assertFineDepartures("" // + final Matcher m = assertFineDepartures("" // + "\n" // + "S 1\n" // + "\n" // @@ -50,12 +50,14 @@ public class BahnProviderTest + "Gänserndorf\n" // + "
\n" // + "10:42Gl. 1"); + + assertNotNull(m.group(7)); // position } @Test public void departureWithOnTime() { - assertFineDepartures("" // + final Matcher m = assertFineDepartures("" // + "\n" // + "RE 38148\n" // + "\n" // @@ -63,12 +65,14 @@ public class BahnProviderTest + "Rathenow\n" // + "
\n" // + "21:58 pünktl., Gl. 13"); + + assertNotNull(m.group(7)); // position } @Test public void departureWithMessage() { - assertFineDepartures("" // + final Matcher m = assertFineDepartures("" // + "\n" // + "ICE 824\n" // + "\n" // @@ -76,12 +80,15 @@ public class BahnProviderTest + "Dortmund Hbf\n" // + "
\n" // + "07:02 ca. +5, Fährt heute nur bis Düsseldorf Hbf, Gl. 10"); + + assertNotNull(m.group(6)); // message + assertNotNull(m.group(7)); // position } @Test public void departureUpdatedPosition() { - assertFineDepartures("" // + final Matcher m = assertFineDepartures("" // + "\n" // + "RB 30240\n" // + "\n" // @@ -89,12 +96,14 @@ public class BahnProviderTest + "Holzkirchen\n" // + "
\n" // + "17:10 pünktl.heute Gl. 7 "); + + assertNotNull(m.group(7)); // position } @Test public void departureMessageAndUpdatedPosition() { - assertFineDepartures("" // + final Matcher m = assertFineDepartures("" // + "\n" // + "CNL 450\n" // + "\n" // @@ -102,12 +111,15 @@ public class BahnProviderTest + "Paris Est\n" // + "
\n" // + "19:57 pünktl., Änderung im Zuglauf!heute Gl. 7 "); + + assertNotNull(m.group(6)); // message + assertNotNull(m.group(7)); // position } @Test public void departureWithWeirdMessage() { - assertFineDepartures("" // + final Matcher m = assertFineDepartures("" // + "\n" // + "ICE 609\n" // + "\n" // @@ -115,6 +127,23 @@ public class BahnProviderTest + "Basel SBB\n" // + "
\n" // + "04:52 k.A., Gl. 3"); + + assertNotNull(m.group(7)); // position + } + + @Test + public void departureWithMultipleMessages() + { + 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(6)); // message } private void assertFineConnectionDetails(String s) @@ -125,16 +154,17 @@ public class BahnProviderTest // ParserUtils.printGroups(m); } - private void assertFineDepartures(String s) + private Matcher assertFineDepartures(String s) { Matcher m = BahnProvider.P_DEPARTURES_FINE.matcher(s); assertTrue(m.matches()); - // ParserUtils.printGroups(m); + ParserUtils.printGroups(m); assertNotNull(m.group(1)); // line assertNotNull(m.group(2)); // destination assertNotNull(m.group(3)); // time - assertNotNull(m.group(7)); // departure + + return m; } }