@Test
 public void failure_shouldClearPreviousRoutes() throws Exception {
   fragment.createRouteToDestination();
   fragment.success(new Route(getFixture("around_the_block")));
   fragment.createRouteToDestination();
   fragment.failure(500);
   assertThat(fragment.path.getPoints()).isEmpty();
 }
 @Test
 public void success_shouldClearPreviousRoutes() throws Exception {
   Route route = new Route(getFixture("around_the_block"));
   fragment.createRouteToDestination();
   fragment.success(route);
   fragment.createRouteToDestination();
   fragment.success(route);
   assertThat(fragment.path.getPoints()).hasSize(route.getGeometry().size());
 }
 @Test
 public void setRouteTo_successShouldDismissLoadingDialogUpon() throws Exception {
   fragment.createRouteToDestination();
   fragment.success(new Route(getFixture("around_the_block")));
   assertThat(activity.getMapFragment().getView().findViewById(R.id.map)).isVisible();
   assertThat(activity.getMapFragment().getView().findViewById(R.id.progress)).isNotVisible();
 }
 @Test
 public void success_shouldAddBubblesAandB() throws Exception {
   Route testRoute = new Route(getFixture("around_the_block"));
   fragment.createRouteToDestination();
   fragment.success(testRoute);
   assertThat(fragment.markers.size()).isEqualTo(2);
 }
 @Test
 public void setRouteTo_failureShouldDismissLoadingDialogUpon() throws Exception {
   fragment.createRouteToDestination();
   fragment.failure(500);
   assertThat(activity.getMapFragment().getView().findViewById(R.id.map)).isVisible();
   assertThat(activity.getMapFragment().getView().findViewById(R.id.progress)).isNotVisible();
 }
 @Test
 public void success_shouldAddMarkerLayerOnce() throws Exception {
   fragment.createRouteToDestination();
   fragment.success(new Route(getFixture("around_the_block")));
   fragment.success(new Route(getFixture("around_the_block")));
   assertThat(mapController.getMap().layers().contains(fragment.markers)).isTrue();
 }
 @Test
 public void start_shouldClearBubbles() throws Exception {
   fragment.createRouteToDestination();
   Route testRoute = new Route(getFixture("around_the_block"));
   fragment.success(testRoute);
   fragment.routingCircle.performClick();
   assertThat(mapController.getMap().layers().contains(fragment.markers)).isFalse();
 }
 @Test
 public void onStart_shouldHaveCurrentLocation() throws Exception {
   TextView textView = (TextView) fragment.getView().findViewById(R.id.starting_point);
   fragment.createRouteToDestination();
   fragment.success(new Route(getFixture("around_the_block")));
   assertThat(textView).isNotNull();
   assertThat(textView).hasText("Current Location");
 }
 @Test
 public void onDetach_shouldRemovePath() throws Exception {
   fragment.createRouteToDestination();
   Route testRoute = new Route(getFixture("around_the_block"));
   fragment.success(testRoute);
   fragment.onDetach();
   assertThat(mapController.getMap().layers().contains(fragment.path)).isFalse();
 }
 @Test
 public void createRouteToDestination_shouldGetCurrentLocationFirst() throws Exception {
   mapController.setLocation(getTestLocation(22.22, 44.44));
   fragment.createRouteToDestination();
   verify(router, Mockito.times(4)).setLocation(location.capture());
   List<double[]> values = location.getAllValues();
   assertThat(values.get(2)).isEqualTo(new double[] {22.22, 44.44});
   assertThat(values.get(3)).isEqualTo(new double[] {1.0, 1.0});
 }
 @Test
 public void onStart_shouldHaveDestinationLocation() throws Exception {
   SimpleFeature feature = getTestSimpleFeature();
   TextView textView = (TextView) fragment.getView().findViewById(R.id.destination);
   fragment.createRouteToDestination();
   fragment.success(new Route(getFixture("around_the_block")));
   assertThat(textView).isNotNull();
   assertThat(textView).hasText(feature.getProperty(TEXT));
 }
 @Test
 public void success_shouldDrawFullRoute() throws Exception {
   fragment.createRouteToDestination();
   Route route = new Route(getFixture("under_hundred"));
   fragment.success(route);
   for (Location loc : route.getGeometry()) {
     assertThat(fragment.path.getPoints()).contains(locationToGeoPoint(loc));
   }
 }
 @Test
 public void reverse_shouldToggleCircleButtonToStart() throws Exception {
   fragment.createRouteToDestination();
   Route testRoute = new Route(getFixture("around_the_block"));
   fragment.success(testRoute);
   fragment.reverse();
   fragment.reverse();
   assertThat(fragment.routingCircle.getTag()).isEqualTo(activity.getString(R.string.start));
 }
 @Test
 public void start_shouldStartRouting() throws Exception {
   fragment.createRouteToDestination();
   Route testRoute = new Route(getFixture("around_the_block"));
   fragment.success(testRoute);
   ImageButton startBtn = (ImageButton) fragment.getView().findViewById(R.id.routing_circle);
   startBtn.performClick();
   assertThat(activity.getSupportFragmentManager()).hasFragmentWithTag(RouteFragment.TAG);
 }
  @Test
  public void success_shouldDrawReducedRoute() throws Exception {
    fragment.createRouteToDestination();
    Route route = new Route(getFixture("ny_to_vermont"));
    fragment.success(route);

    for (Location loc : reduceWithTolerance(route.getGeometry(), REDUCE_TOLERANCE)) {
      assertThat(fragment.path.getPoints()).contains(locationToGeoPoint(loc));
    }
  }
 @Test
 public void onDetach_shouldRedrawMap() throws Exception {
   MapFragment mockMapFragment = mock(MapFragment.class);
   fragment.createRouteToDestination();
   Route testRoute = new Route(getFixture("around_the_block"));
   fragment.success(testRoute);
   fragment.setMapFragment(mockMapFragment);
   fragment.onDetach();
   verify(mockMapFragment).updateMap();
 }
 @Test
 public void reverse_shouldSwapOriginalLocationAndDestination() throws Exception {
   TextView startingPoint = (TextView) fragment.getView().findViewById(R.id.starting_point);
   TextView destination = (TextView) fragment.getView().findViewById(R.id.destination);
   SimpleFeature feature = getTestSimpleFeature();
   fragment.createRouteToDestination();
   fragment.success(new Route(getFixture("around_the_block")));
   fragment.getView().findViewById(R.id.route_reverse).performClick();
   fragment.success(new Route(getFixture("around_the_block")));
   assertThat(destination).hasText("Current Location");
   assertThat(startingPoint).hasText(feature.getProperty(TEXT));
 }
 @Test
 public void success_shouldClearMarkerLayer() throws Exception {
   fragment.createRouteToDestination();
   fragment.success(new Route(getFixture("around_the_block")));
   assertThat(fragment.markers.size()).isEqualTo(2);
 }
 @Test
 public void setRouteTo_shouldClearMap() throws Exception {
   fragment.getMapFragment().addPoi(getTestSimpleFeature());
   fragment.createRouteToDestination();
   assertThat(fragment.getMapFragment().getPoiLayer().size()).isEqualTo(0);
 }
 @Test
 public void setRouteTo_shouldShowLoadingDialog() throws Exception {
   fragment.createRouteToDestination();
   assertThat(activity.getMapFragment().getView().findViewById(R.id.progress)).isVisible();
 }