| /* |
| * Copyright (C) 2013 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 com.android.ddmlib; |
| |
| import com.android.annotations.NonNull; |
| |
| import junit.framework.TestCase; |
| |
| import org.easymock.EasyMock; |
| import org.easymock.IAnswer; |
| |
| import java.util.concurrent.TimeUnit; |
| |
| public class DeviceTest extends TestCase { |
| public void testScreenRecorderOptions() { |
| ScreenRecorderOptions options = |
| new ScreenRecorderOptions.Builder() |
| .setBitRate(6) |
| .setSize(600,400) |
| .build(); |
| assertEquals("screenrecord --size 600x400 --bit-rate 6000000 /sdcard/1.mp4", |
| Device.getScreenRecorderCommand("/sdcard/1.mp4", options)); |
| |
| options = new ScreenRecorderOptions.Builder().setTimeLimit(100, TimeUnit.SECONDS).build(); |
| assertEquals("screenrecord --time-limit 100 /sdcard/1.mp4", |
| Device.getScreenRecorderCommand("/sdcard/1.mp4", options)); |
| |
| options = new ScreenRecorderOptions.Builder().setTimeLimit(4, TimeUnit.MINUTES).build(); |
| assertEquals("screenrecord --time-limit 180 /sdcard/1.mp4", |
| Device.getScreenRecorderCommand("/sdcard/1.mp4", options)); |
| } |
| |
| /** Helper method that sets the mock device to return the given response on a shell command */ |
| @SuppressWarnings("unchecked") |
| static void injectShellResponse(IDevice mockDevice, final String response) throws Exception { |
| IAnswer<Object> shellAnswer = new IAnswer<Object>() { |
| @Override |
| public Object answer() throws Throwable { |
| // insert small delay to simulate latency |
| Thread.sleep(50); |
| IShellOutputReceiver receiver = |
| (IShellOutputReceiver)EasyMock.getCurrentArguments()[1]; |
| byte[] inputData = response.getBytes(); |
| receiver.addOutput(inputData, 0, inputData.length); |
| return null; |
| } |
| }; |
| mockDevice.executeShellCommand(EasyMock.<String>anyObject(), |
| EasyMock.<IShellOutputReceiver>anyObject(), |
| EasyMock.anyLong(), EasyMock.<TimeUnit>anyObject()); |
| EasyMock.expectLastCall().andAnswer(shellAnswer); |
| } |
| |
| /** Helper method that sets the mock device to throw the given exception on a shell command */ |
| static void injectShellExceptionResponse(@NonNull IDevice mockDevice, @NonNull Exception e) |
| throws Exception { |
| mockDevice.executeShellCommand(EasyMock.<String>anyObject(), |
| EasyMock.<IShellOutputReceiver>anyObject(), |
| EasyMock.anyLong(), EasyMock.<TimeUnit>anyObject()); |
| EasyMock.expectLastCall().andThrow(e); |
| } |
| |
| /** Helper method that creates a mock device. */ |
| static IDevice createMockDevice() { |
| IDevice mockDevice = EasyMock.createMock(IDevice.class); |
| EasyMock.expect(mockDevice.getSerialNumber()).andStubReturn("serial"); |
| EasyMock.expect(mockDevice.isOnline()).andStubReturn(Boolean.TRUE); |
| return mockDevice; |
| } |
| } |