• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
24 import androidx.test.filters.SmallTest;
25 import androidx.test.runner.AndroidJUnit4;
26 
27 import org.junit.Assert;
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.mockito.ArgumentCaptor;
32 import org.mockito.Captor;
33 import org.mockito.Mock;
34 import org.mockito.MockitoAnnotations;
35 
36 import java.util.ArrayList;
37 import java.util.List;
38 
39 @SmallTest
40 @RunWith(AndroidJUnit4.class)
41 public class BrowserPlayerWrapperTest {
42 
43     @Captor ArgumentCaptor<MediaBrowser.ConnectionCallback> mBrowserConnCb;
44     @Captor ArgumentCaptor<MediaBrowser.SubscriptionCallback> mSubscriptionCb;
45     @Captor ArgumentCaptor<List<ListItem>> mWrapperBrowseCb;
46     @Mock MediaBrowser mMockBrowser;
47     @Mock BrowsedPlayerWrapper.ConnectionCallback mConnCb;
48     @Mock BrowsedPlayerWrapper.BrowseCallback mBrowseCb;
49 
50     @Before
setUp()51     public void setUp() {
52         MockitoAnnotations.initMocks(this);
53 
54         when(mMockBrowser.getRoot()).thenReturn("root_folder");
55 
56         MediaBrowserFactory.inject(mMockBrowser);
57     }
58 
59     @Test
testWrap()60     public void testWrap() {
61         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
62         wrapper.connect(mConnCb);
63         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
64         verify(mMockBrowser).connect();
65 
66         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
67         browserConnCb.onConnected();
68 
69         verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_SUCCESS), eq(wrapper));
70         verify(mMockBrowser).disconnect();
71     }
72 
73     @Test
testConnect()74     public void testConnect() {
75         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
76         wrapper.connect(mConnCb);
77         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
78         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
79         browserConnCb.onConnectionFailed();
80 
81         verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_CONN_ERROR), eq(wrapper));
82 
83         wrapper.connect(mConnCb);
84         verify(mMockBrowser, times(2)).connect();
85 
86         browserConnCb.onConnected();
87         verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_SUCCESS), eq(wrapper));
88         verify(mMockBrowser, times(2)).disconnect();
89     }
90 
91     @Test
testEmptyRoot()92     public void testEmptyRoot() {
93         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
94 
95         doReturn("").when(mMockBrowser).getRoot();
96 
97         wrapper.connect(mConnCb);
98         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
99         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
100 
101         verify(mMockBrowser, times(1)).connect();
102 
103         browserConnCb.onConnected();
104         verify(mConnCb).run(eq(BrowsedPlayerWrapper.STATUS_CONN_ERROR), eq(wrapper));
105         verify(mMockBrowser, times(1)).disconnect();
106     }
107 
108     @Test
testDisconnect()109     public void testDisconnect() {
110         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
111         wrapper.connect(mConnCb);
112         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
113         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
114         browserConnCb.onConnected();
115         verify(mMockBrowser).disconnect();
116     }
117 
118     @Test
testGetRootId()119     public void testGetRootId() {
120         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
121         wrapper.connect(mConnCb);
122         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
123         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
124         browserConnCb.onConnected();
125 
126         Assert.assertEquals("root_folder", wrapper.getRootId());
127         verify(mMockBrowser).disconnect();
128     }
129 
130     @Test
testPlayItem()131     public void testPlayItem() {
132         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
133         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
134         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
135 
136         wrapper.playItem("test_item");
137         verify(mMockBrowser, times(1)).connect();
138 
139         MediaController mockController = mock(MediaController.class);
140         MediaController.TransportControls mockTransport =
141                 mock(MediaController.TransportControls.class);
142         when(mockController.getTransportControls()).thenReturn(mockTransport);
143         MediaControllerFactory.inject(mockController);
144 
145         browserConnCb.onConnected();
146         verify(mockTransport).playFromMediaId(eq("test_item"), eq(null));
147         verify(mMockBrowser).disconnect();
148     }
149 
150     @Test
testGetFolderItems()151     public void testGetFolderItems() {
152         BrowsedPlayerWrapper wrapper = BrowsedPlayerWrapper.wrap(null, "test", "test");
153         verify(mMockBrowser).testInit(any(), any(), mBrowserConnCb.capture(), any());
154         MediaBrowser.ConnectionCallback browserConnCb = mBrowserConnCb.getValue();
155 
156         wrapper.getFolderItems("test_folder", mBrowseCb);
157 
158 
159         browserConnCb.onConnected();
160         verify(mMockBrowser).subscribe(any(), mSubscriptionCb.capture());
161         MediaBrowser.SubscriptionCallback subscriptionCb = mSubscriptionCb.getValue();
162 
163         ArrayList<MediaItem> items = new ArrayList<MediaItem>();
164         MediaDescription.Builder bob = new MediaDescription.Builder();
165         bob.setTitle("test_song1");
166         bob.setMediaId("ts1");
167         items.add(new MediaItem(bob.build(), 0));
168         bob.setTitle("test_song2");
169         bob.setMediaId("ts2");
170         items.add(new MediaItem(bob.build(), 0));
171 
172         subscriptionCb.onChildrenLoaded("test_folder", items);
173         verify(mMockBrowser).unsubscribe(eq("test_folder"));
174         verify(mBrowseCb).run(eq(BrowsedPlayerWrapper.STATUS_SUCCESS), eq("test_folder"),
175                 mWrapperBrowseCb.capture());
176 
177         List<ListItem> item_list = mWrapperBrowseCb.getValue();
178         for (int i = 0; i < item_list.size(); i++) {
179             Assert.assertFalse(item_list.get(i).isFolder);
180             Assert.assertEquals(item_list.get(i).song, Util.toMetadata(items.get(i)));
181         }
182 
183         verify(mMockBrowser).disconnect();
184     }
185 }
186