From 70b8d420f18d23cf416c7299d2ab768f5732aee3 Mon Sep 17 00:00:00 2001 From: Valery Yatsynovich Date: Thu, 28 Mar 2024 17:52:45 +0200 Subject: [PATCH] fix: Fix building of Android geo location parameters --- build.gradle | 1 + .../geolocation/AndroidGeoLocation.java | 10 ++-- .../geolocation/AndroidGeoLocationTest.java | 59 +++++++++++++++++++ 3 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 src/test/java/io/appium/java_client/android/geolocation/AndroidGeoLocationTest.java diff --git a/build.gradle b/build.gradle index 15768b583..4197aa34a 100644 --- a/build.gradle +++ b/build.gradle @@ -204,6 +204,7 @@ test { testLogging.showStandardStreams = true testLogging.exceptionFormat = 'full' filter { + includeTestsMatching 'io.appium.java_client.android.geolocation.*' includeTestsMatching 'io.appium.java_client.drivers.options.*' includeTestsMatching 'io.appium.java_client.events.*' includeTestsMatching 'io.appium.java_client.internal.*' diff --git a/src/main/java/io/appium/java_client/android/geolocation/AndroidGeoLocation.java b/src/main/java/io/appium/java_client/android/geolocation/AndroidGeoLocation.java index f8e2d24c7..37d878642 100644 --- a/src/main/java/io/appium/java_client/android/geolocation/AndroidGeoLocation.java +++ b/src/main/java/io/appium/java_client/android/geolocation/AndroidGeoLocation.java @@ -111,10 +111,12 @@ public AndroidGeoLocation withSpeed(double speed) { */ public Map build() { var map = new HashMap(); - ofNullable(longitude).map(x -> map.put("longitude", x)).orElseThrow(() -> new IllegalArgumentException( - "A valid 'longitude' must be provided")); - ofNullable(latitude).map(x -> map.put("latitude", x)).orElseThrow(() -> new IllegalArgumentException( - "A valid 'latitude' must be provided")); + ofNullable(longitude).ifPresentOrElse(x -> map.put("longitude", x), () -> { + throw new IllegalArgumentException("A valid 'longitude' must be provided"); + }); + ofNullable(latitude).ifPresentOrElse(x -> map.put("latitude", x), () -> { + throw new IllegalArgumentException("A valid 'latitude' must be provided"); + }); ofNullable(altitude).ifPresent(x -> map.put("altitude", x)); ofNullable(satellites).ifPresent(x -> map.put("satellites", x)); ofNullable(speed).ifPresent(x -> map.put("speed", x)); diff --git a/src/test/java/io/appium/java_client/android/geolocation/AndroidGeoLocationTest.java b/src/test/java/io/appium/java_client/android/geolocation/AndroidGeoLocationTest.java new file mode 100644 index 000000000..47746c42a --- /dev/null +++ b/src/test/java/io/appium/java_client/android/geolocation/AndroidGeoLocationTest.java @@ -0,0 +1,59 @@ +package io.appium.java_client.android.geolocation; + +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class AndroidGeoLocationTest { + + @Test + void shouldThrowExceptionWhenLatitudeIsNotSet() { + var androidGeoLocation = new AndroidGeoLocation().withLongitude(24.105078); + + var exception = assertThrows(IllegalArgumentException.class, androidGeoLocation::build); + + assertEquals("A valid 'latitude' must be provided", exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenLongitudeIsNotSet() { + var androidGeoLocation = new AndroidGeoLocation().withLatitude(56.946285); + + var exception = assertThrows(IllegalArgumentException.class, androidGeoLocation::build); + + assertEquals("A valid 'longitude' must be provided", exception.getMessage()); + } + + @Test + void shodBuildMinimalParameters() { + var androidGeoLocation = new AndroidGeoLocation() + .withLongitude(24.105078) + .withLatitude(56.946285); + + assertParameters(androidGeoLocation.build(), 24.105078, 56.946285, null, null, null); + } + + @Test + void shodBuildFullParameters() { + var androidGeoLocation = new AndroidGeoLocation() + .withLongitude(24.105078) + .withLatitude(56.946285) + .withAltitude(7) + .withSpeed(1.5) + .withSatellites(12); + + assertParameters(androidGeoLocation.build(), 24.105078, 56.946285, 7.0, 1.5, 12); + } + + private static void assertParameters(Map actualParams, double longitude, double latitude, + Double altitude, Double speed, Integer satellites) { + assertEquals(longitude, actualParams.get("longitude")); + assertEquals(latitude, actualParams.get("latitude")); + assertEquals(altitude, actualParams.get("altitude")); + assertEquals(speed, actualParams.get("speed")); + assertEquals(satellites, actualParams.get("satellites")); + } +}