blob: 38d9c58efa1784d47211c5eb1237a0180f293564 [file] [log] [blame]
/*
* Copyright 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.bluetooth.avrcp;
import static org.mockito.Mockito.*;
import android.media.MediaDescription;
import android.media.browse.MediaBrowser.MediaItem;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.List;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BrowserPlayerWrapperTest {
@Captor ArgumentCaptor<MediaBrowser.ConnectionCallback> mBrowserConnCb;
@Captor ArgumentCaptor<MediaBrowser.SubscriptionCallback> mSubscriptionCb;
@Captor ArgumentCaptor<List<ListItem>> mWrapperBrowseCb;
@Mock MediaBrowser mMockBrowser;
@Mock BrowsedPlayerWrapper.ConnectionCallback mConnCb;
@Mock BrowsedPlayerWrapper.BrowseCallback mBrowseCb;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mMockBrowser.getRoot()).thenReturn("root_folder");
MediaBrowserFactory.inject(mMockBrowser);
}
@Test
public void testWrap() {
BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
wrapper.connect(mConnCb);
verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
verify(mMockBrowser).connect();
MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
browserConnCb.onConnected();
verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_SUCCESS), eq(wrapper));
verify(mMockBrowser).disconnect();
}
@Test
public void testConnect() {
BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
wrapper.connect(mConnCb);
verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
browserConnCb.onConnectionFailed();
verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_CONN_ERROR), eq(wrapper));
wrapper.connect(mConnCb);
verify(mMockBrowser, times(2)).connect();
browserConnCb.onConnected();
verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_SUCCESS), eq(wrapper));
verify(mMockBrowser, times(2)).disconnect();
}
@Test
public void testEmptyRoot() {
BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
doReturn("").when(mMockBrowser).getRoot();
wrapper.connect(mConnCb);
verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
verify(mMockBrowser, times(1)).connect();
browserConnCb.onConnected();
verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_CONN_ERROR), eq(wrapper));
verify(mMockBrowser, times(1)).disconnect();
}
@Test
public void testDisconnect() {
BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
wrapper.connect(mConnCb);
verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
browserConnCb.onConnected();
verify(mMockBrowser).disconnect();
}
@Test
public void testGetRootId() {
BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
wrapper.connect(mConnCb);
verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
browserConnCb.onConnected();
Assert.assertEquals("root_folder", wrapper.getRootId());
verify(mMockBrowser).disconnect();
}
@Test
public void testPlayItem() {
BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
wrapper.playItem("test_item");
verify(mMockBrowser, times(1)).connect();
MediaController mockController = mock(MediaController.class);
MediaController.TransportControls mockTransport =
mock(MediaController.TransportControls.class);
when(mockController.getTransportControls()).thenReturn(mockTransport);
MediaControllerFactory.inject(mockController);
browserConnCb.onConnected();
verify(mockTransport).playFromMediaId(eq("test_item"), eq(null));
verify(mMockBrowser).disconnect();
}
@Test
public void testGetFolderItems() {
BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
wrapper.getFolderItems("test_folder", mBrowseCb);
browserConnCb.onConnected();
verify(mMockBrowser).subscribe(any(), mSubscriptionCb.capture());
MediaBrowser.SubscriptionCallback subscriptionCb = mSubscriptionCb.getValue();
ArrayList<MediaItem> items = new ArrayList<MediaItem>();
MediaDescription.Builder bob = new MediaDescription.Builder();
bob.setTitle("test_song1");
bob.setMediaId("ts1");
items.add(new MediaItem(bob.build(), 0));
bob.setTitle("test_song2");
bob.setMediaId("ts2");
items.add(new MediaItem(bob.build(), 0));
subscriptionCb.onChildrenLoaded("test_folder", items);
verify(mMockBrowser).unsubscribe(eq("test_folder"));
verify(mBrowseCb).run(eq(BrowsedPlayerWrapper.STATUS_SUCCESS), eq("test_folder"),
mWrapperBrowseCb.capture());
List<ListItem> item_list = mWrapperBrowseCb.getValue();
for (int i = 0; i < item_list.size(); i++) {
Assert.assertFalse(item_list.get(i).isFolder);
Assert.assertEquals(item_list.get(i).song, Util.toMetadata(items.get(i)));
}
verify(mMockBrowser).disconnect();
}
}