Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
53283ecb
authored
Nov 07, 2019
by
aquilescanta
Committed by
Oliver Woodman
Nov 15, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add CastPlayer tests for repeatMode masking
PiperOrigin-RevId: 279091742
parent
d1da3d92
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
71 additions
and
8 deletions
extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/CastPlayerTest.java
extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/CastPlayerTest.java
View file @
53283ecb
...
@@ -16,15 +16,20 @@
...
@@ -16,15 +16,20 @@
package
com
.
google
.
android
.
exoplayer2
.
ext
.
cast
;
package
com
.
google
.
android
.
exoplayer2
.
ext
.
cast
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
org
.
mockito
.
ArgumentMatchers
.
any
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyInt
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
verifyNoMoreInteractions
;
import
static
org
.
mockito
.
Mockito
.
when
;
import
static
org
.
mockito
.
Mockito
.
when
;
import
static
org
.
mockito
.
MockitoAnnotations
.
initMocks
;
import
static
org
.
mockito
.
MockitoAnnotations
.
initMocks
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.gms.cast.MediaStatus
;
import
com.google.android.gms.cast.framework.CastContext
;
import
com.google.android.gms.cast.framework.CastContext
;
import
com.google.android.gms.cast.framework.CastSession
;
import
com.google.android.gms.cast.framework.CastSession
;
import
com.google.android.gms.cast.framework.SessionManager
;
import
com.google.android.gms.cast.framework.SessionManager
;
import
com.google.android.gms.cast.framework.media.MediaQueue
;
import
com.google.android.gms.cast.framework.media.RemoteMediaClient
;
import
com.google.android.gms.cast.framework.media.RemoteMediaClient
;
import
com.google.android.gms.common.api.PendingResult
;
import
com.google.android.gms.common.api.PendingResult
;
import
com.google.android.gms.common.api.ResultCallback
;
import
com.google.android.gms.common.api.ResultCallback
;
...
@@ -43,6 +48,8 @@ public class CastPlayerTest {
...
@@ -43,6 +48,8 @@ public class CastPlayerTest {
private
CastPlayer
castPlayer
;
private
CastPlayer
castPlayer
;
private
RemoteMediaClient
.
Listener
remoteMediaClientListener
;
private
RemoteMediaClient
.
Listener
remoteMediaClientListener
;
@Mock
private
RemoteMediaClient
mockRemoteMediaClient
;
@Mock
private
RemoteMediaClient
mockRemoteMediaClient
;
@Mock
private
MediaStatus
mockMediaStatus
;
@Mock
private
MediaQueue
mockMediaQueue
;
@Mock
private
CastContext
mockCastContext
;
@Mock
private
CastContext
mockCastContext
;
@Mock
private
SessionManager
mockSessionManager
;
@Mock
private
SessionManager
mockSessionManager
;
@Mock
private
CastSession
mockCastSession
;
@Mock
private
CastSession
mockCastSession
;
...
@@ -61,8 +68,12 @@ public class CastPlayerTest {
...
@@ -61,8 +68,12 @@ public class CastPlayerTest {
when
(
mockCastContext
.
getSessionManager
()).
thenReturn
(
mockSessionManager
);
when
(
mockCastContext
.
getSessionManager
()).
thenReturn
(
mockSessionManager
);
when
(
mockSessionManager
.
getCurrentCastSession
()).
thenReturn
(
mockCastSession
);
when
(
mockSessionManager
.
getCurrentCastSession
()).
thenReturn
(
mockCastSession
);
when
(
mockCastSession
.
getRemoteMediaClient
()).
thenReturn
(
mockRemoteMediaClient
);
when
(
mockCastSession
.
getRemoteMediaClient
()).
thenReturn
(
mockRemoteMediaClient
);
// Make the remote media client be initially paused (most common scenario).
when
(
mockRemoteMediaClient
.
getMediaStatus
()).
thenReturn
(
mockMediaStatus
);
when
(
mockRemoteMediaClient
.
getMediaQueue
()).
thenReturn
(
mockMediaQueue
);
when
(
mockMediaQueue
.
getItemIds
()).
thenReturn
(
new
int
[
0
]);
// Make the remote media client present the same default values as ExoPlayer:
when
(
mockRemoteMediaClient
.
isPaused
()).
thenReturn
(
true
);
when
(
mockRemoteMediaClient
.
isPaused
()).
thenReturn
(
true
);
when
(
mockMediaStatus
.
getQueueRepeatMode
()).
thenReturn
(
MediaStatus
.
REPEAT_MODE_REPEAT_OFF
);
castPlayer
=
new
CastPlayer
(
mockCastContext
);
castPlayer
=
new
CastPlayer
(
mockCastContext
);
castPlayer
.
addListener
(
mockListener
);
castPlayer
.
addListener
(
mockListener
);
verify
(
mockRemoteMediaClient
).
addListener
(
listenerArgumentCaptor
.
capture
());
verify
(
mockRemoteMediaClient
).
addListener
(
listenerArgumentCaptor
.
capture
());
...
@@ -70,9 +81,8 @@ public class CastPlayerTest {
...
@@ -70,9 +81,8 @@ public class CastPlayerTest {
}
}
@Test
@Test
public
void
testSetPlayWhenReady_masks
Local
State
()
{
public
void
testSetPlayWhenReady_masks
Remote
State
()
{
when
(
mockRemoteMediaClient
.
play
()).
thenReturn
(
mockPendingResult
);
when
(
mockRemoteMediaClient
.
play
()).
thenReturn
(
mockPendingResult
);
// Initially paused.
assertThat
(
castPlayer
.
getPlayWhenReady
()).
isFalse
();
assertThat
(
castPlayer
.
getPlayWhenReady
()).
isFalse
();
castPlayer
.
setPlayWhenReady
(
true
);
castPlayer
.
setPlayWhenReady
(
true
);
...
@@ -82,20 +92,19 @@ public class CastPlayerTest {
...
@@ -82,20 +92,19 @@ public class CastPlayerTest {
// There is a status update in the middle, which should be hidden by masking.
// There is a status update in the middle, which should be hidden by masking.
remoteMediaClientListener
.
onStatusUpdated
();
remoteMediaClientListener
.
onStatusUpdated
();
Mockito
.
verifyNoMoreInteractions
(
mockListener
);
verifyNoMoreInteractions
(
mockListener
);
// Upon result, the remoteMediaClient has updated it
'
s state according to the play() call.
// Upon result, the remoteMediaClient has updated its state according to the play() call.
when
(
mockRemoteMediaClient
.
isPaused
()).
thenReturn
(
false
);
when
(
mockRemoteMediaClient
.
isPaused
()).
thenReturn
(
false
);
setResultCallbackArgumentCaptor
setResultCallbackArgumentCaptor
.
getValue
()
.
getValue
()
.
onResult
(
Mockito
.
mock
(
RemoteMediaClient
.
MediaChannelResult
.
class
));
.
onResult
(
Mockito
.
mock
(
RemoteMediaClient
.
MediaChannelResult
.
class
));
Mockito
.
verifyNoMoreInteractions
(
mockListener
);
verifyNoMoreInteractions
(
mockListener
);
}
}
@Test
@Test
public
void
testSetPlayWhenReadyMasking_updatesUponResultChange
()
{
public
void
testSetPlayWhenReadyMasking_updatesUponResultChange
()
{
when
(
mockRemoteMediaClient
.
play
()).
thenReturn
(
mockPendingResult
);
when
(
mockRemoteMediaClient
.
play
()).
thenReturn
(
mockPendingResult
);
// Initially paused.
assertThat
(
castPlayer
.
getPlayWhenReady
()).
isFalse
();
assertThat
(
castPlayer
.
getPlayWhenReady
()).
isFalse
();
castPlayer
.
setPlayWhenReady
(
true
);
castPlayer
.
setPlayWhenReady
(
true
);
...
@@ -103,7 +112,7 @@ public class CastPlayerTest {
...
@@ -103,7 +112,7 @@ public class CastPlayerTest {
assertThat
(
castPlayer
.
getPlayWhenReady
()).
isTrue
();
assertThat
(
castPlayer
.
getPlayWhenReady
()).
isTrue
();
verify
(
mockListener
).
onPlayerStateChanged
(
true
,
Player
.
STATE_IDLE
);
verify
(
mockListener
).
onPlayerStateChanged
(
true
,
Player
.
STATE_IDLE
);
// Upon result, the remote media client is still paused.
So the state should update
.
// Upon result, the remote media client is still paused.
The state should reflect that
.
setResultCallbackArgumentCaptor
setResultCallbackArgumentCaptor
.
getValue
()
.
getValue
()
.
onResult
(
Mockito
.
mock
(
RemoteMediaClient
.
MediaChannelResult
.
class
));
.
onResult
(
Mockito
.
mock
(
RemoteMediaClient
.
MediaChannelResult
.
class
));
...
@@ -119,4 +128,58 @@ public class CastPlayerTest {
...
@@ -119,4 +128,58 @@ public class CastPlayerTest {
verify
(
mockListener
).
onPlayerStateChanged
(
true
,
Player
.
STATE_IDLE
);
verify
(
mockListener
).
onPlayerStateChanged
(
true
,
Player
.
STATE_IDLE
);
assertThat
(
castPlayer
.
getPlayWhenReady
()).
isTrue
();
assertThat
(
castPlayer
.
getPlayWhenReady
()).
isTrue
();
}
}
@Test
public
void
testSetRepeatMode_masksRemoteState
()
{
when
(
mockRemoteMediaClient
.
queueSetRepeatMode
(
anyInt
(),
any
())).
thenReturn
(
mockPendingResult
);
assertThat
(
castPlayer
.
getRepeatMode
()).
isEqualTo
(
Player
.
REPEAT_MODE_OFF
);
castPlayer
.
setRepeatMode
(
Player
.
REPEAT_MODE_ONE
);
verify
(
mockPendingResult
).
setResultCallback
(
setResultCallbackArgumentCaptor
.
capture
());
assertThat
(
castPlayer
.
getRepeatMode
()).
isEqualTo
(
Player
.
REPEAT_MODE_ONE
);
verify
(
mockListener
).
onRepeatModeChanged
(
Player
.
REPEAT_MODE_ONE
);
// There is a status update in the middle, which should be hidden by masking.
when
(
mockMediaStatus
.
getQueueRepeatMode
()).
thenReturn
(
MediaStatus
.
REPEAT_MODE_REPEAT_ALL
);
remoteMediaClientListener
.
onStatusUpdated
();
verifyNoMoreInteractions
(
mockListener
);
// Upon result, the mediaStatus now exposes the new repeat mode.
when
(
mockMediaStatus
.
getQueueRepeatMode
()).
thenReturn
(
MediaStatus
.
REPEAT_MODE_REPEAT_SINGLE
);
setResultCallbackArgumentCaptor
.
getValue
()
.
onResult
(
Mockito
.
mock
(
RemoteMediaClient
.
MediaChannelResult
.
class
));
verifyNoMoreInteractions
(
mockListener
);
}
@Test
public
void
testSetRepeatMode_updatesUponResultChange
()
{
when
(
mockRemoteMediaClient
.
queueSetRepeatMode
(
anyInt
(),
any
())).
thenReturn
(
mockPendingResult
);
castPlayer
.
setRepeatMode
(
Player
.
REPEAT_MODE_ONE
);
verify
(
mockPendingResult
).
setResultCallback
(
setResultCallbackArgumentCaptor
.
capture
());
assertThat
(
castPlayer
.
getRepeatMode
()).
isEqualTo
(
Player
.
REPEAT_MODE_ONE
);
verify
(
mockListener
).
onRepeatModeChanged
(
Player
.
REPEAT_MODE_ONE
);
// There is a status update in the middle, which should be hidden by masking.
when
(
mockMediaStatus
.
getQueueRepeatMode
()).
thenReturn
(
MediaStatus
.
REPEAT_MODE_REPEAT_ALL
);
remoteMediaClientListener
.
onStatusUpdated
();
verifyNoMoreInteractions
(
mockListener
);
// Upon result, the repeat mode is ALL. The state should reflect that.
setResultCallbackArgumentCaptor
.
getValue
()
.
onResult
(
Mockito
.
mock
(
RemoteMediaClient
.
MediaChannelResult
.
class
));
verify
(
mockListener
).
onRepeatModeChanged
(
Player
.
REPEAT_MODE_ALL
);
assertThat
(
castPlayer
.
getRepeatMode
()).
isEqualTo
(
Player
.
REPEAT_MODE_ALL
);
}
@Test
public
void
testRepeatMode_changesOnStatusUpdates
()
{
assertThat
(
castPlayer
.
getRepeatMode
()).
isEqualTo
(
Player
.
REPEAT_MODE_OFF
);
when
(
mockMediaStatus
.
getQueueRepeatMode
()).
thenReturn
(
MediaStatus
.
REPEAT_MODE_REPEAT_SINGLE
);
remoteMediaClientListener
.
onStatusUpdated
();
verify
(
mockListener
).
onRepeatModeChanged
(
Player
.
REPEAT_MODE_ONE
);
assertThat
(
castPlayer
.
getRepeatMode
()).
isEqualTo
(
Player
.
REPEAT_MODE_ONE
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment