/** * Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onebusaway.transit_data_federation.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.block; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.blockConfiguration; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.date; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.dateAsLong; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.getTimeAsDay; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.linkBlockTrips; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.lsid; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.lsids; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.serviceIds; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.stop; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.stopTime; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.time; import static org.onebusaway.transit_data_federation.testing.UnitTestingSupport.trip; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.onebusaway.collections.tuple.Pair; import org.onebusaway.collections.tuple.Tuples; import org.onebusaway.gtfs.impl.calendar.CalendarServiceImpl; import org.onebusaway.gtfs.model.AgencyAndId; import org.onebusaway.gtfs.model.calendar.CalendarServiceData; import org.onebusaway.transit_data_federation.impl.blocks.BlockIndexFactoryServiceImpl; import org.onebusaway.transit_data_federation.impl.blocks.BlockSequence; import org.onebusaway.transit_data_federation.impl.transit_graph.FrequencyEntryImpl; import org.onebusaway.transit_data_federation.impl.transit_graph.StopEntryImpl; import org.onebusaway.transit_data_federation.impl.transit_graph.StopTimeEntryImpl; import org.onebusaway.transit_data_federation.impl.transit_graph.TripEntryImpl; import org.onebusaway.transit_data_federation.services.blocks.BlockIndexService; import org.onebusaway.transit_data_federation.services.blocks.BlockSequenceIndex; import org.onebusaway.transit_data_federation.services.blocks.BlockStopSequenceIndex; import org.onebusaway.transit_data_federation.services.blocks.BlockStopTimeIndex; import org.onebusaway.transit_data_federation.services.blocks.BlockTripIndex; import org.onebusaway.transit_data_federation.services.blocks.FrequencyBlockTripIndex; import org.onebusaway.transit_data_federation.services.blocks.FrequencyStopTripIndex; import org.onebusaway.transit_data_federation.services.transit_graph.BlockConfigurationEntry; import org.onebusaway.transit_data_federation.services.transit_graph.BlockStopTimeEntry; import org.onebusaway.transit_data_federation.services.transit_graph.BlockTripEntry; import org.onebusaway.transit_data_federation.services.transit_graph.FrequencyEntry; import org.onebusaway.transit_data_federation.services.transit_graph.TransitGraphDao; import org.onebusaway.transit_data_federation.services.tripplanner.StopTimeInstance; public class StopTimeServiceImplTest { private BlockIndexFactoryServiceImpl _factory; private StopTimeServiceImpl _service; private ExtendedCalendarServiceImpl _calendarService; private BlockIndexService _blockIndexService; private AgencyAndId _stopId; private StopEntryImpl _stop; private TransitGraphDao _transitGraphDao; private boolean includePrivateService = false; @Before public void setup() { _factory = new BlockIndexFactoryServiceImpl(); _stop = stop("stopId", 47.0, -122.0); _stopId = _stop.getId(); TransitGraphDao graph = Mockito.mock(TransitGraphDao.class); Mockito.when(graph.getStopEntryForId(_stop.getId(), true)).thenReturn(_stop); CalendarServiceData data = new CalendarServiceData(); data.putDatesForLocalizedServiceId(lsid("sA"), Arrays.asList(date("2009-09-01 00:00"), date("2009-09-02 00:00"))); data.putDatesForLocalizedServiceId(lsid("sB"), Arrays.asList(date("2009-09-03 00:00"))); CalendarServiceImpl calendarService = new CalendarServiceImpl(); calendarService.setData(data); _calendarService = new ExtendedCalendarServiceImpl(); _calendarService.setCalendarService(calendarService); _blockIndexService = Mockito.mock(BlockIndexService.class); _service = new StopTimeServiceImpl(); _service.setTransitGraphDao(graph); _service.setCalendarService(_calendarService); _service.setBlockIndexService(_blockIndexService); BlockConfigurationEntry bcA = blockConfiguration(block("bA"), serviceIds(lsids("sA"), lsids())); BlockConfigurationEntry bcB = blockConfiguration(block("bB"), serviceIds(lsids("sB"), lsids())); _transitGraphDao = Mockito.mock(TransitGraphDao.class); Mockito.when(_transitGraphDao.getAllBlocks()).thenReturn( Arrays.asList(bcA.getBlock(), bcB.getBlock())); _calendarService.setTransitGraphDao(_transitGraphDao); _calendarService.start(); } @Test public void test01() { Date from = date("2009-09-01 10:00"); Date to = date("2009-09-01 10:30"); Date day = getTimeAsDay(from); StopTimeEntryImpl stA = stopTime(0, _stop, trip("A", "sA"), time(9, 50), 0); StopTimeEntryImpl stB = stopTime(1, _stop, trip("B", "sA"), time(10, 10), 0); StopTimeEntryImpl stC = stopTime(2, _stop, trip("C", "sA"), time(10, 20), 0); StopTimeEntryImpl stD = stopTime(3, _stop, trip("D", "sA"), time(10, 40), 0); BlockConfigurationEntry bA = linkBlockTrips("bA", stA.getTrip()); BlockConfigurationEntry bB = linkBlockTrips("bB", stB.getTrip()); BlockConfigurationEntry bC = linkBlockTrips("bC", stC.getTrip()); BlockConfigurationEntry bD = linkBlockTrips("bD", stD.getTrip()); addFirstStopToBlockIndex(bA, bB, bC, bD); List<StopTimeInstance> results = _service.getStopTimeInstancesInTimeRange( _stopId, from, to); sort(results); assertEquals(2, results.size()); StopTimeInstance sti = results.get(0); assertEquals(day.getTime(), sti.getServiceDate()); assertEquals(dateAsLong("2009-09-01 10:10"), sti.getArrivalTime()); assertEquals(dateAsLong("2009-09-01 10:10"), sti.getDepartureTime()); sti = results.get(1); assertEquals(day.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-01 10:20").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-01 10:20").getTime(), sti.getDepartureTime()); from = date("2009-09-01 10:15"); to = date("2009-09-01 10:25"); results = _service.getStopTimeInstancesInTimeRange(_stopId, from, to); sort(results); assertEquals(1, results.size()); sti = results.get(0); assertEquals(day.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-01 10:20").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-01 10:20").getTime(), sti.getDepartureTime()); from = date("2009-09-01 10:21"); to = date("2009-09-01 10:25"); results = _service.getStopTimeInstancesInTimeRange(_stopId, from, to); assertEquals(0, results.size()); } @Test public void test02() { Date dayA = getTimeAsDay(date("2009-09-01 00:00")); Date dayB = getTimeAsDay(date("2009-09-02 00:00")); // 10:00am, 10:30am StopTimeEntryImpl stA = stopTime(0, _stop, trip("A", "sA"), time(10, 00), time(10, 30), 0); // 01:00am, 01:30am (both on next day) StopTimeEntryImpl stB = stopTime(1, _stop, trip("B", "sA"), time(25, 00), time(25, 30), 0); BlockConfigurationEntry bA = linkBlockTrips("bA", stA.getTrip()); BlockConfigurationEntry bB = linkBlockTrips("bB", stB.getTrip()); addFirstStopToBlockIndex(bA, bB); /**** * ****/ Date from = date("2009-09-01 10:10"); Date to = date("2009-09-01 10:40"); List<StopTimeInstance> results = _service.getStopTimeInstancesInTimeRange( _stopId, from, to); sort(results); assertEquals(1, results.size()); StopTimeInstance sti = results.get(0); assertEquals(dayA.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-01 10:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-01 10:30").getTime(), sti.getDepartureTime()); /**** * ****/ from = date("2009-09-02 10:10"); to = date("2009-09-02 10:40"); results = _service.getStopTimeInstancesInTimeRange(_stopId, from, to); sort(results); assertEquals(1, results.size()); sti = results.get(0); assertEquals(dayB.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-02 10:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-02 10:30").getTime(), sti.getDepartureTime()); /**** * ****/ from = date("2009-09-01 10:10"); to = date("2009-09-02 10:40"); results = _service.getStopTimeInstancesInTimeRange(_stopId, from, to); sort(results); assertEquals(3, results.size()); sti = results.get(0); assertEquals(dayA.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-01 10:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-01 10:30").getTime(), sti.getDepartureTime()); sti = results.get(1); assertEquals(dayA.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-02 01:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-02 01:30").getTime(), sti.getDepartureTime()); sti = results.get(2); assertEquals(dayB.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-02 10:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-02 10:30").getTime(), sti.getDepartureTime()); /**** * ****/ from = date("2009-09-01 12:00"); to = date("2009-09-02 12:00"); results = _service.getStopTimeInstancesInTimeRange(_stopId, from, to); sort(results); assertEquals(2, results.size()); sti = results.get(0); assertEquals(dayA.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-02 01:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-02 01:30").getTime(), sti.getDepartureTime()); sti = results.get(1); assertEquals(dayB.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-02 10:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-02 10:30").getTime(), sti.getDepartureTime()); /**** * ****/ from = date("2009-09-02 12:00"); to = date("2009-09-03 12:00"); results = _service.getStopTimeInstancesInTimeRange(_stopId, from, to); sort(results); assertEquals(1, results.size()); sti = results.get(0); assertEquals(dayB.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-03 01:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-03 01:30").getTime(), sti.getDepartureTime()); } @Test public void test03() { Date dayA = getTimeAsDay(date("2009-09-02 00:00")); Date dayB = getTimeAsDay(date("2009-09-03 00:00")); StopTimeEntryImpl stA = stopTime(0, _stop, trip("A", "sA"), time(10, 00), time(10, 30), 0); StopTimeEntryImpl stB = stopTime(1, _stop, trip("B", "sA"), time(25, 0), time(25, 30), 0); StopTimeEntryImpl stC = stopTime(2, _stop, trip("C", "sB"), time(10, 00), time(10, 30), 0); StopTimeEntryImpl stD = stopTime(3, _stop, trip("D", "sB"), time(25, 0), time(25, 30), 0); BlockConfigurationEntry bA = linkBlockTrips("bA", stA.getTrip()); BlockConfigurationEntry bB = linkBlockTrips("bB", stB.getTrip()); BlockConfigurationEntry bC = linkBlockTrips("bC", stC.getTrip()); BlockConfigurationEntry bD = linkBlockTrips("bD", stD.getTrip()); addFirstStopToBlockIndex(bA, bB); addFirstStopToBlockIndex(bC, bD); /**** * ****/ Date from = date("2009-09-02 10:10"); Date to = date("2009-09-02 10:40"); List<StopTimeInstance> results = _service.getStopTimeInstancesInTimeRange( _stopId, from, to); sort(results); assertEquals(1, results.size()); StopTimeInstance sti = results.get(0); assertEquals(dayA.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-02 10:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-02 10:30").getTime(), sti.getDepartureTime()); /**** * ****/ from = date("2009-09-03 10:10"); to = date("2009-09-03 10:40"); results = _service.getStopTimeInstancesInTimeRange(_stopId, from, to); sort(results); assertEquals(1, results.size()); sti = results.get(0); assertEquals(dayB.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-03 10:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-03 10:30").getTime(), sti.getDepartureTime()); /**** * ****/ from = date("2009-09-02 10:10"); to = date("2009-09-03 10:40"); results = _service.getStopTimeInstancesInTimeRange(_stopId, from, to); sort(results); assertEquals(3, results.size()); sti = results.get(0); assertEquals(dayA.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-02 10:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-02 10:30").getTime(), sti.getDepartureTime()); sti = results.get(1); assertEquals(dayA.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-03 01:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-03 01:30").getTime(), sti.getDepartureTime()); sti = results.get(2); assertEquals(dayB.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-03 10:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-03 10:30").getTime(), sti.getDepartureTime()); /**** * ****/ from = date("2009-09-02 12:00"); to = date("2009-09-03 12:00"); results = _service.getStopTimeInstancesInTimeRange(_stopId, from, to); sort(results); assertEquals(2, results.size()); sti = results.get(0); assertEquals(dayA.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-03 01:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-03 01:30").getTime(), sti.getDepartureTime()); sti = results.get(1); assertEquals(dayB.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-03 10:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-03 10:30").getTime(), sti.getDepartureTime()); /**** * ****/ from = date("2009-09-03 12:00"); to = date("2009-09-04 12:00"); results = _service.getStopTimeInstancesInTimeRange(_stopId, from, to); sort(results); assertEquals(1, results.size()); sti = results.get(0); assertEquals(dayB.getTime(), sti.getServiceDate()); assertEquals(date("2009-09-04 01:00").getTime(), sti.getArrivalTime()); assertEquals(date("2009-09-04 01:30").getTime(), sti.getDepartureTime()); } @Test public void test04() { StopEntryImpl fromStop = stop("stopA", 47.0, -122.0); StopEntryImpl toStop = stop("stopB", 47.0, -122.0); TripEntryImpl trip1A = trip("1A", "sA"); TripEntryImpl trip1B = trip("1B", "sA"); TripEntryImpl trip1C = trip("1C", "sA"); TripEntryImpl trip1D = trip("1D", "sA"); stopTime(0, fromStop, trip1A, time(10, 00), time(10, 05), 0.0); stopTime(1, fromStop, trip1B, time(10, 10), time(10, 15), 0.0); stopTime(2, fromStop, trip1C, time(10, 20), time(10, 25), 0.0); stopTime(3, fromStop, trip1D, time(10, 30), time(10, 35), 0.0); stopTime(4, toStop, trip1A, time(10, 10), time(10, 15), 0.0); stopTime(5, toStop, trip1B, time(10, 20), time(10, 25), 0.0); stopTime(6, toStop, trip1C, time(10, 30), time(10, 35), 0.0); stopTime(7, toStop, trip1D, time(10, 40), time(10, 45), 0.0); BlockConfigurationEntry b1A = linkBlockTrips("b1A", trip1A); BlockConfigurationEntry b1B = linkBlockTrips("b1B", trip1B); BlockConfigurationEntry b1C = linkBlockTrips("b1C", trip1C); BlockConfigurationEntry b1D = linkBlockTrips("b1D", trip1D); BlockSequenceIndex index1 = createBlockSequenceIndex(b1A, b1B, b1C, b1D); BlockStopSequenceIndex fromIndex1 = new BlockStopSequenceIndex(index1, 0); BlockStopSequenceIndex toIndex1 = new BlockStopSequenceIndex(index1, 1); Pair<BlockStopSequenceIndex> indexPair1 = Tuples.pair(fromIndex1, toIndex1); TripEntryImpl trip2A = trip("2A", "sA"); TripEntryImpl trip2B = trip("2B", "sA"); TripEntryImpl trip2C = trip("2C", "sA"); TripEntryImpl trip2D = trip("2D", "sA"); stopTime(0, fromStop, trip2A, time(10, 07), time(10, 07), 0.0); stopTime(1, fromStop, trip2B, time(10, 17), time(10, 17), 0.0); stopTime(2, fromStop, trip2C, time(10, 27), time(10, 27), 0.0); stopTime(3, fromStop, trip2D, time(10, 37), time(10, 37), 0.0); stopTime(4, toStop, trip2A, time(10, 17), time(10, 17), 0.0); stopTime(5, toStop, trip2B, time(10, 27), time(10, 27), 0.0); stopTime(6, toStop, trip2C, time(10, 37), time(10, 37), 0.0); stopTime(7, toStop, trip2D, time(10, 47), time(10, 47), 0.0); BlockConfigurationEntry b2A = linkBlockTrips("bA", trip2A); BlockConfigurationEntry b2B = linkBlockTrips("bB", trip2B); BlockConfigurationEntry b2C = linkBlockTrips("bC", trip2C); BlockConfigurationEntry b2D = linkBlockTrips("bD", trip2D); BlockSequenceIndex index2 = createBlockSequenceIndex(b2A, b2B, b2C, b2D); BlockStopSequenceIndex fromIndex2 = new BlockStopSequenceIndex(index2, 0); BlockStopSequenceIndex toIndex2 = new BlockStopSequenceIndex(index2, 1); Pair<BlockStopSequenceIndex> indexPair2 = Tuples.pair(fromIndex2, toIndex2); List<Pair<BlockStopSequenceIndex>> indices = new ArrayList<Pair<BlockStopSequenceIndex>>(); indices.add(indexPair1); indices.add(indexPair2); Mockito.when( _blockIndexService.getBlockSequenceIndicesBetweenStops(fromStop, toStop)).thenReturn( indices); TripEntryImpl tripF = trip("freq", "sA"); stopTime(0, fromStop, tripF, time(10, 00), time(10, 00), 0.0); stopTime(4, toStop, tripF, time(10, 05), time(10, 05), 0.0); FrequencyEntry frequency = new FrequencyEntryImpl(time(10, 30), time(11, 30), 10 * 60); List<FrequencyEntry> frequencies = Arrays.asList(frequency); BlockConfigurationEntry bcFreq = linkBlockTrips(block("bFreq"), frequencies, tripF); FrequencyBlockTripIndex freqIndex = _factory.createFrequencyIndexForTrips( bcFreq.getTrips(), frequencies); FrequencyStopTripIndex freqFromIndex = new FrequencyStopTripIndex( freqIndex, 0); FrequencyStopTripIndex freqToIndex = new FrequencyStopTripIndex(freqIndex, 1); Pair<FrequencyStopTripIndex> freqIndexPair = Tuples.pair(freqFromIndex, freqToIndex); List<Pair<FrequencyStopTripIndex>> frequencyIndices = new ArrayList<Pair<FrequencyStopTripIndex>>(); frequencyIndices.add(freqIndexPair); Mockito.when( _blockIndexService.getFrequencyIndicesBetweenStops(fromStop, toStop)).thenReturn( frequencyIndices); /**** * ****/ Date time = date("2009-09-01 08:00"); List<Pair<StopTimeInstance>> instances = _service.getNextDeparturesBetweenStopPair( fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(3, instances.size()); Pair<StopTimeInstance> pair = instances.get(0); assertSame(fromStop, pair.getFirst().getStop()); assertSame(toStop, pair.getSecond().getStop()); assertEquals(dateAsLong("2009-09-01 00:00"), pair.getFirst().getServiceDate()); assertEquals(b1A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1A.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(1); assertEquals(b2A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2A.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(2); assertEquals(b1B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1B.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-01 08:00"); instances = _service.getNextDeparturesBetweenStopPair(fromStop, toStop, time, 10 * 60, 0, 3, includePrivateService); assertEquals(5, instances.size()); pair = instances.get(0); assertEquals(b1A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1A.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(1); assertEquals(b2A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2A.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(2); assertEquals(b1B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1B.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(3); assertEquals(b2B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2B.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(4); assertEquals(b1C.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1C.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-01 10:06"); instances = _service.getNextDeparturesBetweenStopPair(fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(3, instances.size()); pair = instances.get(0); assertEquals(b2A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2A.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(1); assertEquals(b1B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1B.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(2); assertEquals(b2B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2B.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-01 10:06"); instances = _service.getNextDeparturesBetweenStopPair(fromStop, toStop, time, 10 * 60, 5 * 60, 3, includePrivateService); assertEquals(8, instances.size()); pair = instances.get(0); assertEquals(b1A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1A.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(1); assertEquals(b2A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2A.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(2); assertEquals(b1B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1B.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(3); assertEquals(b2B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2B.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(4); assertEquals(b1C.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1C.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(5); assertEquals(b2C.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2C.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(6); assertEquals(bcFreq.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(bcFreq.getStopTimes().get(1), pair.getSecond().getStopTime()); assertEquals(dateAsLong("2009-09-01 10:30"), pair.getFirst().getDepartureTime()); assertEquals(dateAsLong("2009-09-01 10:35"), pair.getSecond().getDepartureTime()); pair = instances.get(7); assertEquals(b1D.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1D.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-02 10:06"); instances = _service.getNextDeparturesBetweenStopPair(fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(3, instances.size()); pair = instances.get(0); assertEquals(dateAsLong("2009-09-02 00:00"), pair.getFirst().getServiceDate()); assertEquals(b2A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2A.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(1); assertEquals(b1B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1B.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(2); assertEquals(b2B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2B.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-02 10:29"); instances = _service.getNextDeparturesBetweenStopPair(fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(3, instances.size()); pair = instances.get(0); assertEquals(bcFreq.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(bcFreq.getStopTimes().get(1), pair.getSecond().getStopTime()); assertEquals(dateAsLong("2009-09-02 10:30"), pair.getFirst().getDepartureTime()); assertEquals(dateAsLong("2009-09-02 10:35"), pair.getSecond().getDepartureTime()); pair = instances.get(1); assertEquals(b1D.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1D.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(2); assertEquals(b2D.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2D.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-02 10:40"); instances = _service.getNextDeparturesBetweenStopPair(fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(1, instances.size()); pair = instances.get(0); assertEquals(bcFreq.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(bcFreq.getStopTimes().get(1), pair.getSecond().getStopTime()); assertEquals(dateAsLong("2009-09-02 10:40"), pair.getFirst().getDepartureTime()); assertEquals(dateAsLong("2009-09-02 10:45"), pair.getSecond().getDepartureTime()); /**** * ****/ time = date("2009-09-02 11:40"); instances = _service.getNextDeparturesBetweenStopPair(fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(0, instances.size()); /**** * ****/ time = date("2009-09-02 10:50"); instances = _service.getPreviousArrivalsBetweenStopPair(fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(3, instances.size()); pair = instances.get(0); assertEquals(b2D.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2D.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(1); assertEquals(bcFreq.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(bcFreq.getStopTimes().get(1), pair.getSecond().getStopTime()); assertEquals(dateAsLong("2009-09-02 10:40"), pair.getFirst().getDepartureTime()); assertEquals(dateAsLong("2009-09-02 10:45"), pair.getSecond().getDepartureTime()); pair = instances.get(2); assertEquals(b1D.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1D.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-02 10:46"); instances = _service.getPreviousArrivalsBetweenStopPair(fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(3, instances.size()); pair = instances.get(0); assertEquals(bcFreq.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(bcFreq.getStopTimes().get(1), pair.getSecond().getStopTime()); assertEquals(dateAsLong("2009-09-02 10:40"), pair.getFirst().getDepartureTime()); assertEquals(dateAsLong("2009-09-02 10:45"), pair.getSecond().getDepartureTime()); pair = instances.get(1); assertEquals(b1D.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1D.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(2); assertEquals(b2C.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2C.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-02 10:40"); instances = _service.getPreviousArrivalsBetweenStopPair(fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(3, instances.size()); pair = instances.get(0); assertEquals(b2C.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2C.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(1); assertEquals(bcFreq.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(bcFreq.getStopTimes().get(1), pair.getSecond().getStopTime()); assertEquals(dateAsLong("2009-09-02 10:30"), pair.getFirst().getDepartureTime()); assertEquals(dateAsLong("2009-09-02 10:35"), pair.getSecond().getDepartureTime()); pair = instances.get(2); assertEquals(b1C.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1C.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-01 10:18"); instances = _service.getPreviousArrivalsBetweenStopPair(fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(2, instances.size()); pair = instances.get(0); assertEquals(b2A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2A.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(1); assertEquals(b1A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1A.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-01 10:28"); instances = _service.getPreviousArrivalsBetweenStopPair(fromStop, toStop, time, 5 * 60, 5 * 60, 3, includePrivateService); assertEquals(5, instances.size()); pair = instances.get(0); assertEquals(b1C.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1C.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(1); assertEquals(b2B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2B.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(2); assertEquals(b1B.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1B.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(3); assertEquals(b2A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b2A.getStopTimes().get(1), pair.getSecond().getStopTime()); pair = instances.get(4); assertEquals(b1A.getStopTimes().get(0), pair.getFirst().getStopTime()); assertEquals(b1A.getStopTimes().get(1), pair.getSecond().getStopTime()); /**** * ****/ time = date("2009-09-01 09:00"); instances = _service.getPreviousArrivalsBetweenStopPair(fromStop, toStop, time, 0, 0, 3, includePrivateService); assertEquals(0, instances.size()); } /**** * Private Methods ****/ private void addFirstStopToBlockIndex(BlockConfigurationEntry... blocks) { List<BlockTripEntry> trips = new ArrayList<BlockTripEntry>(); for (BlockConfigurationEntry blockConfig : blocks) { trips.add(blockConfig.getTrips().get(0)); } BlockTripIndex blockIndex = _factory.createTripIndexForGroupOfBlockTrips(trips); BlockStopTimeIndex index = BlockStopTimeIndex.create(blockIndex, 0); _stop.addStopTimeIndex(index); Mockito.when(_blockIndexService.getStopTimeIndicesForStop(_stop)).thenReturn( _stop.getStopTimeIndices()); } private BlockSequenceIndex createBlockSequenceIndex( BlockConfigurationEntry... blocks) { List<BlockStopTimeEntry> stopTimes = blocks[0].getStopTimes(); List<BlockSequence> sequences = new ArrayList<BlockSequence>(); for (BlockConfigurationEntry blockConfig : blocks) { BlockSequence sequence = new BlockSequence(blockConfig, 0, stopTimes.size()); sequences.add(sequence); } return _factory.createSequenceIndexForGroupOfBlockSequences(sequences); } private void sort(List<StopTimeInstance> stopTimes) { Collections.sort(stopTimes, new StopTimeInstanceComparator()); } private static class StopTimeInstanceComparator implements Comparator<StopTimeInstance> { public int compare(StopTimeInstance o1, StopTimeInstance o2) { return (int) (o1.getArrivalTime() - o2.getArrivalTime()); } } }