From 59665823542df701a265f902db2ae826c9ce512b Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sat, 30 May 2020 15:14:18 -0500 Subject: [PATCH 1/4] test: tests for asMap method on driver options --- .../java_client/remote/MobileOptionsTest.java | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/src/test/java/io/appium/java_client/remote/MobileOptionsTest.java b/src/test/java/io/appium/java_client/remote/MobileOptionsTest.java index 27e1a6765..34a80b4d2 100644 --- a/src/test/java/io/appium/java_client/remote/MobileOptionsTest.java +++ b/src/test/java/io/appium/java_client/remote/MobileOptionsTest.java @@ -23,8 +23,10 @@ import java.net.MalformedURLException; import java.net.URL; import java.time.Duration; -import java.util.ArrayList; +import java.util.Map; +import java.util.TreeMap; +import static java.util.Collections.unmodifiableMap; import static org.junit.Assert.*; public class MobileOptionsTest { @@ -106,4 +108,39 @@ public void setsMobileBooleanCapabilities() { assertFalse(mobileOptions.doesFullReset()); assertFalse(mobileOptions.doesPrintPageSourceOnFindFailure()); } + + @Test + public void createsAsMap() { + MutableCapabilities capabilities = new MutableCapabilities(); + capabilities.setCapability("deviceName", "Pixel"); + capabilities.setCapability("platformVersion", "10"); + capabilities.setCapability("newCommandTimeout", 60); + + mobileOptions = new MobileOptions<>(capabilities); + + mobileOptions.setAutomationName(AutomationName.ANDROID_UIAUTOMATOR2) + .setPlatformName("android") + .setOtherApps("/path/to/app.apk") + .setLocale("fr_CA") + .setUdid("1ae203187fc012g") + .setOrientation(ScreenOrientation.LANDSCAPE) + .setLanguage("fr"); + + Map actual = mobileOptions.asMap(); + + System.out.println(Duration.ofSeconds(60).getClass()); + TreeMap expected = new TreeMap<>(); + expected.put("appium:automationName", "UIAutomator2"); + expected.put("platformName", "android"); + expected.put("appium:platformVersion", "10"); + expected.put("appium:deviceName", "Pixel"); + expected.put("appium:otherApps", "/path/to/app.apk"); + expected.put("appium:locale", "fr_CA"); + expected.put("appium:udid", "1ae203187fc012g"); + expected.put("appium:orientation", ScreenOrientation.LANDSCAPE); + expected.put("appium:newCommandTimeout", 60); + expected.put("appium:language", "fr"); + + assertEquals(unmodifiableMap(expected), actual); + } } From 81ec04584ed69eb61f76fa78805f0355ee0e9b67 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sat, 30 May 2020 15:14:40 -0500 Subject: [PATCH 2/4] feat: implement asMap method for driver options --- .../java_client/remote/MobileOptions.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/io/appium/java_client/remote/MobileOptions.java b/src/main/java/io/appium/java_client/remote/MobileOptions.java index 6a7810f1a..33d0daac2 100644 --- a/src/main/java/io/appium/java_client/remote/MobileOptions.java +++ b/src/main/java/io/appium/java_client/remote/MobileOptions.java @@ -16,6 +16,8 @@ package io.appium.java_client.remote; +import static io.appium.java_client.internal.CapabilityHelpers.APPIUM_PREFIX; + import org.openqa.selenium.Capabilities; import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.ScreenOrientation; @@ -23,6 +25,10 @@ import java.net.URL; import java.time.Duration; +import java.util.Map; +import java.util.TreeMap; + +import static java.util.Collections.unmodifiableMap; public class MobileOptions> extends MutableCapabilities { @@ -512,4 +518,20 @@ protected T amend(String optionName, Object value) { setCapability(optionName, value); return (T) this; } + + @Override + public Map asMap() { + Map toReturn = new TreeMap<>(); + + Map capsMap = super.asMap(); + capsMap.forEach((key, value) -> { + if (key.equals("platformName")) { + toReturn.put(key, value); + } else { + toReturn.put(APPIUM_PREFIX + key, value); + } + }); + + return unmodifiableMap(toReturn); + } } From f18f3d01a33db62e379d763b6575f1d522800c81 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 1 Jun 2020 13:18:32 -0500 Subject: [PATCH 3/4] fix: account for all existing w3c compliant keys --- .../io/appium/java_client/remote/MobileOptions.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/MobileOptions.java b/src/main/java/io/appium/java_client/remote/MobileOptions.java index 33d0daac2..8c0d8eb39 100644 --- a/src/main/java/io/appium/java_client/remote/MobileOptions.java +++ b/src/main/java/io/appium/java_client/remote/MobileOptions.java @@ -16,11 +16,10 @@ package io.appium.java_client.remote; -import static io.appium.java_client.internal.CapabilityHelpers.APPIUM_PREFIX; - import org.openqa.selenium.Capabilities; import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.ScreenOrientation; +import org.openqa.selenium.remote.AcceptedW3CCapabilityKeys; import org.openqa.selenium.remote.CapabilityType; import java.net.URL; @@ -28,6 +27,7 @@ import java.util.Map; import java.util.TreeMap; +import static io.appium.java_client.internal.CapabilityHelpers.APPIUM_PREFIX; import static java.util.Collections.unmodifiableMap; public class MobileOptions> extends MutableCapabilities { @@ -523,9 +523,9 @@ protected T amend(String optionName, Object value) { public Map asMap() { Map toReturn = new TreeMap<>(); - Map capsMap = super.asMap(); - capsMap.forEach((key, value) -> { - if (key.equals("platformName")) { + super.asMap().forEach((key, value) -> { + AcceptedW3CCapabilityKeys acceptedW3CCapabilityKeys = new AcceptedW3CCapabilityKeys(); + if (acceptedW3CCapabilityKeys.test(key) || key.startsWith(APPIUM_PREFIX)) { toReturn.put(key, value); } else { toReturn.put(APPIUM_PREFIX + key, value); From bdbbe60e4a1378a0ef92bd3881ea661e10d01ce4 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 1 Jun 2020 15:05:20 -0500 Subject: [PATCH 4/4] refactor: use stream to modify asMap collection without creating intermediary object --- .../java_client/remote/MobileOptions.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/MobileOptions.java b/src/main/java/io/appium/java_client/remote/MobileOptions.java index 8c0d8eb39..8843fbcca 100644 --- a/src/main/java/io/appium/java_client/remote/MobileOptions.java +++ b/src/main/java/io/appium/java_client/remote/MobileOptions.java @@ -25,7 +25,7 @@ import java.net.URL; import java.time.Duration; import java.util.Map; -import java.util.TreeMap; +import java.util.stream.Collectors; import static io.appium.java_client.internal.CapabilityHelpers.APPIUM_PREFIX; import static java.util.Collections.unmodifiableMap; @@ -521,17 +521,11 @@ protected T amend(String optionName, Object value) { @Override public Map asMap() { - Map toReturn = new TreeMap<>(); - - super.asMap().forEach((key, value) -> { - AcceptedW3CCapabilityKeys acceptedW3CCapabilityKeys = new AcceptedW3CCapabilityKeys(); - if (acceptedW3CCapabilityKeys.test(key) || key.startsWith(APPIUM_PREFIX)) { - toReturn.put(key, value); - } else { - toReturn.put(APPIUM_PREFIX + key, value); - } - }); - - return unmodifiableMap(toReturn); + AcceptedW3CCapabilityKeys acceptedW3CCapabilityKeys = new AcceptedW3CCapabilityKeys(); + + return unmodifiableMap(super.asMap().entrySet().stream().collect(Collectors.toMap( + entry -> (acceptedW3CCapabilityKeys.test(entry.getKey()) || entry.getKey().startsWith(APPIUM_PREFIX)) ? + entry.getKey() : APPIUM_PREFIX + entry.getKey(), + Map.Entry::getValue))); } }