/*
* 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 SbbProviderTest
{
@Test
public void tripThatTriggeredLongRunningMatch()
{
assertFineConnectionDetails("
\n" //
+ " \n" //
+ " | \n" //
+ "\n" //
+ "Budapest-Keleti pu. | \n" //
+ "\n" //
+ "Di, 10.08.10\n" //
+ " | \n" //
+ "ab | 21:05 | \n" //
+ " | \n" //
+ "\n" //
+ " \n" //
+ "\n" //
+ "EN 462\n" //
+ "\n" //
+ " | \n" //
+ "\n" //
+ "\n" //
+ " \n" //
+ " \n" //
+ " \n" //
+ " \n" //
+ " \n" //
+ " | \n" //
+ "\n" //
+ "\n" //
+ " | \n" //
+ "\n" //
+ "München Hbf | \n" //
+ "\n" //
+ "Mi, 11.08.10\n" //
+ " | \n" //
+ "an | 06:15 | \n" //
+ "12 \n" //
+ " | \n");
}
@Test
public void tripWithoutDate()
{
assertFineConnectionDetails("\n" //
+ " \n" //
+ " | \n" //
+ "\n" //
+ "Aarau | \n" //
+ "\n" //
+ " | \n" //
+ "ab | 15:47 | \n" //
+ "5 \n" //
+ " | \n" //
+ "\n" //
+ " \n" //
+ "\n" //
+ "IR 1928\n" //
+ "\n" //
+ " | \n" //
+ "\n" //
+ "\n" //
+ " \n" //
+ "1.  \n" //
+ " \n" //
+ " \n" //
+ "2.  \n" //
+ " \n" //
+ " \n" //
+ " | \n" //
+ "\n" //
+ "\n" //
+ "\n" //
+ " | \n" //
+ "\n" //
+ "Bern | \n" //
+ "\n" //
+ " | \n" //
+ "an | 16:25 | \n" //
+ "10 \n" //
+ " | ");
}
@Test
public void tripWithPrognosisInPosition()
{
assertFineConnectionDetails("\n" //
+ "\n" //
+ " \n" //
+ " | \n" //
+ "\n" //
+ "Spiez | \n" //
+ "\n" //
+ " | \n" //
+ "ab | 15:54 | \n" //
+ "4 \n" //
+ " | \n" //
+ "\n" //
+ " \n" //
+ "\n" //
+ "IC 1080\n" //
+ "\n" //
+ " | \n" //
+ "\n" //
+ "\n" //
+ " \n" //
+ "1.  \n" //
+ " \n" //
+ " \n" //
+ "2.  \n" //
+ " \n" //
+ " \n" //
+ " | \n" //
+ "\n" //
+ "\n" //
+ " | \n" //
+ "\n" //
+ "Basel SBB | \n" //
+ "\n" //
+ " | \n" //
+ "an | 17:32 | \n" //
+ "\n" //
+ "12 \n" //
+ "\n" //
+ " | ");
}
@Test
public void footwayFromStationToStation()
{
assertFineConnectionDetails("\n" //
+ "\n" //
+ " \n" //
+ " | \n" //
+ "\n" //
+ "Amriswil, Bahnhof | \n" //
+ "\n" //
+ " | \n" //
+ " | | \n" //
+ " | \n" //
+ "\n" //
+ " \n" //
+ "Fussweg\n" //
+ " | \n" //
+ "\n" //
+ "\n" //
+ " \n" //
+ " \n" //
+ " \n" //
+ " \n" //
+ " \n" //
+ " | \n" //
+ "\n" //
+ "\n" //
+ "\n" //
+ " | \n" //
+ "\n" //
+ "Amriswil | \n" //
+ "\n" //
+ " | \n" //
+ " | | \n" //
+ " | \n");
}
@Test
public void footwayFromStationToAddress()
{
assertFineConnectionDetails("\n" //
+ "\n" //
+ " \n" //
+ " | \n" //
+ "\n" //
+ "Einsiedeln, Birchli/Garage | \n" //
+ "\n" //
+ " | \n" //
+ " | | \n" //
+ " | \n" //
+ "\n" //
+ " \n" //
+ "Fussweg\n" //
+ " | \n" //
+ "\n" //
+ "\n" //
+ " \n" //
+ " \n" //
+ " \n" //
+ " \n" //
+ " \n" //
+ " | \n" //
+ "\n" //
+ "\n" //
+ "\n" //
+ " | \n" //
+ "\n" //
+ "8840 Einsiedeln, Erlenmoosweg 24 | \n" //
+ "\n" //
+ " | \n" //
+ " | | \n" //
+ " | \n");
}
private void assertFineConnectionDetails(String s)
{
Matcher m = SbbProvider.P_CONNECTION_DETAILS_FINE.matcher(s);
assertTrue(m.matches());
// ParserUtils.printGroups(m);
assertNotNull(m.group(2)); // departure
assertTrue(m.group(5) == null || m.group(5).length() < 10); // departurePosition
assertNotNull(m.group(10)); // arrival
assertTrue(m.group(13) == null || m.group(13).length() < 10); // arrivalPosition
}
}