public void testStreetLocationFinder() {
    StreetVertexIndexServiceImpl finder = new StreetVertexIndexServiceImpl(graph);
    finder.setup();
    // test that the local stop finder finds stops
    assertTrue(finder.getLocalTransitStops(new Coordinate(-74.005000001, 40.01), 100).size() > 0);

    // test that the closest vertex finder returns the closest vertex
    StreetLocation some =
        (StreetLocation) finder.getClosestVertex(new Coordinate(-74.00, 40.00), null);
    assertNotNull(some);
    assertTrue(
        "wheelchair accessibility is correctly set (vertices)", some.isWheelchairAccessible());

    // test that the closest vertex finder correctly splits streets
    StreetLocation start =
        (StreetLocation) finder.getClosestVertex(new Coordinate(-74.01, 40.004), null);
    assertNotNull(start);
    assertTrue(
        "wheelchair accessibility is correctly set (splitting)", start.isWheelchairAccessible());

    List<DirectEdge> extras = start.getExtra();
    assertEquals(10, extras.size());

    TraverseOptions biking = new TraverseOptions(new TraverseModeSet(TraverseMode.BICYCLE));
    StreetLocation end =
        (StreetLocation) finder.getClosestVertex(new Coordinate(-74.0, 40.008), biking);
    assertNotNull(end);

    extras = end.getExtra();
    assertEquals(10, extras.size());

    // test that the closest vertex finder also adds an edge to transit
    // stops (if you are really close to the transit stop relative to the
    // street)
    StreetLocation location =
        (StreetLocation)
            finder.getClosestVertex(new Coordinate(-74.004999, 40.00999), new TraverseOptions());
    assertTrue(location.isWheelchairAccessible());
    boolean found = false;
    for (Edge extra : location.getExtra()) {
      if (extra instanceof FreeEdge && ((FreeEdge) extra).getToVertex().equals(station1)) {
        found = true;
      }
    }
    assertTrue(found);
  }
 // this could be handled by method overloading on Vertex
 public boolean isWheelchairAccessible(Vertex v) {
   if (v instanceof TransitStop) {
     TransitStop ts = (TransitStop) v;
     return ts.hasWheelchairEntrance();
   } else if (v instanceof StreetLocation) {
     StreetLocation sl = (StreetLocation) v;
     return sl.isWheelchairAccessible();
   }
   return true;
 }
 @Override
 public boolean isAccessible(String place, TraverseOptions options) {
   /* fixme: take into account slope for wheelchair accessibility */
   Vertex vertex = getVertexForPlace(place, options);
   if (vertex instanceof TransitStop) {
     TransitStop ts = (TransitStop) vertex;
     return ts.hasWheelchairEntrance();
   } else if (vertex instanceof StreetLocation) {
     StreetLocation sl = (StreetLocation) vertex;
     return sl.isWheelchairAccessible();
   }
   return true;
 }