/**
   * Test method for {@link AbstractMediaRouteController#isPlaying()}.
   *
   * <p>Checks that it returns the correct value for all possible playback states.
   */
  @Test
  @Feature({"MediaRemote"})
  public void testIsPlaying() {
    // Using a spy here to override some methods.
    AbstractMediaRouteController mediaRouteCtrl = spy(new DummyMediaRouteController());

    // Default
    assertFalse(mediaRouteCtrl.isPlaying());

    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_BUFFERING);
    assertTrue(mediaRouteCtrl.isPlaying());

    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_CANCELED);
    assertFalse(mediaRouteCtrl.isPlaying());

    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_ERROR);
    assertFalse(mediaRouteCtrl.isPlaying());

    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_FINISHED);
    assertFalse(mediaRouteCtrl.isPlaying());

    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_INVALIDATED);
    assertFalse(mediaRouteCtrl.isPlaying());

    doReturn(0L).when(mediaRouteCtrl).getPosition();
    doReturn(5000L).when(mediaRouteCtrl).getDuration();
    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_PAUSED);
    assertFalse(mediaRouteCtrl.isPlaying());

    doReturn(5000L).when(mediaRouteCtrl).getPosition();
    doReturn(5000L).when(mediaRouteCtrl).getDuration();
    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_PAUSED);
    assertFalse(mediaRouteCtrl.isPlaying());

    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_PENDING);
    assertFalse(mediaRouteCtrl.isPlaying());

    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_PLAYING);
    assertTrue(mediaRouteCtrl.isPlaying());
  }