package io.selendroid.common; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import io.selendroid.common.SelendroidCapabilities; import org.json.JSONObject; import org.junit.Assert; import org.junit.Test; /** * Makes sure that the new function "getDefaultApp" will return the correct application under test from the apps store * or peacefully returns null if the app is not in the apps store. If the laucch activity is also specified with appName * then just return the appName so it can be installed to the apps store. * * The tests will cover these scenarios: * <ul> * * <li>If app does not exists in the apps store and the launch activity is specified, then just return * the request string as app under test so it can be installed to the device by the SelendroidStandaloneDriver. </li> * <li>If app does not exists in the appstore, and the launch activity is not specified then return null.</li> * <li>If appName and appVersion are specified then return the app under test as "appName:appVersion" if it is found in the * apps store or null if it is not.</li> * <li>If appName is specified but not the appVersion then return the latest version of the apps in the apps store as app * under test in the format of "appName:appVersion" or null if app is not found in apps store.</li> * </li> * <ul> */ public class SelendroidCapabilitiesGetDefaultAppTest { // Unsorted List of String represents supported apps in the apps store. private static final String elements[] = { "selendroid", "io.selendroid.test", "io.selendroid.test:0.12.1", "io.selendroid.test:0.11.1", "io.selendroid.test:0.11.0", "io.selendroid.test:0.12.0", }; private static final Set supportedApps = new HashSet(Arrays.asList(elements)); @Test public void testShouldReturnAppWithSpecifiedLaunchActivityEvenIfNotInStore() throws Exception { JSONObject jsonSource = new JSONObject(); // app is not in store jsonSource.put("aut", "io.selendroid.test:0.13.0"); jsonSource.put("launchActivity", "HomeScreenActivity"); SelendroidCapabilities capa = new SelendroidCapabilities(jsonSource); String defaultApp = capa.getDefaultApp(supportedApps); Assert.assertEquals("io.selendroid.test:0.13.0", defaultApp); } @Test public void testReturnsTheLatestVersionOfApp() throws Exception { JSONObject jsonSource = new JSONObject(); jsonSource.put("aut", "io.selendroid.test"); SelendroidCapabilities capa = new SelendroidCapabilities(jsonSource); String defaultApp = capa.getDefaultApp(supportedApps); Assert.assertEquals("io.selendroid.test:0.12.1", defaultApp); } @Test public void testReturnsAnExactMatchWithoutSpecifiedVersion() throws Exception { JSONObject jsonSource = new JSONObject(); jsonSource.put("aut", "selendroid"); SelendroidCapabilities capa = new SelendroidCapabilities(jsonSource); String defaultApp = capa.getDefaultApp(supportedApps); Assert.assertEquals("selendroid", defaultApp); } @Test public void testReturnsAnExactMatchWithSpecifiedVersion() throws Exception { JSONObject jsonSource = new JSONObject(); jsonSource.put("aut", "io.selendroid.test:0.11.0"); SelendroidCapabilities capa = new SelendroidCapabilities(jsonSource); String defaultApp = capa.getDefaultApp(supportedApps); Assert.assertEquals("io.selendroid.test:0.11.0", defaultApp); } @Test public void testReturnsNullIfNoMatchingAppFound() throws Exception { JSONObject jsonSource = new JSONObject(); jsonSource.put("aut", "io.selendroid.test2"); SelendroidCapabilities capa = new SelendroidCapabilities(jsonSource); String defaultApp = capa.getDefaultApp(supportedApps); Assert.assertNull(defaultApp); } @Test public void testReturnsNullIfOnlyVersionIsSpecified() throws Exception { JSONObject jsonSource = new JSONObject(); jsonSource.put("aut", "0.12.0"); SelendroidCapabilities capa = new SelendroidCapabilities(jsonSource); String defaultApp = capa.getDefaultApp(supportedApps); Assert.assertNull(defaultApp); } @Test public void testResturnsNullIfAppAndVersionNotFound() throws Exception { JSONObject jsonSource = new JSONObject(); jsonSource.put("aut", "io.selendroid.test:0.13.0"); SelendroidCapabilities capa = new SelendroidCapabilities(jsonSource); String defaultApp = capa.getDefaultApp(supportedApps); Assert.assertNull(defaultApp); } }