package com.thoughtworks.calabash.android; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.util.HashMap; import static com.thoughtworks.calabash.android.Utils.runCommand; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class TestUtils { public static final String ACTIVITY_MAIN = "Main Activity"; public static final String ACTIVITY_CURRENT_LOCATION = "Current Location"; public static final String ACTIVITY_SCROLL_LIST = "Scroll List"; public static final String ACTIVITY_NESTED_VIEWS = "Nested Views"; public static final String ACTIVITY_SWIPE_PAGE = "Swipe Page"; public static final String ACTIVITY_SIMPLE_ELEMENTS = "Simple Elements"; public static final String ACTIVITY_DATE_TIME_ELEMENTS = "DateTime Elements"; public static final String ACTIVITY_WEB_VIEW = "Web view"; public static HashMap<String, String> activityMap = new HashMap<String, String>() {{ put(ACTIVITY_SIMPLE_ELEMENTS, "SimpleElementsActivity"); put(ACTIVITY_SWIPE_PAGE, "SwipePageActivity"); put(ACTIVITY_SCROLL_LIST, "ScrollListActivity"); put(ACTIVITY_NESTED_VIEWS, "NestedViewsActivity"); put(ACTIVITY_CURRENT_LOCATION, "CurrentLocationActivity"); put(ACTIVITY_MAIN, "MyActivity"); put(ACTIVITY_DATE_TIME_ELEMENTS, "DateTimeElementsActivity"); put(ACTIVITY_WEB_VIEW, "WebViewActivity"); }}; public static File createTempDir(String directoryName) throws IOException { File tempFile = File.createTempFile("foo", "bar"); tempFile.delete(); File tempDir = new File(tempFile.getParentFile(), directoryName); tempDir.mkdir(); return tempDir; } public static File createTempDirWithProj(String androidApp, File dir) throws IOException { File androidAppPath = new File("tests/resources/" + androidApp); File tempAndroidPath = new File(dir, androidApp); FileUtils.copyFile(androidAppPath, tempAndroidPath); return tempAndroidPath; } public static void goToActivity(AndroidApplication application, final String activityName) throws CalabashException, OperationTimedoutException { application.query("* marked:'" + activityName + "'").touch(); application.waitForActivity(activityMap.get(activityName), 6); } public static AndroidApplication installAppOnEmulator(String serial, String packageName, File androidApkPath) throws CalabashException { AndroidConfiguration configuration = new AndroidConfiguration(); configuration.setLogsDirectory(new File("logs")); configuration.setSerial(serial); return installAppOnEmulator(serial, packageName, androidApkPath, configuration); } public static AndroidApplication installAppOnEmulator(String serial, String packageName, File androidApkPath, AndroidConfiguration configuration) throws CalabashException { uninstall(packageName, serial); configuration.setPauseTime(4000); AndroidRunner androidRunner = new AndroidRunner(androidApkPath.getAbsolutePath(), configuration); androidRunner.setup(); AndroidApplication application = androidRunner.start(); assertTrue(isAppInstalled(packageName, serial)); assertTrue(isMainActivity(application, activityMap.get(ACTIVITY_MAIN))); return application; } public static void uninstall(String packageName, String serial) throws CalabashException { String[] command = {TestUtils.getAdbPath(), "-s", serial, "uninstall", packageName}; try { runCommand(command); } catch (CalabashException e) { fail(e.getMessage()); } } private static String getAdbPath() throws CalabashException { return EnvironmentInitializer.initialize(new AndroidConfiguration()).getAdb(); } public static boolean isAppInstalled(String appPackageName, final String serialNo) throws CalabashException { String[] cmd = new String[]{TestUtils.getAdbPath(), "-s", serialNo, "shell", "pm", "path", appPackageName}; try { String output = runCommand(cmd, "failed"); return output.contains(appPackageName); } catch (CalabashException e) { fail("failed to see if app is installed"); } return false; } public static boolean isMainActivity(AndroidApplication application, String mainActivity) { try { return application.getCurrentActivity().toLowerCase().contains(mainActivity.toLowerCase()); } catch (CalabashException e) { fail(mainActivity + " wasn't the main activity"); } return false; } public static String readFileFromResources(final String fileName) throws IOException { final File file = new File("tests/resources/" + fileName); return FileUtils.readFileToString(file, "UTF-8"); } }