/*
* Copyright 2010 the original author or authors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package de.schildbach.pte;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
import java.util.regex.Matcher;
import org.junit.Test;
/**
* @author Andreas Schildbach
*/
public class BahnProviderTest
{
@Test
public void connectionUebergang()
{
assertFineConnectionDetails("" //
+ "Berlin Hbf
\n" //
+ "Übergang\n" //
+ "
\n" //
+ "Berlin-Lichtenberg
");
}
@Test
public void departureWithPlatform()
{
final Matcher m = assertFineDepartures("" //
+ "\n" //
+ "S 1\n" //
+ "\n" //
+ ">>\n" //
+ "Gänserndorf\n" //
+ "
\n" //
+ "10:42Gl. 1");
assertNotNull(m.group(7)); // 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(4)); // onTime
assertNotNull(m.group(7)); // 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(5)); // delay
assertNotNull(m.group(6)); // message
assertNotNull(m.group(7)); // 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(4)); // onTime
assertNotNull(m.group(7)); // 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(4)); // onTime
assertNotNull(m.group(6)); // message
assertNotNull(m.group(7)); // 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(7)); // 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(4)); // onTime
assertNotNull(m.group(7)); // 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(6)); // 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(6)); // message
assertNotNull(m.group(7)); // 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(4)); // onTime
assertNotNull(m.group(6)); // message
assertNotNull(m.group(7)); // position
}
private void assertFineConnectionDetails(String s)
{
Matcher m = BahnProvider.P_CONNECTION_DETAILS_FINE.matcher(s);
assertTrue(m.matches());
// ParserUtils.printGroups(m);
}
private Matcher assertFineDepartures(String s)
{
Matcher m = BahnProvider.P_DEPARTURES_FINE.matcher(s);
assertTrue(m.matches());
// ParserUtils.printGroups(m);
assertNotNull(m.group(1)); // line
assertNotNull(m.group(2)); // destination
assertNotNull(m.group(3)); // time
return m;
}
}