/* * Copyright 2012-2014 eBay Software Foundation and selendroid committers. * * 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 io.selendroid.standalone.server.support; import com.android.ddmlib.IDevice; import io.netty.handler.codec.http.HttpMethod; import io.selendroid.common.SelendroidCapabilities; import io.selendroid.common.device.DeviceTargetPlatform; import io.selendroid.standalone.android.AndroidApp; import io.selendroid.standalone.android.impl.DefaultAndroidEmulator; import io.selendroid.standalone.exceptions.AndroidDeviceException; import io.selendroid.standalone.exceptions.AndroidSdkException; import io.selendroid.standalone.server.util.HttpClientUtil; import org.apache.http.HttpResponse; import org.json.JSONObject; import org.openqa.selenium.Dimension; import org.openqa.selenium.logging.LogEntry; import java.io.File; import java.io.IOException; import java.util.List; import java.util.Locale; import java.util.Map; public class DeviceForTest extends DefaultAndroidEmulator { @Override public String runAdbCommand(String parameter) { return ""; } @Override public Locale getLocale() { return null; } public boolean deviceReady = false; public SelendroidDeviceServerStub selendroidDeviceServerStub = null; private final Dimension screenSize; private final DeviceTargetPlatform platform; public TestSessionListener testSessionListener = null; public DeviceForTest(DeviceTargetPlatform platform) { screenSize = new Dimension(320, 480); this.platform = platform; } public DeviceForTest(DeviceTargetPlatform platform, Dimension screenSize) { this.screenSize = screenSize; this.platform = platform; } @Override public boolean isDeviceReady() { return deviceReady; } @Override public void install(AndroidApp app) throws AndroidSdkException { // do nothing } @Override public void uninstall(AndroidApp app) throws AndroidSdkException { // do nothing } @Override public void clearUserData(AndroidApp app) throws AndroidSdkException { if (selendroidDeviceServerStub != null) { selendroidDeviceServerStub.stop(); } } @Override public void startSelendroid(AndroidApp aut, int port, SelendroidCapabilities caps) throws AndroidSdkException { try { selendroidDeviceServerStub = new SelendroidDeviceServerStub(port, testSessionListener); } catch (IOException e) { throw new RuntimeException(e); } } @Override public boolean isSelendroidRunning() { if (selendroidDeviceServerStub == null) { return false; } int status; try { HttpResponse r = HttpClientUtil.executeRequest("http://localhost:" + selendroidDeviceServerStub.getPort() + "/wd/hub/status", HttpMethod.GET); JSONObject response = HttpClientUtil.parseJsonResponse(r); status = response.getInt("status"); } catch (Exception e) { throw new RuntimeException(e); } return 0 == status ? true : false; } @Override public int getSelendroidsPort() { if (selendroidDeviceServerStub != null) { return selendroidDeviceServerStub.getPort(); } return 0; } @Override public boolean isEmulatorAlreadyExistent() { return true; } @Override public boolean isEmulatorStarted() { return false; } @Override public String getAvdName() { return "emulatorStub"; } @Override public File getAvdRootFolder() { return null; } @Override public Dimension getScreenSize() { return screenSize; } @Override public DeviceTargetPlatform getTargetPlatform() { return platform; } @Override public void start(Locale locale, int number, Map<String, Object> timeout) { try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } deviceReady = true; } @Override public void stop() throws AndroidDeviceException { deviceReady = false; if (selendroidDeviceServerStub != null) { selendroidDeviceServerStub.stop(); selendroidDeviceServerStub = null; } } @Override public void kill(AndroidApp app) throws AndroidDeviceException, AndroidSdkException {} public boolean screenSizeMatches(String requestedScreenSize) { // if screen size is not requested, just ignore it if (requestedScreenSize == null || requestedScreenSize.isEmpty()) { return true; } return getScreenSize().equals(requestedScreenSize); } @Override public Integer getPort() { // TODO Auto-generated method stub return null; } @Override public boolean isInstalled(AndroidApp app) throws AndroidSdkException { // TODO Auto-generated method stub return false; } @Override public List<LogEntry> getLogs() { return null; } @Override public byte[] takeScreenshot() throws AndroidDeviceException { // TODO Auto-generated method stub return null; } @Override public void setIDevice(IDevice iDevice) { // TODO Auto-generated method stub } @Override public String getSerial() { return "emulator-5554"; } @Override public void setVerbose() { } }