diff options
author | Daniel Xie <dxie@google.com> | 2015-11-17 01:04:44 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-11-17 01:04:44 +0000 |
commit | e48654cb7ab0736a02231d003876cdabfc4d5cf8 (patch) | |
tree | 22824ddebf2a89c5fa8a42e221b318010d080f4b | |
parent | 54f86cdc66349bca5e7a93dbaa47dae0e8b615fb (diff) | |
parent | e612a9edc40a595a3b250f7d213fa1e045506e8b (diff) | |
download | cts-kitkat-cts-release.tar.gz |
Merge "Basic test of android.media.RemoteController" into kitkat-cts-devkitkat-cts-release
-rw-r--r-- | tests/tests/media/src/android/media/cts/RemoteControllerTest.java | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/tests/tests/media/src/android/media/cts/RemoteControllerTest.java b/tests/tests/media/src/android/media/cts/RemoteControllerTest.java new file mode 100644 index 00000000000..25118898ecc --- /dev/null +++ b/tests/tests/media/src/android/media/cts/RemoteControllerTest.java @@ -0,0 +1,163 @@ +/* + * 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.Context; +import android.media.RemoteController; +import android.media.RemoteController.OnClientUpdateListener; +import android.test.InstrumentationTestCase; +import android.test.UiThreadTest; +import android.view.KeyEvent; +import android.util.Log; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Tests for {@link RemoteController}. + */ +public class RemoteControllerTest extends InstrumentationTestCase { + + private static final Set<Integer> MEDIA_KEY_EVENT = new HashSet<Integer>(); + static { + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_MEDIA_PLAY); + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_MEDIA_PAUSE); + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE); + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_MUTE); + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_HEADSETHOOK); + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_MEDIA_STOP); + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_MEDIA_NEXT); + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_MEDIA_PREVIOUS); + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_MEDIA_REWIND); + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_MEDIA_RECORD); + MEDIA_KEY_EVENT.add(KeyEvent.KEYCODE_MEDIA_FAST_FORWARD); + } + + static OnClientUpdateListener listener = new OnClientUpdateListener() { + @Override + public void onClientChange(boolean clearing) {} + @Override + public void onClientPlaybackStateUpdate(int state) {} + @Override + public void onClientPlaybackStateUpdate( + int state, long stateChangeTimeMs, long currentPosMs, float speed) {} + @Override + public void onClientTransportControlUpdate(int transportControlFlags) {} + @Override + public void onClientMetadataUpdate(RemoteController.MetadataEditor metadataEditor) {} + }; + + private Context mContext; + + @Override + protected void setUp() throws Exception { + super.setUp(); + mContext = getInstrumentation().getTargetContext(); + } + + private RemoteController createRemoteController() { + return new RemoteController(mContext, listener); + } + + @UiThreadTest + public void testGetEstimatedMediaPosition() { + assertTrue(createRemoteController().getEstimatedMediaPosition() < 0); + } + + @UiThreadTest + public void testSendMediaKeyEvent() { + RemoteController remoteController = createRemoteController(); + for (Integer mediaKeyEvent : MEDIA_KEY_EVENT) { + assertFalse(remoteController.sendMediaKeyEvent( + new KeyEvent(KeyEvent.ACTION_DOWN, mediaKeyEvent))); + } + } + + @UiThreadTest + public void testSeekTo_negativeValues() { + try { + createRemoteController().seekTo(-1); + fail("timeMs must be >= 0"); + } catch (IllegalArgumentException expected) {} + } + + @UiThreadTest + public void testSeekTo() { + assertTrue(createRemoteController().seekTo(0)); + } + + @UiThreadTest + public void testSetArtworkConfiguration() { + assertTrue(createRemoteController().setArtworkConfiguration(1, 1)); + } + + @UiThreadTest + public void testClearArtworkConfiguration() { + assertTrue(createRemoteController().clearArtworkConfiguration()); + } + + @UiThreadTest + public void testSetSynchronizationMode_unregisteredRemoteController() { + RemoteController remoteController = createRemoteController(); + assertFalse(remoteController.setSynchronizationMode( + RemoteController.POSITION_SYNCHRONIZATION_NONE)); + assertFalse(remoteController.setSynchronizationMode( + RemoteController.POSITION_SYNCHRONIZATION_CHECK)); + } + + @UiThreadTest + public void testEditMetadata() { + assertNotNull(createRemoteController().editMetadata()); + } + + @UiThreadTest + public void testOnClientUpdateListenerUnchanged() throws Exception { + Map<String, List<Method>> methodMap = new HashMap<String, List<Method>>(); + for (Method method : listener.getClass().getDeclaredMethods()) { + if (!methodMap.containsKey(method.getName())) { + methodMap.put(method.getName(), new ArrayList<Method>()); + } + methodMap.get(method.getName()).add(method); + } + + for (Method method : OnClientUpdateListener.class.getDeclaredMethods()) { + assertTrue("Method not found: " + method.getName(), + methodMap.containsKey(method.getName())); + List<Method> implementedMethodList = methodMap.get(method.getName()); + assertTrue("Method signature changed: " + method, + matchMethod(method, implementedMethodList)); + } + } + + private static boolean matchMethod(Method method, List<Method> potentialMatches) { + for (Method potentialMatch : potentialMatches) { + if (method.getName().equals(potentialMatch.getName()) && + method.getReturnType().equals(potentialMatch.getReturnType()) && + Arrays.equals(method.getTypeParameters(), + potentialMatch.getTypeParameters())) { + return true; + } + } + return false; + } +} |