From 90e8902ec4c04f529f236bb5ab55487eb40883ae Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Tue, 10 Apr 2018 16:53:57 +0200 Subject: [PATCH 1/8] Refactor network connection setting on Android --- .../java_client/android/AndroidDriver.java | 1 + .../android/AndroidMobileCommandHelper.java | 7 +- .../java_client/android/Connection.java | 6 + .../android/connection/ConnectionState.java | 55 ++++++++ .../connection/ConnectionStateBuilder.java | 125 ++++++++++++++++++ .../HasNetworkConnection.java | 30 ++--- .../android/AndroidConnectionTest.java | 37 ++++-- 7 files changed, 229 insertions(+), 32 deletions(-) create mode 100644 src/main/java/io/appium/java_client/android/connection/ConnectionState.java create mode 100644 src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java rename src/main/java/io/appium/java_client/android/{ => connection}/HasNetworkConnection.java (69%) diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 3af82826b..53dc65f4b 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -25,6 +25,7 @@ import io.appium.java_client.FindsByAndroidUIAutomator; import io.appium.java_client.LocksDevice; import io.appium.java_client.PressesKeyCode; +import io.appium.java_client.android.connection.HasNetworkConnection; import io.appium.java_client.remote.MobilePlatform; import io.appium.java_client.screenrecording.CanRecordScreen; import io.appium.java_client.service.local.AppiumDriverLocalService; diff --git a/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java b/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java index e9c790587..5b51eeacf 100644 --- a/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java +++ b/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java @@ -197,13 +197,12 @@ public class AndroidMobileCommandHelper extends MobileCommand { /** * This method forms a {@link Map} of parameters for the setting of device network connection. * - * @param connection The bitmask of the desired connection + * @param bitMask The bitmask of the desired connection * @return a key-value pair. The key is the command name. The value is a {@link Map} command arguments. */ - public static Map.Entry> setConnectionCommand(Connection connection) { + public static Map.Entry> setConnectionCommand(int bitMask) { String[] parameters = new String[] {"name", "parameters"}; - Object[] values = - new Object[] {"network_connection", ImmutableMap.of("type", connection.bitMask)}; + Object[] values = new Object[] {"network_connection", ImmutableMap.of("type", bitMask)}; return new AbstractMap.SimpleEntry<>( SET_NETWORK_CONNECTION, prepareArguments(parameters, values)); } diff --git a/src/main/java/io/appium/java_client/android/Connection.java b/src/main/java/io/appium/java_client/android/Connection.java index 7c22a592d..1e5ae3a54 100644 --- a/src/main/java/io/appium/java_client/android/Connection.java +++ b/src/main/java/io/appium/java_client/android/Connection.java @@ -18,7 +18,9 @@ /** * for use with setting Network Connections on a mobile device. + * @deprecated Use {@link io.appium.java_client.android.connection.ConnectionState} instead */ +@Deprecated public enum Connection { NONE(0), AIRPLANE(1), @@ -31,4 +33,8 @@ public enum Connection { Connection(int bitMask) { this.bitMask = bitMask; } + + public int getBitMask() { + return bitMask; + } } diff --git a/src/main/java/io/appium/java_client/android/connection/ConnectionState.java b/src/main/java/io/appium/java_client/android/connection/ConnectionState.java new file mode 100644 index 000000000..c8799296e --- /dev/null +++ b/src/main/java/io/appium/java_client/android/connection/ConnectionState.java @@ -0,0 +1,55 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * 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.appium.java_client.android.connection; + +public class ConnectionState { + public static final int AIRPLANE_MODE_MASK = 0b001; + public static final int WIFI_MASK = 0b010; + public static final int DATA_MASK = 0b100; + + private final int bitMask; + + public int getBitMask() { + return bitMask; + } + + public ConnectionState(int bitMask) { + this.bitMask = bitMask; + } + + /** + * @return true if airplane mode is enabled. + */ + public boolean isAirplaneModeEnabled() { + return (bitMask & AIRPLANE_MODE_MASK) != 0; + } + + /** + * @return true if Wi-Fi connection is enabled. + */ + public boolean isWiFiEnabled() { + return (bitMask & WIFI_MASK) != 0; + } + + /** + * @return true if data connection is enabled. + */ + public boolean isDataEnabled() { + return (bitMask & DATA_MASK) != 0; + } +} + diff --git a/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java b/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java new file mode 100644 index 000000000..27ff49339 --- /dev/null +++ b/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java @@ -0,0 +1,125 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * 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.appium.java_client.android.connection; + +import static io.appium.java_client.android.connection.ConnectionState.AIRPLANE_MODE_MASK; +import static io.appium.java_client.android.connection.ConnectionState.DATA_MASK; +import static io.appium.java_client.android.connection.ConnectionState.WIFI_MASK; + +public class ConnectionStateBuilder { + private int bitMask; + + /** + * Initializes connection state builder with the default value (all off). + */ + public ConnectionStateBuilder() { + this.bitMask = 0; + } + + /** + * Initializes connection state builder with the the predefined bit mask. + * This constructor might be handy to change an existing connection state. + * + * @param bitMask the actual initial state bit mask to set + */ + public ConnectionStateBuilder(int bitMask) { + this.bitMask = bitMask; + } + + /** + * Initializes connection state builder with the the predefined bit mask. + * This constructor might be handy to change an existing connection state. + * + * @param state the actual initial state to set + */ + public ConnectionStateBuilder(ConnectionState state) { + this(state.getBitMask()); + } + + /** + * Sets airplane mode to enabled state if it was disabled. + * This option only works up to Android 6. + * + * @return self instance for chaining + */ + public ConnectionStateBuilder withAirplaneModeEnabled() { + this.bitMask = bitMask | AIRPLANE_MODE_MASK; + return this; + } + + /** + * Sets airplane mode to disabled state if it was enabled. + * This option only works up to Android 6. + * + * @return self instance for chaining + */ + public ConnectionStateBuilder withAirplaneModeDisabled() { + this.bitMask = bitMask & ~AIRPLANE_MODE_MASK; + return this; + } + + /** + * Sets Wi-Fi connection mode to enabled state if it was disabled. + * + * @return self instance for chaining + */ + public ConnectionStateBuilder withWiFiEnabled() { + this.bitMask = bitMask | WIFI_MASK; + return this; + } + + /** + * Sets Wi-Fi connection mode to disabled state if it was enabled. + * + * @return self instance for chaining + */ + public ConnectionStateBuilder withWiFiDisabled() { + this.bitMask = bitMask & ~WIFI_MASK; + return this; + } + + /** + * Sets data connection mode to enabled state if it was disabled. + * This option only works on rooted devices or on emulators. + * + * @return self instance for chaining + */ + public ConnectionStateBuilder withDataEnabled() { + this.bitMask = bitMask | DATA_MASK; + return this; + } + + /** + * Sets data connection mode to disabled state if it was enabled. + * This option only works on rooted devices or on emulators. + * + * @return self instance for chaining + */ + public ConnectionStateBuilder withDataDisabled() { + this.bitMask = bitMask & ~DATA_MASK; + return this; + } + + /** + * Builds connection state instance, which is ready to be passed as Appium server parameter. + * + * @return ConnectionState instance + */ + public ConnectionState build() { + return new ConnectionState(bitMask); + } +} diff --git a/src/main/java/io/appium/java_client/android/HasNetworkConnection.java b/src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java similarity index 69% rename from src/main/java/io/appium/java_client/android/HasNetworkConnection.java rename to src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java index fde98c3b5..e09ffa8b3 100644 --- a/src/main/java/io/appium/java_client/android/HasNetworkConnection.java +++ b/src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java @@ -14,26 +14,35 @@ * limitations under the License. */ -package io.appium.java_client.android; +package io.appium.java_client.android.connection; import static io.appium.java_client.android.AndroidMobileCommandHelper.getNetworkConnectionCommand; import static io.appium.java_client.android.AndroidMobileCommandHelper.setConnectionCommand; import io.appium.java_client.CommandExecutionHelper; import io.appium.java_client.ExecutesMethod; -import org.openqa.selenium.WebDriverException; +import io.appium.java_client.android.Connection; public interface HasNetworkConnection extends ExecutesMethod { - /** * Set the network connection of the device. * + * @deprecated use {@link #setConnection(ConnectionState)} instead * @param connection The bitmask of the desired connection */ + @Deprecated default void setConnection(Connection connection) { - CommandExecutionHelper.execute(this, setConnectionCommand(connection)); + CommandExecutionHelper.execute(this, setConnectionCommand(connection.getBitMask())); } + /** + * Set the network connection of the device. + * + * @param connection The bitmask of the desired connection + */ + default void setConnection(ConnectionState connection) { + CommandExecutionHelper.execute(this, setConnectionCommand(connection.getBitMask())); + } /** * Get the current network settings of the device. @@ -41,16 +50,7 @@ default void setConnection(Connection connection) { * @return Connection object will let you inspect the status * of None, AirplaneMode, Wifi, Data and All connections */ - default Connection getConnection() { - long bitMask = CommandExecutionHelper.execute(this, getNetworkConnectionCommand()); - Connection[] types = Connection.values(); - - for (Connection connection: types) { - if (connection.bitMask == bitMask) { - return connection; - } - } - throw new WebDriverException("The unknown network connection " - + "type has been returned. The bitmask is " + bitMask); + default ConnectionState getConnection() { + return new ConnectionState(CommandExecutionHelper.execute(this, getNetworkConnectionCommand())); } } diff --git a/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java b/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java index f6df58129..1e98b377f 100644 --- a/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java @@ -16,8 +16,10 @@ package io.appium.java_client.android; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import io.appium.java_client.android.connection.ConnectionState; +import io.appium.java_client.android.connection.ConnectionStateBuilder; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; @@ -26,23 +28,32 @@ public class AndroidConnectionTest extends BaseAndroidTest { @Test public void test1() { - driver.setConnection(Connection.WIFI); - assertEquals(Connection.WIFI, - driver.getConnection()); + driver.setConnection(new ConnectionStateBuilder() + .withWiFiEnabled() + .build()); + assertTrue(driver.getConnection().isWiFiEnabled()); } @Test public void test2() { - driver.setConnection(Connection.NONE); - assertEquals(Connection.NONE, - driver.getConnection()); - driver.setConnection(Connection.AIRPLANE); - assertEquals(Connection.AIRPLANE, - driver.getConnection()); + driver.setConnection(new ConnectionStateBuilder() + .withAirplaneModeDisabled() + .build()); + ConnectionState state = driver.getConnection(); + assertTrue(!state.isAirplaneModeEnabled() && !state.isWiFiEnabled() && !state.isDataEnabled()); + driver.setConnection(new ConnectionStateBuilder() + .withAirplaneModeEnabled() + .build()); + state = driver.getConnection(); + assertTrue(state.isAirplaneModeEnabled() && !state.isWiFiEnabled() && !state.isDataEnabled()); } @Test public void test3() { - driver.setConnection(Connection.ALL); - assertEquals(Connection.ALL, - driver.getConnection()); + driver.setConnection(new ConnectionStateBuilder() + .withAirplaneModeDisabled() + .withWiFiEnabled() + .withDataEnabled() + .build()); + ConnectionState state = driver.getConnection(); + assertTrue(!state.isAirplaneModeEnabled() && state.isWiFiEnabled() && state.isDataEnabled()); } } From d7eeb61bfe65bdf7875304453de82eee877bb1b1 Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Tue, 10 Apr 2018 17:01:19 +0200 Subject: [PATCH 2/8] Add a comment about airplane mode --- .../java_client/android/connection/ConnectionStateBuilder.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java b/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java index 27ff49339..9e55ce172 100644 --- a/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java +++ b/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java @@ -53,6 +53,8 @@ public ConnectionStateBuilder(ConnectionState state) { /** * Sets airplane mode to enabled state if it was disabled. * This option only works up to Android 6. + * Enabling the airplane mode on the device will automatically + * disable Wi-Fi and data connections. * * @return self instance for chaining */ From 5eaa7cc81e13cf835eb5226223151578c4457bed Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Wed, 11 Apr 2018 12:25:37 +0200 Subject: [PATCH 3/8] Change bit mask type to long --- .../java_client/android/AndroidMobileCommandHelper.java | 2 +- .../java_client/android/connection/ConnectionState.java | 6 +++--- .../android/connection/ConnectionStateBuilder.java | 4 ++-- .../android/connection/HasNetworkConnection.java | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java b/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java index 5b51eeacf..2f6aa1d7e 100644 --- a/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java +++ b/src/main/java/io/appium/java_client/android/AndroidMobileCommandHelper.java @@ -200,7 +200,7 @@ public class AndroidMobileCommandHelper extends MobileCommand { * @param bitMask The bitmask of the desired connection * @return a key-value pair. The key is the command name. The value is a {@link Map} command arguments. */ - public static Map.Entry> setConnectionCommand(int bitMask) { + public static Map.Entry> setConnectionCommand(long bitMask) { String[] parameters = new String[] {"name", "parameters"}; Object[] values = new Object[] {"network_connection", ImmutableMap.of("type", bitMask)}; return new AbstractMap.SimpleEntry<>( diff --git a/src/main/java/io/appium/java_client/android/connection/ConnectionState.java b/src/main/java/io/appium/java_client/android/connection/ConnectionState.java index c8799296e..284dfacea 100644 --- a/src/main/java/io/appium/java_client/android/connection/ConnectionState.java +++ b/src/main/java/io/appium/java_client/android/connection/ConnectionState.java @@ -21,13 +21,13 @@ public class ConnectionState { public static final int WIFI_MASK = 0b010; public static final int DATA_MASK = 0b100; - private final int bitMask; + private final long bitMask; - public int getBitMask() { + public long getBitMask() { return bitMask; } - public ConnectionState(int bitMask) { + public ConnectionState(long bitMask) { this.bitMask = bitMask; } diff --git a/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java b/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java index 9e55ce172..56c95ced5 100644 --- a/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java +++ b/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java @@ -21,7 +21,7 @@ import static io.appium.java_client.android.connection.ConnectionState.WIFI_MASK; public class ConnectionStateBuilder { - private int bitMask; + private long bitMask; /** * Initializes connection state builder with the default value (all off). @@ -36,7 +36,7 @@ public ConnectionStateBuilder() { * * @param bitMask the actual initial state bit mask to set */ - public ConnectionStateBuilder(int bitMask) { + public ConnectionStateBuilder(long bitMask) { this.bitMask = bitMask; } diff --git a/src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java b/src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java index e09ffa8b3..b12f53442 100644 --- a/src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java +++ b/src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java @@ -27,8 +27,8 @@ public interface HasNetworkConnection extends ExecutesMethod { /** * Set the network connection of the device. * - * @deprecated use {@link #setConnection(ConnectionState)} instead * @param connection The bitmask of the desired connection + * @deprecated use {@link #setConnection(ConnectionState)} instead */ @Deprecated default void setConnection(Connection connection) { @@ -47,8 +47,8 @@ default void setConnection(ConnectionState connection) { /** * Get the current network settings of the device. * - * @return Connection object will let you inspect the status - * of None, AirplaneMode, Wifi, Data and All connections + * @return Connection object, which lets you to inspect the current status + * */ default ConnectionState getConnection() { return new ConnectionState(CommandExecutionHelper.execute(this, getNetworkConnectionCommand())); From 99c0f7e3b09d9b743463ee04e6c89fd83864af69 Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Wed, 11 Apr 2018 13:49:22 +0200 Subject: [PATCH 4/8] Update constant types --- .../java_client/android/connection/ConnectionState.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/appium/java_client/android/connection/ConnectionState.java b/src/main/java/io/appium/java_client/android/connection/ConnectionState.java index 284dfacea..3d70227bc 100644 --- a/src/main/java/io/appium/java_client/android/connection/ConnectionState.java +++ b/src/main/java/io/appium/java_client/android/connection/ConnectionState.java @@ -17,9 +17,9 @@ package io.appium.java_client.android.connection; public class ConnectionState { - public static final int AIRPLANE_MODE_MASK = 0b001; - public static final int WIFI_MASK = 0b010; - public static final int DATA_MASK = 0b100; + public static final long AIRPLANE_MODE_MASK = 0b001; + public static final long WIFI_MASK = 0b010; + public static final long DATA_MASK = 0b100; private final long bitMask; From 90dd25b49525259dfd7199fe17e2e66f03fa8424 Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Wed, 11 Apr 2018 13:57:37 +0200 Subject: [PATCH 5/8] Use operation shortcuts --- .../android/connection/ConnectionStateBuilder.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java b/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java index 56c95ced5..66bbed50e 100644 --- a/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java +++ b/src/main/java/io/appium/java_client/android/connection/ConnectionStateBuilder.java @@ -59,7 +59,7 @@ public ConnectionStateBuilder(ConnectionState state) { * @return self instance for chaining */ public ConnectionStateBuilder withAirplaneModeEnabled() { - this.bitMask = bitMask | AIRPLANE_MODE_MASK; + bitMask |= AIRPLANE_MODE_MASK; return this; } @@ -70,7 +70,7 @@ public ConnectionStateBuilder withAirplaneModeEnabled() { * @return self instance for chaining */ public ConnectionStateBuilder withAirplaneModeDisabled() { - this.bitMask = bitMask & ~AIRPLANE_MODE_MASK; + bitMask &= ~AIRPLANE_MODE_MASK; return this; } @@ -80,7 +80,7 @@ public ConnectionStateBuilder withAirplaneModeDisabled() { * @return self instance for chaining */ public ConnectionStateBuilder withWiFiEnabled() { - this.bitMask = bitMask | WIFI_MASK; + bitMask |= WIFI_MASK; return this; } @@ -90,7 +90,7 @@ public ConnectionStateBuilder withWiFiEnabled() { * @return self instance for chaining */ public ConnectionStateBuilder withWiFiDisabled() { - this.bitMask = bitMask & ~WIFI_MASK; + bitMask &= ~WIFI_MASK; return this; } @@ -101,7 +101,7 @@ public ConnectionStateBuilder withWiFiDisabled() { * @return self instance for chaining */ public ConnectionStateBuilder withDataEnabled() { - this.bitMask = bitMask | DATA_MASK; + bitMask |= DATA_MASK; return this; } @@ -112,7 +112,7 @@ public ConnectionStateBuilder withDataEnabled() { * @return self instance for chaining */ public ConnectionStateBuilder withDataDisabled() { - this.bitMask = bitMask & ~DATA_MASK; + bitMask &= ~DATA_MASK; return this; } From 28ea4422a31f08330745e43e1bad421fa43efced Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Wed, 11 Apr 2018 16:05:48 +0200 Subject: [PATCH 6/8] Remove the redundant verification --- .../io/appium/java_client/android/AndroidConnectionTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java b/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java index 1e98b377f..9b5c3fd30 100644 --- a/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java @@ -44,7 +44,7 @@ public class AndroidConnectionTest extends BaseAndroidTest { .withAirplaneModeEnabled() .build()); state = driver.getConnection(); - assertTrue(state.isAirplaneModeEnabled() && !state.isWiFiEnabled() && !state.isDataEnabled()); + assertTrue(state.isAirplaneModeEnabled()); } @Test public void test3() { From a78d5e582c594614a110511924890f3c7526b3fa Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Wed, 11 Apr 2018 17:14:26 +0200 Subject: [PATCH 7/8] Update tests --- .../connection/HasNetworkConnection.java | 7 ++-- .../android/AndroidConnectionTest.java | 39 +++++++++++-------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java b/src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java index b12f53442..e92cf220c 100644 --- a/src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java +++ b/src/main/java/io/appium/java_client/android/connection/HasNetworkConnection.java @@ -39,16 +39,17 @@ default void setConnection(Connection connection) { * Set the network connection of the device. * * @param connection The bitmask of the desired connection + * @return Connection object, which represents the resulting state */ - default void setConnection(ConnectionState connection) { - CommandExecutionHelper.execute(this, setConnectionCommand(connection.getBitMask())); + default ConnectionState setConnection(ConnectionState connection) { + return new ConnectionState(CommandExecutionHelper.execute(this, + setConnectionCommand(connection.getBitMask()))); } /** * Get the current network settings of the device. * * @return Connection object, which lets you to inspect the current status - * */ default ConnectionState getConnection() { return new ConnectionState(CommandExecutionHelper.execute(this, getNetworkConnectionCommand())); diff --git a/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java b/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java index 9b5c3fd30..458120e09 100644 --- a/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java @@ -27,33 +27,38 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class AndroidConnectionTest extends BaseAndroidTest { - @Test public void test1() { - driver.setConnection(new ConnectionStateBuilder() + @Test + public void test1() { + ConnectionState state = driver.setConnection(new ConnectionStateBuilder() .withWiFiEnabled() .build()); - assertTrue(driver.getConnection().isWiFiEnabled()); + assertTrue(state.isWiFiEnabled()); } - @Test public void test2() { - driver.setConnection(new ConnectionStateBuilder() + @Test + public void test2() { + ConnectionState state = driver.setConnection(new ConnectionStateBuilder() .withAirplaneModeDisabled() .build()); - ConnectionState state = driver.getConnection(); - assertTrue(!state.isAirplaneModeEnabled() && !state.isWiFiEnabled() && !state.isDataEnabled()); - driver.setConnection(new ConnectionStateBuilder() + assertTrue(!state.isAirplaneModeEnabled()); + assertTrue(!state.isWiFiEnabled()); + assertTrue(!state.isDataEnabled()); + state = driver.setConnection(new ConnectionStateBuilder(state) .withAirplaneModeEnabled() .build()); - state = driver.getConnection(); assertTrue(state.isAirplaneModeEnabled()); } - @Test public void test3() { - driver.setConnection(new ConnectionStateBuilder() - .withAirplaneModeDisabled() - .withWiFiEnabled() - .withDataEnabled() - .build()); - ConnectionState state = driver.getConnection(); - assertTrue(!state.isAirplaneModeEnabled() && state.isWiFiEnabled() && state.isDataEnabled()); + @Test + public void test3() { + ConnectionState state = driver.setConnection( + new ConnectionStateBuilder(driver.getConnection()) + .withAirplaneModeDisabled() + .withWiFiEnabled() + .withDataEnabled() + .build()); + assertTrue(!state.isAirplaneModeEnabled()); + assertTrue(state.isWiFiEnabled()); + assertTrue(state.isDataEnabled()); } } From 2cec8d09bb65db8952255597e42371de8583c02a Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Wed, 11 Apr 2018 17:15:42 +0200 Subject: [PATCH 8/8] Tune assertions --- .../java_client/android/AndroidConnectionTest.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java b/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java index 458120e09..f1eb1043a 100644 --- a/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidConnectionTest.java @@ -16,6 +16,7 @@ package io.appium.java_client.android; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import io.appium.java_client.android.connection.ConnectionState; @@ -40,9 +41,9 @@ public void test2() { ConnectionState state = driver.setConnection(new ConnectionStateBuilder() .withAirplaneModeDisabled() .build()); - assertTrue(!state.isAirplaneModeEnabled()); - assertTrue(!state.isWiFiEnabled()); - assertTrue(!state.isDataEnabled()); + assertFalse(state.isAirplaneModeEnabled()); + assertFalse(state.isWiFiEnabled()); + assertFalse(state.isDataEnabled()); state = driver.setConnection(new ConnectionStateBuilder(state) .withAirplaneModeEnabled() .build()); @@ -57,7 +58,7 @@ public void test3() { .withWiFiEnabled() .withDataEnabled() .build()); - assertTrue(!state.isAirplaneModeEnabled()); + assertFalse(state.isAirplaneModeEnabled()); assertTrue(state.isWiFiEnabled()); assertTrue(state.isDataEnabled()); }