/** Test method for {@link AbstractMediaRouteController#shouldResetState(MediaStateListener)}. */
  @Test
  @Feature({"MediaRemote"})
  public void testShouldResetState() {
    AbstractMediaRouteController mediaRouteCtrl = new DummyMediaRouteController();
    MediaStateListener listener = mock(MediaStateListener.class);

    mediaRouteCtrl.setMediaStateListener(null);

    assertTrue(mediaRouteCtrl.shouldResetState(null));
    assertTrue(mediaRouteCtrl.shouldResetState(mock(MediaStateListener.class)));

    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_PLAYING);

    assertFalse(mediaRouteCtrl.shouldResetState(null));
    assertTrue(mediaRouteCtrl.shouldResetState(mock(MediaStateListener.class)));

    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_FINISHED);
    mediaRouteCtrl.setMediaStateListener(listener);

    assertTrue(mediaRouteCtrl.shouldResetState(null));
    assertTrue(mediaRouteCtrl.shouldResetState(mock(MediaStateListener.class)));
    assertTrue(mediaRouteCtrl.shouldResetState(listener));

    mediaRouteCtrl.setPlayerStateForMediaItemState(MediaItemStatus.PLAYBACK_STATE_PLAYING);

    assertTrue(mediaRouteCtrl.shouldResetState(null));
    assertTrue(mediaRouteCtrl.shouldResetState(mock(MediaStateListener.class)));
    assertFalse(mediaRouteCtrl.shouldResetState(listener));
  }
  /**
   * 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());
  }