• 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 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
setUp()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
testWrap()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
testConnect()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
testEmptyRoot()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
testDisconnect()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
testGetRootId()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
testPlayItem()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
testGetFolderItems()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