{
public static final TimePenalty ZERO = new TimePenalty(Duration.ZERO, 0.0);
+ /**
+ * An instance that doesn't actually apply a penalty and returns the duration unchanged.
+ */
public static final TimePenalty NONE = new TimePenalty(Duration.ZERO, 1.0);
private TimePenalty(Duration constant, double coefficient) {
diff --git a/src/main/java/org/opentripplanner/transit/model/timetable/TripTimesStringBuilder.java b/src/main/java/org/opentripplanner/transit/model/timetable/TripTimesStringBuilder.java
new file mode 100644
index 00000000000..a5e77037dea
--- /dev/null
+++ b/src/main/java/org/opentripplanner/transit/model/timetable/TripTimesStringBuilder.java
@@ -0,0 +1,64 @@
+package org.opentripplanner.transit.model.timetable;
+
+import java.util.ArrayList;
+import org.opentripplanner.framework.time.TimeUtils;
+import org.opentripplanner.transit.model.network.TripPattern;
+
+public class TripTimesStringBuilder {
+
+ /**
+ * This encodes the trip times and information about stops in a readable way in order to simplify
+ * testing/debugging. The format of the outputput string is:
+ *
+ *
+ * REALTIME_STATE | stop1 [FLAGS] arrivalTime departureTime | stop2 ...
+ *
+ * Where flags are:
+ * C: Canceled
+ * R: Recorded
+ * PI: Prediction Inaccurate
+ * ND: No Data
+ *
+ *
+ * @throws IllegalStateException if TripTimes does not match the TripPattern
+ */
+ public static String encodeTripTimes(TripTimes tripTimes, TripPattern pattern) {
+ var stops = pattern.getStops();
+
+ if (tripTimes.getNumStops() != stops.size()) {
+ throw new IllegalArgumentException(
+ "TripTimes and TripPattern have different number of stops"
+ );
+ }
+
+ StringBuilder s = new StringBuilder(tripTimes.getRealTimeState().toString());
+ for (int i = 0; i < tripTimes.getNumStops(); i++) {
+ var depart = tripTimes.getDepartureTime(i);
+ var arrive = tripTimes.getArrivalTime(i);
+ var flags = new ArrayList();
+ if (tripTimes.isCancelledStop(i)) {
+ flags.add("C");
+ }
+ if (tripTimes.isRecordedStop(i)) {
+ flags.add("R");
+ }
+ if (tripTimes.isPredictionInaccurate(i)) {
+ flags.add("PI");
+ }
+ if (tripTimes.isNoDataStop(i)) {
+ flags.add("ND");
+ }
+
+ s.append(" | ").append(stops.get(i).getName());
+ if (!flags.isEmpty()) {
+ s.append(" [").append(String.join(",", flags)).append("]");
+ }
+ s
+ .append(" ")
+ .append(TimeUtils.timeToStrCompact(arrive))
+ .append(" ")
+ .append(TimeUtils.timeToStrCompact(depart));
+ }
+ return s.toString();
+ }
+}
diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls
index 0f863393d87..393d5f014db 100644
--- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls
+++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls
@@ -974,6 +974,18 @@ type fareComponent {
routes: [Route] @deprecated
}
+
+"""
+Feed publisher information
+"""
+type FeedPublisher {
+ """Name of feed publisher"""
+ name: String!
+
+ """Web address of feed publisher"""
+ url: String!
+}
+
"""
A feed provides routing data (stops, routes, timetables, etc.) from one or more public transport agencies.
"""
@@ -984,6 +996,9 @@ type Feed {
"""List of agencies which provide data to this feed"""
agencies: [Agency]
+ "The publisher of the input transit data."
+ publisher: FeedPublisher
+
"""
Alerts relevant for the feed.
"""
diff --git a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java
index fcc59af845f..614c8778c6b 100644
--- a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java
+++ b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java
@@ -43,6 +43,7 @@
import org.opentripplanner.framework.i18n.I18NString;
import org.opentripplanner.framework.i18n.NonLocalizedString;
import org.opentripplanner.framework.model.Grams;
+import org.opentripplanner.model.FeedInfo;
import org.opentripplanner.model.fare.FareMedium;
import org.opentripplanner.model.fare.FareProduct;
import org.opentripplanner.model.fare.ItineraryFares;
@@ -84,6 +85,7 @@
import org.opentripplanner.transit.model.framework.FeedScopedId;
import org.opentripplanner.transit.model.network.BikeAccess;
import org.opentripplanner.transit.model.network.TripPattern;
+import org.opentripplanner.transit.model.organization.Agency;
import org.opentripplanner.transit.model.site.RegularStop;
import org.opentripplanner.transit.model.site.StopLocation;
import org.opentripplanner.transit.model.timetable.RealTimeTripTimes;
@@ -151,6 +153,18 @@ static void setup() {
transitModel.addTripPattern(id("pattern-1"), pattern);
+ var feedId = "testfeed";
+ var feedInfo = FeedInfo.dummyForTest(feedId);
+ transitModel.addFeedInfo(feedInfo);
+
+ var agency = Agency
+ .of(new FeedScopedId(feedId, "agency-xx"))
+ .withName("speedtransit")
+ .withUrl("www.otp-foo.bar")
+ .withTimezone("Europe/Berlin")
+ .build();
+ transitModel.addAgency(agency);
+
transitModel.initTimeZone(ZoneIds.BERLIN);
transitModel.index();
var routes = Arrays
diff --git a/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java b/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java
index 6e72d5626c5..33dce1f5574 100644
--- a/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java
+++ b/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java
@@ -56,5 +56,11 @@ void distinctByKey() {
assertEquals(List.of(first, third), deduplicated);
}
+ @Test
+ void ofNullable() {
+ assertEquals(List.of(), ListUtils.ofNullable(null));
+ assertEquals(List.of("A"), ListUtils.ofNullable("A"));
+ }
+
private record Wrapper(int i, String string) {}
}
diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java
index f24e405515d..964c3d8155e 100644
--- a/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java
+++ b/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java
@@ -111,14 +111,14 @@ void testMapCache() throws Exception {
}
@Test
- void noFlexDurationModifier() {
+ void noFlexTimePenalty() {
var mapper = defaultTripMapper();
mapper.map(TRIP);
- assertTrue(mapper.flexSafeDurationModifiers().isEmpty());
+ assertTrue(mapper.flexSafeTimePenalties().isEmpty());
}
@Test
- void flexDurationModifier() {
+ void flexTimePenalty() {
var flexTrip = new Trip();
flexTrip.setId(new AgencyAndId("1", "1"));
flexTrip.setSafeDurationFactor(1.5);
@@ -126,8 +126,8 @@ void flexDurationModifier() {
flexTrip.setRoute(new GtfsTestData().route);
var mapper = defaultTripMapper();
var mapped = mapper.map(flexTrip);
- var mod = mapper.flexSafeDurationModifiers().get(mapped);
- assertEquals(1.5f, mod.coefficient());
- assertEquals(600, mod.constant().toSeconds());
+ var penalty = mapper.flexSafeTimePenalties().get(mapped);
+ assertEquals(1.5f, penalty.coefficient());
+ assertEquals(600, penalty.constant().toSeconds());
}
}
diff --git a/src/test/java/org/opentripplanner/mmri/AllModesAndAgenciesTest.java b/src/test/java/org/opentripplanner/mmri/AllModesAndAgenciesTest.java
deleted file mode 100644
index f4e0a42fe83..00000000000
--- a/src/test/java/org/opentripplanner/mmri/AllModesAndAgenciesTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.opentripplanner.mmri;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.opentripplanner.GtfsTest;
-import org.opentripplanner.model.plan.Itinerary;
-import org.opentripplanner.model.plan.Leg;
-
-@Disabled("Requires stop-to-stop transfers without street network")
-public class AllModesAndAgenciesTest extends GtfsTest {
-
- @Override
- public final String getFeedName() {
- return "mmri/1a";
- }
-
- @Test
- public void test1a1() {
- Itinerary itinerary = plan(+1388530800L, "1a1", "1a6", null, false, false, null, "", "", 5);
-
- Leg[] legs = itinerary.getLegs().toArray(new Leg[5]);
-
- validateLeg(legs[0], 1388530860000L, 1388530920000L, "1a2", "1a1", null);
- validateLeg(legs[2], 1388530980000L, 1388531040000L, "1a4", "1a3", null);
- validateLeg(legs[4], 1388531100000L, 1388531160000L, "1a6", "1a5", null);
-
- assertEquals("", itinerary.toStr());
- }
-}
diff --git a/src/test/java/org/opentripplanner/mmri/ExcludedStopsTest.java b/src/test/java/org/opentripplanner/mmri/ExcludedStopsTest.java
deleted file mode 100644
index 4fe48f2c123..00000000000
--- a/src/test/java/org/opentripplanner/mmri/ExcludedStopsTest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.opentripplanner.mmri;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.opentripplanner.GtfsTest;
-import org.opentripplanner.model.plan.Itinerary;
-import org.opentripplanner.model.plan.Leg;
-
-@Disabled("Requires stop banning")
-public class ExcludedStopsTest extends GtfsTest {
-
- @Override
- public final String getFeedName() {
- return "mmri/3f";
- }
-
- @Test
- public void test3f1() {
- Itinerary itinerary = plan(+1388530860L, "3f1", "3f3", null, false, false, null, "", "3f2", 1);
-
- Leg leg = itinerary.getLegs().toArray(new Leg[1])[0];
-
- validateLeg(leg, 1388530860000L, 1388531040000L, "3f3", "3f1", null);
-
- assertEquals("", itinerary.toStr());
- }
-}
diff --git a/src/test/java/org/opentripplanner/mmri/OnTripTest.java b/src/test/java/org/opentripplanner/mmri/OnTripTest.java
deleted file mode 100644
index 2b0e574f352..00000000000
--- a/src/test/java/org/opentripplanner/mmri/OnTripTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.opentripplanner.mmri;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.opentripplanner.GtfsTest;
-import org.opentripplanner.model.plan.Itinerary;
-import org.opentripplanner.model.plan.Leg;
-
-@Disabled("Requires departing onboard trip")
-public class OnTripTest extends GtfsTest {
-
- @Override
- public final String getFeedName() {
- return "mmri/2f";
- }
-
- @Test
- public void test2f1() {
- Itinerary itinerary = plan(
- +1388530920L,
- null,
- "2f2",
- "2f|intercity",
- false,
- false,
- null,
- "",
- "",
- 2
- );
-
- Leg[] legs = itinerary.getLegs().toArray(new Leg[2]);
-
- validateLeg(legs[0], 1388530920000L, 1388531040000L, "2f3", null, null);
- validateLeg(legs[1], 1388531160000L, 1388531340000L, "2f2", "2f3", null);
-
- assertEquals("", itinerary.toStr());
- }
-}
diff --git a/src/test/java/org/opentripplanner/mmri/PlannerstackScenarioTest.java b/src/test/java/org/opentripplanner/mmri/PlannerstackScenarioTest.java
deleted file mode 100644
index 1e0ac9b96f2..00000000000
--- a/src/test/java/org/opentripplanner/mmri/PlannerstackScenarioTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.opentripplanner.mmri;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.opentripplanner.GtfsTest;
-import org.opentripplanner.model.plan.Itinerary;
-import org.opentripplanner.model.plan.Leg;
-
-@Disabled("Requires departing onboard a trip")
-public class PlannerstackScenarioTest extends GtfsTest {
-
- @Override
- public final String getFeedName() {
- return "mmri/plannerstack_scenario";
- }
-
- @Test
- public void testPlannerstackScenario() {
- Itinerary itinerary = plan(
- +1388531220L,
- null,
- "plannerstack_scenario2",
- "plannerstack_scenario|intercity",
- false,
- false,
- null,
- "",
- "",
- 2
- );
-
- Leg[] legs = itinerary.getLegs().toArray(new Leg[2]);
-
- validateLeg(legs[0], 1388531220000L, 1388531340000L, "plannerstack_scenario3", null, null);
- validateLeg(
- legs[1],
- 1388531400000L,
- 1388531640000L,
- "plannerstack_scenario2",
- "plannerstack_scenario3",
- null
- );
-
- assertEquals("", itinerary.toStr());
- }
-}
diff --git a/src/test/java/org/opentripplanner/mmri/PreferencesTest.java b/src/test/java/org/opentripplanner/mmri/PreferencesTest.java
index d3c55097511..c33f67345fc 100644
--- a/src/test/java/org/opentripplanner/mmri/PreferencesTest.java
+++ b/src/test/java/org/opentripplanner/mmri/PreferencesTest.java
@@ -1,9 +1,7 @@
package org.opentripplanner.mmri;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.opentripplanner.transit.model.basic.TransitMode.BUS;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.opentripplanner.GtfsTest;
import org.opentripplanner.model.plan.Itinerary;
@@ -30,28 +28,4 @@ public void test2c1() {
itinerary.toStr()
);
}
-
- @Test
- @Disabled
- public void test2c2() {
- Itinerary itinerary = plan(+1388530860L, "2c1", "2c3", null, false, false, BUS, "", "", 3);
-
- Leg[] legs = itinerary.getLegs().toArray(new Leg[3]);
-
- validateLeg(legs[1], 1388530920000L, 1388531160000L, "2c5", "2c4", null);
-
- assertEquals("", itinerary.toStr());
- }
-
- @Test
- @Disabled
- public void test2c3() {
- Itinerary itinerary = plan(+1388530860L, "2c1", "2c3", null, false, true, null, "", "", 3);
-
- Leg[] legs = itinerary.getLegs().toArray(new Leg[3]);
-
- validateLeg(legs[1], 1388530920000L, 1388531160000L, "2c5", "2c4", null);
-
- assertEquals("", itinerary.toStr());
- }
}
diff --git a/src/test/java/org/opentripplanner/mmri/ServiceAlertTest.java b/src/test/java/org/opentripplanner/mmri/ServiceAlertTest.java
deleted file mode 100644
index 2d35f0a246d..00000000000
--- a/src/test/java/org/opentripplanner/mmri/ServiceAlertTest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.opentripplanner.mmri;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.opentripplanner.GtfsTest;
-import org.opentripplanner.model.plan.Itinerary;
-import org.opentripplanner.model.plan.Leg;
-
-@Disabled("Service alerts not mapped correctly")
-public class ServiceAlertTest extends GtfsTest {
-
- @Override
- public final String getFeedName() {
- return "mmri/3i";
- }
-
- @Test
- public void test3i1() {
- Itinerary itinerary = plan(+1388530860L, "3i1", "3i2", null, false, false, null, "", "", 1);
-
- Leg leg = itinerary.getLegs().toArray(new Leg[1])[0];
-
- validateLeg(leg, 1388530860000L, 1388530920000L, "3i2", "3i1", "Unknown effect");
-
- assertEquals("", itinerary.toStr());
- }
-}
diff --git a/src/test/java/org/opentripplanner/mmri/TimeTest.java b/src/test/java/org/opentripplanner/mmri/TimeTest.java
index 77123d3e656..90be00a56bb 100644
--- a/src/test/java/org/opentripplanner/mmri/TimeTest.java
+++ b/src/test/java/org/opentripplanner/mmri/TimeTest.java
@@ -2,7 +2,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.opentripplanner.GtfsTest;
import org.opentripplanner.model.plan.Itinerary;
@@ -37,30 +36,6 @@ public void test1g2() {
assertEquals("Stop 1g1 ~ BUS bus 0:01 0:02 ~ Stop 1g2 [C₁90]", itinerary.toStr());
}
- @Test
- @Disabled
- public void test1g3() {
- Itinerary itinerary = plan(+1388617380L, "1g1", "1g2", null, false, false, null, "", "", 1);
-
- Leg leg = itinerary.getLegs().toArray(new Leg[1])[0];
-
- validateLeg(leg, 1388703660000L, 1388703720000L, "1g2", "1g1", null);
-
- assertEquals("", itinerary.toStr());
- }
-
- @Test
- @Disabled
- public void test1g4() {
- Itinerary itinerary = plan(-1388617440L, "1g1", "1g2", null, false, false, null, "", "", 1);
-
- Leg leg = itinerary.getLegs().toArray(new Leg[1])[0];
-
- validateLeg(leg, 1388531100000L, 1388531160000L, "1g2", "1g1", null);
-
- assertEquals("", itinerary.toStr());
- }
-
@Test
public void test1g5() {
Itinerary itinerary = plan(+1388703780L, "1g1", "1g2", null, false, false, null, "", "", 1);
diff --git a/src/test/java/org/opentripplanner/mmri/TransferTimeTest.java b/src/test/java/org/opentripplanner/mmri/TransferTimeTest.java
deleted file mode 100644
index 9b0fc12cf37..00000000000
--- a/src/test/java/org/opentripplanner/mmri/TransferTimeTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.opentripplanner.mmri;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.opentripplanner.GtfsTest;
-import org.opentripplanner.model.plan.Itinerary;
-import org.opentripplanner.model.plan.Leg;
-
-@Disabled
-public class TransferTimeTest extends GtfsTest {
-
- @Override
- public final String getFeedName() {
- return "mmri/2a2";
- }
-
- @Test
- public void test2a3() {
- Itinerary itinerary = plan(+1388530860L, "2a3", "2a6", null, false, false, null, "", "", 3);
-
- Leg[] legs = itinerary.getLegs().toArray(new Leg[3]);
-
- validateLeg(legs[0], 1388530860000L, 1388530920000L, "2a4", "2a3", null);
- validateLeg(legs[2], 1388531280000L, 1388531340000L, "2a6", "2a5", null);
-
- assertEquals("", itinerary.toStr());
- }
-
- @Test
- public void test2a4() {
- Itinerary itinerary = plan(+1388530920L, "2a3", "2a6", null, false, false, null, "", "", 3);
-
- Leg[] legs = itinerary.getLegs().toArray(new Leg[3]);
-
- validateLeg(legs[0], 1388531040000L, 1388531100000L, "2a4", "2a3", null);
- validateLeg(legs[2], 1388531400000L, 1388531460000L, "2a6", "2a5", null);
-
- assertEquals("", itinerary.toStr());
- }
-
- @Test
- public void test2a5() {
- Itinerary itinerary = plan(-1388531460L, "2a3", "2a6", null, false, false, null, "", "", 3);
-
- Leg[] legs = itinerary.getLegs().toArray(new Leg[3]);
-
- validateLeg(legs[0], 1388531040000L, 1388531100000L, "2a4", "2a3", null);
- validateLeg(legs[2], 1388531400000L, 1388531460000L, "2a6", "2a5", null);
-
- assertEquals("", itinerary.toStr());
- }
-}
diff --git a/src/test/resources/mmri/1a/agency.txt b/src/test/resources/mmri/1a/agency.txt
deleted file mode 100644
index d6f92d6af7f..00000000000
--- a/src/test/resources/mmri/1a/agency.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-agency_id,agency_name,agency_url,agency_timezone,agency_lang
-MMRI,Multimodale Reisinformatie,http://mmri.nl/,Europe/Amsterdam,nl
diff --git a/src/test/resources/mmri/1a/calendar_dates.txt b/src/test/resources/mmri/1a/calendar_dates.txt
deleted file mode 100644
index bc0abe90518..00000000000
--- a/src/test/resources/mmri/1a/calendar_dates.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-date,service_id,exception_type
-20140101,1a|bus|1,1
-20140101,1a|ferry|1,1
-20140101,1a|train|1,1
diff --git a/src/test/resources/mmri/1a/routes.txt b/src/test/resources/mmri/1a/routes.txt
deleted file mode 100644
index 130126398bf..00000000000
--- a/src/test/resources/mmri/1a/routes.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-agency_id,route_id,route_short_name,route_long_name,route_type
-MMRI,1a|bus,bus,,3
-MMRI,1a|ferry,ferry,,4
-MMRI,1a|train,train,,2
diff --git a/src/test/resources/mmri/1a/stop_times.txt b/src/test/resources/mmri/1a/stop_times.txt
deleted file mode 100644
index 280a530103d..00000000000
--- a/src/test/resources/mmri/1a/stop_times.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-trip_id,arrival_time,departure_time,stop_id,stop_sequence
-1a|bus|1,00:01:00,00:01:00,1a1,1
-1a|bus|1,00:02:00,00:02:00,1a2,2
-1a|ferry|1,00:03:00,00:03:00,1a3,3
-1a|ferry|1,00:04:00,00:04:00,1a4,4
-1a|train|1,00:05:00,00:05:00,1a5,5
-1a|train|1,00:06:00,00:06:00,1a6,6
diff --git a/src/test/resources/mmri/1a/stops.txt b/src/test/resources/mmri/1a/stops.txt
deleted file mode 100644
index 11b92589dd2..00000000000
--- a/src/test/resources/mmri/1a/stops.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-stop_id,stop_name,stop_lat,stop_lon
-1a1,Stop 1a1,1.101,1.1
-1a2,Stop 1a2,1.102,1.1
-1a3,Stop 1a3,1.103,1.1
-1a4,Stop 1a4,1.104,1.1
-1a5,Stop 1a5,1.105,1.1
-1a6,Stop 1a6,1.106,1.1
diff --git a/src/test/resources/mmri/1a/transfers.txt b/src/test/resources/mmri/1a/transfers.txt
deleted file mode 100644
index 9bdfd232de9..00000000000
--- a/src/test/resources/mmri/1a/transfers.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-from_stop_id,to_stop_id,transfer_type,min_transfer_time
-1a2,1a3,2,0
-1a4,1a5,2,0
diff --git a/src/test/resources/mmri/1a/trips.txt b/src/test/resources/mmri/1a/trips.txt
deleted file mode 100644
index 4573658c9a5..00000000000
--- a/src/test/resources/mmri/1a/trips.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-route_id,service_id,trip_id
-1a|bus,1a|bus|1,1a|bus|1
-1a|ferry,1a|ferry|1,1a|ferry|1
-1a|train,1a|train|1,1a|train|1
diff --git a/src/test/resources/mmri/2a2/agency.txt b/src/test/resources/mmri/2a2/agency.txt
deleted file mode 100644
index d6f92d6af7f..00000000000
--- a/src/test/resources/mmri/2a2/agency.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-agency_id,agency_name,agency_url,agency_timezone,agency_lang
-MMRI,Multimodale Reisinformatie,http://mmri.nl/,Europe/Amsterdam,nl
diff --git a/src/test/resources/mmri/2a2/calendar_dates.txt b/src/test/resources/mmri/2a2/calendar_dates.txt
deleted file mode 100644
index 2461c7fe35f..00000000000
--- a/src/test/resources/mmri/2a2/calendar_dates.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-date,service_id,exception_type
-20140101,ignore,1
diff --git a/src/test/resources/mmri/2a2/routes.txt b/src/test/resources/mmri/2a2/routes.txt
deleted file mode 100644
index f8da6695081..00000000000
--- a/src/test/resources/mmri/2a2/routes.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-agency_id,route_id,route_short_name,route_long_name,route_type
-MMRI,2a2|bus|1,bus 1,,3
-MMRI,2a2|bus|2,bus 2,,3
diff --git a/src/test/resources/mmri/2a2/stop_times.txt b/src/test/resources/mmri/2a2/stop_times.txt
deleted file mode 100644
index a3bb8933370..00000000000
--- a/src/test/resources/mmri/2a2/stop_times.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-trip_id,arrival_time,departure_time,stop_id,stop_sequence
-2a2|bus|1|1,00:01:00,00:01:00,2a3,1
-2a2|bus|1|1,00:02:00,00:02:00,2a4,2
-2a2|bus|1|2,00:04:00,00:04:00,2a3,1
-2a2|bus|1|2,00:05:00,00:05:00,2a4,2
-2a2|bus|1|3,00:07:00,00:07:00,2a3,1
-2a2|bus|1|3,00:08:00,00:08:00,2a4,2
-2a2|bus|2|1,00:02:00,00:02:00,2a5,1
-2a2|bus|2|1,00:03:00,00:03:00,2a6,2
-2a2|bus|2|2,00:05:00,00:05:00,2a5,1
-2a2|bus|2|2,00:06:00,00:06:00,2a6,2
-2a2|bus|2|3,00:08:00,00:08:00,2a5,1
-2a2|bus|2|3,00:09:00,00:09:00,2a6,2
-2a2|bus|2|4,00:10:00,00:10:00,2a5,1
-2a2|bus|2|4,00:11:00,00:11:00,2a6,2
\ No newline at end of file
diff --git a/src/test/resources/mmri/2a2/stops.txt b/src/test/resources/mmri/2a2/stops.txt
deleted file mode 100644
index c3c457bc753..00000000000
--- a/src/test/resources/mmri/2a2/stops.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-stop_id,stop_name,stop_lat,stop_lon
-2a3,Stop 2a3,2.103,2.102
-2a4,Stop 2a4,2.104,2.102
-2a5,Stop 2a5,2.105,2.102
-2a6,Stop 2a6,2.106,2.102
diff --git a/src/test/resources/mmri/2a2/transfers.txt b/src/test/resources/mmri/2a2/transfers.txt
deleted file mode 100644
index 4ec2f4adf41..00000000000
--- a/src/test/resources/mmri/2a2/transfers.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-from_stop_id,to_stop_id,transfer_type,min_transfer_time
-2a4,2a5,2,300
diff --git a/src/test/resources/mmri/2a2/trips.txt b/src/test/resources/mmri/2a2/trips.txt
deleted file mode 100644
index 1a8f2a56fdc..00000000000
--- a/src/test/resources/mmri/2a2/trips.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-route_id,service_id,trip_id
-2a2|bus|1,ignore,2a2|bus|1|1
-2a2|bus|1,ignore,2a2|bus|1|2
-2a2|bus|1,ignore,2a2|bus|1|3
-2a2|bus|2,ignore,2a2|bus|2|1
-2a2|bus|2,ignore,2a2|bus|2|2
-2a2|bus|2,ignore,2a2|bus|2|3
-2a2|bus|2,ignore,2a2|bus|2|4
\ No newline at end of file
diff --git a/src/test/resources/mmri/2f/agency.txt b/src/test/resources/mmri/2f/agency.txt
deleted file mode 100644
index d6f92d6af7f..00000000000
--- a/src/test/resources/mmri/2f/agency.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-agency_id,agency_name,agency_url,agency_timezone,agency_lang
-MMRI,Multimodale Reisinformatie,http://mmri.nl/,Europe/Amsterdam,nl
diff --git a/src/test/resources/mmri/2f/calendar_dates.txt b/src/test/resources/mmri/2f/calendar_dates.txt
deleted file mode 100644
index 2461c7fe35f..00000000000
--- a/src/test/resources/mmri/2f/calendar_dates.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-date,service_id,exception_type
-20140101,ignore,1
diff --git a/src/test/resources/mmri/2f/routes.txt b/src/test/resources/mmri/2f/routes.txt
deleted file mode 100644
index 5875e0081d4..00000000000
--- a/src/test/resources/mmri/2f/routes.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-agency_id,route_id,route_short_name,route_long_name,route_type
-MMRI,2f|intercity,,Intercity,2
-MMRI,2f|slt|1,,Local train 1,2
-MMRI,2f|slt|2,,Local train 2,2
diff --git a/src/test/resources/mmri/2f/stop_times.txt b/src/test/resources/mmri/2f/stop_times.txt
deleted file mode 100644
index 559d84d992f..00000000000
--- a/src/test/resources/mmri/2f/stop_times.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-trip_id,arrival_time,departure_time,stop_id,stop_sequence
-2f|intercity,00:01:00,00:01:00,2f1,1
-2f|intercity,00:04:00,00:04:00,2f3,2
-2f|slt|1,00:01:00,00:01:00,2f1,1
-2f|slt|1,00:03:00,00:03:00,2f2,2
-2f|slt|1,00:05:00,00:05:00,2f3,3
-2f|slt|2,00:06:00,00:06:00,2f3,1
-2f|slt|2,00:09:00,00:09:00,2f2,2
-2f|slt|2,00:11:00,00:11:00,2f1,3
diff --git a/src/test/resources/mmri/2f/stops.txt b/src/test/resources/mmri/2f/stops.txt
deleted file mode 100644
index 538a3240e55..00000000000
--- a/src/test/resources/mmri/2f/stops.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-stop_id,stop_name,stop_lat,stop_lon
-2f1,Stop 2f1,2.701,2.700
-2f2,Stop 2f2,2.702,2.700
-2f3,Stop 2f3,2.703,2.700
diff --git a/src/test/resources/mmri/2f/trips.txt b/src/test/resources/mmri/2f/trips.txt
deleted file mode 100644
index f9dba48f134..00000000000
--- a/src/test/resources/mmri/2f/trips.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-route_id,service_id,trip_id
-2f|intercity,ignore,2f|intercity
-2f|slt|1,ignore,2f|slt|1
-2f|slt|2,ignore,2f|slt|2
diff --git a/src/test/resources/mmri/3f/agency.txt b/src/test/resources/mmri/3f/agency.txt
deleted file mode 100644
index d6f92d6af7f..00000000000
--- a/src/test/resources/mmri/3f/agency.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-agency_id,agency_name,agency_url,agency_timezone,agency_lang
-MMRI,Multimodale Reisinformatie,http://mmri.nl/,Europe/Amsterdam,nl
diff --git a/src/test/resources/mmri/3f/calendar_dates.txt b/src/test/resources/mmri/3f/calendar_dates.txt
deleted file mode 100644
index 2461c7fe35f..00000000000
--- a/src/test/resources/mmri/3f/calendar_dates.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-date,service_id,exception_type
-20140101,ignore,1
diff --git a/src/test/resources/mmri/3f/routes.txt b/src/test/resources/mmri/3f/routes.txt
deleted file mode 100644
index 33917fc7217..00000000000
--- a/src/test/resources/mmri/3f/routes.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-agency_id,route_id,route_short_name,route_long_name,route_type
-MMRI,3f|1,,Intercity 1,2
-MMRI,3f|2,,Intercity 2,2
diff --git a/src/test/resources/mmri/3f/stop_times.txt b/src/test/resources/mmri/3f/stop_times.txt
deleted file mode 100644
index 563936db238..00000000000
--- a/src/test/resources/mmri/3f/stop_times.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-trip_id,arrival_time,departure_time,stop_id,stop_sequence
-3f|1,00:01:00,00:01:00,3f1,1
-3f|1,00:02:00,00:02:00,3f2,2
-3f|1,00:03:00,00:03:00,3f3,3
-3f|2,00:01:00,00:01:00,3f1,1
-3f|2,00:02:00,00:02:00,3f4,2
-3f|2,00:04:00,00:04:00,3f3,3
diff --git a/src/test/resources/mmri/3f/stops.txt b/src/test/resources/mmri/3f/stops.txt
deleted file mode 100644
index 7ccbea9059f..00000000000
--- a/src/test/resources/mmri/3f/stops.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-stop_id,stop_name,stop_lat,stop_lon
-3f1,Stop 3f1,3.601,3.602
-3f2,Stop 3f2,3.602,3.601
-3f3,Stop 3f3,3.603,3.602
-3f4,Stop 3f4,3.602,3.603
diff --git a/src/test/resources/mmri/3f/trips.txt b/src/test/resources/mmri/3f/trips.txt
deleted file mode 100644
index c16ec0732bb..00000000000
--- a/src/test/resources/mmri/3f/trips.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-route_id,service_id,trip_id
-3f|1,ignore,3f|1
-3f|2,ignore,3f|2
diff --git a/src/test/resources/mmri/3i.pb b/src/test/resources/mmri/3i.pb
deleted file mode 100644
index f03fd3dc6bf..00000000000
Binary files a/src/test/resources/mmri/3i.pb and /dev/null differ
diff --git a/src/test/resources/mmri/3i/agency.txt b/src/test/resources/mmri/3i/agency.txt
deleted file mode 100644
index d6f92d6af7f..00000000000
--- a/src/test/resources/mmri/3i/agency.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-agency_id,agency_name,agency_url,agency_timezone,agency_lang
-MMRI,Multimodale Reisinformatie,http://mmri.nl/,Europe/Amsterdam,nl
diff --git a/src/test/resources/mmri/3i/calendar_dates.txt b/src/test/resources/mmri/3i/calendar_dates.txt
deleted file mode 100644
index 2461c7fe35f..00000000000
--- a/src/test/resources/mmri/3i/calendar_dates.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-date,service_id,exception_type
-20140101,ignore,1
diff --git a/src/test/resources/mmri/3i/routes.txt b/src/test/resources/mmri/3i/routes.txt
deleted file mode 100644
index a70c8bf0979..00000000000
--- a/src/test/resources/mmri/3i/routes.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-agency_id,route_id,route_short_name,route_long_name,route_type
-MMRI,3i|1,bus 1,,3
\ No newline at end of file
diff --git a/src/test/resources/mmri/3i/stop_times.txt b/src/test/resources/mmri/3i/stop_times.txt
deleted file mode 100644
index 6954a3066aa..00000000000
--- a/src/test/resources/mmri/3i/stop_times.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-trip_id,arrival_time,departure_time,stop_id,stop_sequence
-3i|1,00:01:00,00:01:00,3i1,1
-3i|1,00:02:00,00:02:00,3i2,2
\ No newline at end of file
diff --git a/src/test/resources/mmri/3i/stops.txt b/src/test/resources/mmri/3i/stops.txt
deleted file mode 100644
index 62645f565ee..00000000000
--- a/src/test/resources/mmri/3i/stops.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-stop_id,stop_name,stop_lat,stop_lon
-3i1,Stop 3i1,3.801,3.8
-3i2,Stop 3i2,3.802,3.8
diff --git a/src/test/resources/mmri/3i/trips.txt b/src/test/resources/mmri/3i/trips.txt
deleted file mode 100644
index 1269810469d..00000000000
--- a/src/test/resources/mmri/3i/trips.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-route_id,service_id,trip_id
-3i|1,ignore,3i|1
\ No newline at end of file
diff --git a/src/test/resources/mmri/plannerstack_scenario.pb b/src/test/resources/mmri/plannerstack_scenario.pb
deleted file mode 100644
index 810f9b3e6f1..00000000000
Binary files a/src/test/resources/mmri/plannerstack_scenario.pb and /dev/null differ
diff --git a/src/test/resources/mmri/plannerstack_scenario/agency.txt b/src/test/resources/mmri/plannerstack_scenario/agency.txt
deleted file mode 100644
index d6f92d6af7f..00000000000
--- a/src/test/resources/mmri/plannerstack_scenario/agency.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-agency_id,agency_name,agency_url,agency_timezone,agency_lang
-MMRI,Multimodale Reisinformatie,http://mmri.nl/,Europe/Amsterdam,nl
diff --git a/src/test/resources/mmri/plannerstack_scenario/calendar_dates.txt b/src/test/resources/mmri/plannerstack_scenario/calendar_dates.txt
deleted file mode 100644
index 2461c7fe35f..00000000000
--- a/src/test/resources/mmri/plannerstack_scenario/calendar_dates.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-date,service_id,exception_type
-20140101,ignore,1
diff --git a/src/test/resources/mmri/plannerstack_scenario/routes.txt b/src/test/resources/mmri/plannerstack_scenario/routes.txt
deleted file mode 100644
index ea764d3d770..00000000000
--- a/src/test/resources/mmri/plannerstack_scenario/routes.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-agency_id,route_id,route_short_name,route_long_name,route_type
-MMRI,plannerstack_scenario|intercity,,Intercity,2
-MMRI,plannerstack_scenario|slt|1,,Local train 1,2
-MMRI,plannerstack_scenario|slt|2,,Local train 2,2
diff --git a/src/test/resources/mmri/plannerstack_scenario/stop_times.txt b/src/test/resources/mmri/plannerstack_scenario/stop_times.txt
deleted file mode 100644
index 7c67a1ef04c..00000000000
--- a/src/test/resources/mmri/plannerstack_scenario/stop_times.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-trip_id,arrival_time,departure_time,stop_id,stop_sequence
-plannerstack_scenario|intercity,00:01:00,00:01:00,plannerstack_scenario1,1
-plannerstack_scenario|intercity,00:04:00,00:04:00,plannerstack_scenario3,2
-plannerstack_scenario|slt|1,00:01:00,00:01:00,plannerstack_scenario1,1
-plannerstack_scenario|slt|1,00:03:00,00:03:00,plannerstack_scenario2,2
-plannerstack_scenario|slt|1,00:05:00,00:05:00,plannerstack_scenario3,3
-plannerstack_scenario|slt|2,00:06:00,00:06:00,plannerstack_scenario3,1
-plannerstack_scenario|slt|2,00:09:00,00:09:00,plannerstack_scenario2,2
-plannerstack_scenario|slt|2,00:11:00,00:11:00,plannerstack_scenario1,3
-plannerstack_scenario|slt|3,00:10:00,00:10:00,plannerstack_scenario3,1
-plannerstack_scenario|slt|3,00:14:00,00:14:00,plannerstack_scenario2,2
-plannerstack_scenario|slt|3,00:16:00,00:16:00,plannerstack_scenario1,3
\ No newline at end of file
diff --git a/src/test/resources/mmri/plannerstack_scenario/stops.txt b/src/test/resources/mmri/plannerstack_scenario/stops.txt
deleted file mode 100644
index 4dac741a416..00000000000
--- a/src/test/resources/mmri/plannerstack_scenario/stops.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-stop_id,stop_name,stop_lat,stop_lon
-plannerstack_scenario1,Stop plannerstack_scenario1,2.701,2.700
-plannerstack_scenario2,Stop plannerstack_scenario2,2.702,2.700
-plannerstack_scenario3,Stop plannerstack_scenario3,2.703,2.700
diff --git a/src/test/resources/mmri/plannerstack_scenario/trips.txt b/src/test/resources/mmri/plannerstack_scenario/trips.txt
deleted file mode 100644
index ce1cd4690a2..00000000000
--- a/src/test/resources/mmri/plannerstack_scenario/trips.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-route_id,service_id,trip_id
-plannerstack_scenario|intercity,ignore,plannerstack_scenario|intercity
-plannerstack_scenario|slt|1,ignore,plannerstack_scenario|slt|1
-plannerstack_scenario|slt|2,ignore,plannerstack_scenario|slt|2
-plannerstack_scenario|slt|2,ignore,plannerstack_scenario|slt|3
diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/feedinfo.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/feedinfo.json
new file mode 100644
index 00000000000..3cf3bd06d66
--- /dev/null
+++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/feedinfo.json
@@ -0,0 +1,18 @@
+{
+ "data" : {
+ "feeds" : [
+ {
+ "agencies" : [
+ {
+ "name" : "speedtransit",
+ "url" : "www.otp-foo.bar"
+ }
+ ],
+ "publisher" : {
+ "name" : "publisher",
+ "url" : "www.z.org"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/feedinfo.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/feedinfo.graphql
new file mode 100644
index 00000000000..68516d26237
--- /dev/null
+++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/feedinfo.graphql
@@ -0,0 +1,12 @@
+{
+ feeds {
+ agencies {
+ name
+ url
+ }
+ publisher {
+ name
+ url
+ }
+ }
+}
\ No newline at end of file