Home | History | Annotate | Download | only in newavrcp
      1 /*
      2  * Copyright 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.bluetooth.avrcp;
     18 
     19 import static org.mockito.Mockito.*;
     20 
     21 import android.media.MediaDescription;
     22 import android.media.browse.MediaBrowser.MediaItem;
     23 import android.support.test.filters.SmallTest;
     24 import android.support.test.runner.AndroidJUnit4;
     25 
     26 import org.junit.Assert;
     27 import org.junit.Before;
     28 import org.junit.Test;
     29 import org.junit.runner.RunWith;
     30 import org.mockito.ArgumentCaptor;
     31 import org.mockito.Captor;
     32 import org.mockito.Mock;
     33 import org.mockito.MockitoAnnotations;
     34 
     35 import java.util.ArrayList;
     36 import java.util.List;
     37 
     38 @SmallTest
     39 @RunWith(AndroidJUnit4.class)
     40 public class BrowserPlayerWrapperTest {
     41 
     42     @Captor ArgumentCaptor<MediaBrowser.ConnectionCallback> mBrowserConnCb;
     43     @Captor ArgumentCaptor<MediaBrowser.SubscriptionCallback> mSubscriptionCb;
     44     @Captor ArgumentCaptor<List<ListItem>> mWrapperBrowseCb;
     45     @Mock MediaBrowser mMockBrowser;
     46     @Mock BrowsedPlayerWrapper.ConnectionCallback mConnCb;
     47     @Mock BrowsedPlayerWrapper.BrowseCallback mBrowseCb;
     48 
     49     @Before
     50     public void setUp() {
     51         MockitoAnnotations.initMocks(this);
     52 
     53         when(mMockBrowser.getRoot()).thenReturn("root_folder");
     54 
     55         MediaBrowserFactory.inject(mMockBrowser);
     56     }
     57 
     58     @Test
     59     public void testWrap() {
     60         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
     61         wrapper.connect(mConnCb);
     62         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
     63         verify(mMockBrowser).connect();
     64 
     65         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
     66         browserConnCb.onConnected();
     67 
     68         verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_SUCCESS), eq(wrapper));
     69         verify(mMockBrowser).disconnect();
     70     }
     71 
     72     @Test
     73     public void testConnect() {
     74         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
     75         wrapper.connect(mConnCb);
     76         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
     77         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
     78         browserConnCb.onConnectionFailed();
     79 
     80         verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_CONN_ERROR), eq(wrapper));
     81 
     82         wrapper.connect(mConnCb);
     83         verify(mMockBrowser, times(2)).connect();
     84 
     85         browserConnCb.onConnected();
     86         verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_SUCCESS), eq(wrapper));
     87         verify(mMockBrowser, times(2)).disconnect();
     88     }
     89 
     90     @Test
     91     public void testEmptyRoot() {
     92         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
     93 
     94         doReturn("").when(mMockBrowser).getRoot();
     95 
     96         wrapper.connect(mConnCb);
     97         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
     98         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
     99 
    100         verify(mMockBrowser, times(1)).connect();
    101 
    102         browserConnCb.onConnected();
    103         verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_CONN_ERROR), eq(wrapper));
    104         verify(mMockBrowser, times(1)).disconnect();
    105     }
    106 
    107     @Test
    108     public void testDisconnect() {
    109         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
    110         wrapper.connect(mConnCb);
    111         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
    112         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
    113         browserConnCb.onConnected();
    114         verify(mMockBrowser).disconnect();
    115     }
    116 
    117     @Test
    118     public void testGetRootId() {
    119         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
    120         wrapper.connect(mConnCb);
    121         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
    122         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
    123         browserConnCb.onConnected();
    124 
    125         Assert.assertEquals("root_folder", wrapper.getRootId());
    126         verify(mMockBrowser).disconnect();
    127     }
    128 
    129     @Test
    130     public void testPlayItem() {
    131         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
    132         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
    133         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
    134 
    135         wrapper.playItem("test_item");
    136         verify(mMockBrowser, times(1)).connect();
    137 
    138         MediaController mockController = mock(MediaController.class);
    139         MediaController.TransportControls mockTransport =
    140                 mock(MediaController.TransportControls.class);
    141         when(mockController.getTransportControls()).thenReturn(mockTransport);
    142         MediaControllerFactory.inject(mockController);
    143 
    144         browserConnCb.onConnected();
    145         verify(mockTransport).playFromMediaId(eq("test_item"), eq(null));
    146         verify(mMockBrowser).disconnect();
    147     }
    148 
    149     @Test
    150     public void testGetFolderItems() {
    151         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
    152         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
    153         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
    154 
    155         wrapper.getFolderItems("test_folder", mBrowseCb);
    156 
    157 
    158         browserConnCb.onConnected();
    159         verify(mMockBrowser).subscribe(any(), mSubscriptionCb.capture());
    160         MediaBrowser.SubscriptionCallback subscriptionCb = mSubscriptionCb.getValue();
    161 
    162         ArrayList<MediaItem> items = new ArrayList<MediaItem>();
    163         MediaDescription.Builder bob = new MediaDescription.Builder();
    164         bob.setTitle("test_song1");
    165         bob.setMediaId("ts1");
    166         items.add(new MediaItem(bob.build(), 0));
    167         bob.setTitle("test_song2");
    168         bob.setMediaId("ts2");
    169         items.add(new MediaItem(bob.build(), 0));
    170 
    171         subscriptionCb.onChildrenLoaded("test_folder", items);
    172         verify(mMockBrowser).unsubscribe(eq("test_folder"));
    173         verify(mBrowseCb).run(eq(BrowsedPlayerWrapper.STATUS_SUCCESS), eq("test_folder"),
    174                 mWrapperBrowseCb.capture());
    175 
    176         List<ListItem> item_list = mWrapperBrowseCb.getValue();
    177         for (int i = 0; i < item_list.size(); i++) {
    178             Assert.assertFalse(item_list.get(i).isFolder);
    179             Assert.assertEquals(item_list.get(i).song, Util.toMetadata(items.get(i)));
    180         }
    181 
    182         verify(mMockBrowser).disconnect();
    183     }
    184 }
    185