blob: 02bdd7f796ab83548bf6e114ff74fbbacf18f45f [file] [log] [blame]
/*
* Copyright (C) 2015 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 android.media.cts;
import android.content.ComponentName;
import android.media.browse.MediaBrowser;
import android.media.browse.MediaBrowser.MediaItem;
import android.os.Bundle;
import android.service.media.MediaBrowserService;
import android.service.media.MediaBrowserService.BrowserRoot;
import android.test.InstrumentationTestCase;
import java.util.List;
/**
* Test {@link android.media.browse.MediaBrowserService}.
*/
public class MediaBrowserServiceTest extends InstrumentationTestCase {
// The maximum time to wait for an operation.
private static final long TIME_OUT_MS = 3000L;
private static final long WAIT_TIME_FOR_NO_RESPONSE_MS = 500L;
private static final ComponentName TEST_BROWSER_SERVICE = new ComponentName(
"com.android.cts.media", "android.media.cts.StubMediaBrowserService");
private final Object mWaitLock = new Object();
private final MediaBrowser.ConnectionCallback mConnectionCallback =
new MediaBrowser.ConnectionCallback() {
@Override
public void onConnected() {
synchronized (mWaitLock) {
mMediaBrowserService = StubMediaBrowserService.sInstance;
mWaitLock.notify();
}
}
};
private final MediaBrowser.SubscriptionCallback mSubscriptionCallback =
new MediaBrowser.SubscriptionCallback() {
@Override
public void onChildrenLoaded(String parentId, List<MediaItem> children) {
synchronized (mWaitLock) {
mOnChildrenLoaded = true;
mWaitLock.notify();
}
}
};
private final MediaBrowser.ItemCallback mItemCallback =
new MediaBrowser.ItemCallback() {
@Override
public void onItemLoaded(MediaItem item) {
synchronized (mWaitLock) {
mOnItemLoaded = true;
mWaitLock.notify();
}
}
};
private MediaBrowser mMediaBrowser;
private StubMediaBrowserService mMediaBrowserService;
private boolean mOnChildrenLoaded;
private boolean mOnItemLoaded;
@Override
protected void setUp() throws Exception {
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
mMediaBrowser = new MediaBrowser(getInstrumentation().getTargetContext(),
TEST_BROWSER_SERVICE, mConnectionCallback, null);
}
});
synchronized (mWaitLock) {
mMediaBrowser.connect();
mWaitLock.wait(TIME_OUT_MS);
}
assertNotNull(mMediaBrowserService);
}
public void testGetSessionToken() {
assertEquals(StubMediaBrowserService.sSession.getSessionToken(),
mMediaBrowserService.getSessionToken());
}
public void testNotifyChildrenChanged() throws Exception {
synchronized (mWaitLock) {
mMediaBrowser.subscribe(StubMediaBrowserService.MEDIA_ID_ROOT, mSubscriptionCallback);
mWaitLock.wait(TIME_OUT_MS);
assertTrue(mOnChildrenLoaded);
mOnChildrenLoaded = false;
mMediaBrowserService.notifyChildrenChanged(StubMediaBrowserService.MEDIA_ID_ROOT);
mWaitLock.wait(TIME_OUT_MS);
assertTrue(mOnChildrenLoaded);
}
}
public void testDelayedNotifyChildrenChanged() throws Exception {
synchronized (mWaitLock) {
mOnChildrenLoaded = false;
mMediaBrowser.subscribe(StubMediaBrowserService.MEDIA_ID_CHILDREN_DELAYED,
mSubscriptionCallback);
mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS);
assertFalse(mOnChildrenLoaded);
mMediaBrowserService.sendDelayedNotifyChildrenChanged();
mWaitLock.wait(TIME_OUT_MS);
assertTrue(mOnChildrenLoaded);
mOnChildrenLoaded = false;
mMediaBrowserService.notifyChildrenChanged(
StubMediaBrowserService.MEDIA_ID_CHILDREN_DELAYED);
mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS);
assertFalse(mOnChildrenLoaded);
mMediaBrowserService.sendDelayedNotifyChildrenChanged();
mWaitLock.wait(TIME_OUT_MS);
assertTrue(mOnChildrenLoaded);
}
}
public void testDelayedItem() throws Exception {
synchronized (mWaitLock) {
mOnItemLoaded = false;
mMediaBrowser.getItem(StubMediaBrowserService.MEDIA_ID_CHILDREN_DELAYED,
mItemCallback);
mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS);
assertFalse(mOnItemLoaded);
mMediaBrowserService.sendDelayedItemLoaded();
mWaitLock.wait(TIME_OUT_MS);
assertTrue(mOnItemLoaded);
}
}
public void testBrowserRoot() {
final String id = "test-id";
final String key = "test-key";
final String val = "test-val";
final Bundle extras = new Bundle();
extras.putString(key, val);
MediaBrowserService.BrowserRoot browserRoot = new BrowserRoot(id, extras);
assertEquals(id, browserRoot.getRootId());
assertEquals(val, browserRoot.getExtras().getString(key));
}
}