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