From e5de902d407178eb24852dc29e2ae73d4b55448b Mon Sep 17 00:00:00 2001 From: Nikita Korshak Date: Thu, 23 Jan 2020 15:24:15 +0300 Subject: [PATCH] add toBuilder() method, add tests --- .../api/directions/v5/WalkingOptions.java | 12 +++++ .../directions/v5/models/RouteOptions.java | 11 ++++ .../v5/models/RouteOptionsTest.java | 52 +++++++++++++++++++ .../v5/models/WalkingOptionsTest.java | 16 ++++++ 4 files changed, 91 insertions(+) create mode 100644 services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/RouteOptionsTest.java diff --git a/services-directions-models/src/main/java/com/mapbox/api/directions/v5/WalkingOptions.java b/services-directions-models/src/main/java/com/mapbox/api/directions/v5/WalkingOptions.java index cf5dd1b7c..a549e16fd 100644 --- a/services-directions-models/src/main/java/com/mapbox/api/directions/v5/WalkingOptions.java +++ b/services-directions-models/src/main/java/com/mapbox/api/directions/v5/WalkingOptions.java @@ -1,6 +1,7 @@ package com.mapbox.api.directions.v5; import androidx.annotation.FloatRange; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.auto.value.AutoValue; @@ -80,6 +81,17 @@ public final String toJson() { return gson.toJson(this, WalkingOptions.class); } + /** + * Convert the current {@link WalkingOptions} to its builder holding the currently assigned + * values. This allows you to modify a single property and then rebuild the object resulting in + * an updated and modified {@link WalkingOptions}. + * + * @return a {@link WalkingOptions.Builder} with the same values set to match the ones defined + * in this {@link WalkingOptions} + */ + @NonNull + public abstract Builder toBuilder(); + /** * Gson type adapter for parsing Gson to this class. * diff --git a/services-directions-models/src/main/java/com/mapbox/api/directions/v5/models/RouteOptions.java b/services-directions-models/src/main/java/com/mapbox/api/directions/v5/models/RouteOptions.java index a9130f467..27b6b2647 100644 --- a/services-directions-models/src/main/java/com/mapbox/api/directions/v5/models/RouteOptions.java +++ b/services-directions-models/src/main/java/com/mapbox/api/directions/v5/models/RouteOptions.java @@ -349,6 +349,17 @@ public static RouteOptions fromJson(String json) { return gson.create().fromJson(json, RouteOptions.class); } + /** + * Convert the current {@link RouteOptions} to its builder holding the currently assigned + * values. This allows you to modify a single property and then rebuild the object resulting in + * an updated and modified {@link RouteOptions}. + * + * @return a {@link RouteOptions.Builder} with the same values set to match the ones defined + * in this {@link RouteOptions} + */ + @NonNull + public abstract Builder toBuilder(); + /** * This builder can be used to set the values describing the {@link RouteOptions}. * diff --git a/services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/RouteOptionsTest.java b/services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/RouteOptionsTest.java new file mode 100644 index 000000000..4836c33f5 --- /dev/null +++ b/services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/RouteOptionsTest.java @@ -0,0 +1,52 @@ +package com.mapbox.api.directions.v5.models; + +import com.mapbox.geojson.Point; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class RouteOptionsTest { + + @Test + public void toBuilder() { + RouteOptions routeOptions = routeOptions(); + + String language = "ru"; + String url = "new_base_url"; + + RouteOptions updatedOptions = routeOptions.toBuilder() + .language(language) + .baseUrl(url) + .build(); + + assertEquals(language, updatedOptions.language()); + assertEquals(url, updatedOptions.baseUrl()); + assertEquals(routeOptions.accessToken(), updatedOptions.accessToken()); + assertEquals(routeOptions.coordinates(), updatedOptions.coordinates()); + assertEquals(routeOptions.user(), updatedOptions.user()); + assertEquals(routeOptions.profile(), updatedOptions.profile()); + assertEquals(routeOptions.geometries(), updatedOptions.geometries()); + assertEquals(routeOptions.requestUuid(), updatedOptions.requestUuid()); + } + + private RouteOptions routeOptions() { + List coordinates = new ArrayList<>(); + coordinates.add(Point.fromLngLat(1.0, 2.0)); + coordinates.add(Point.fromLngLat(3.0, 4.0)); + + return RouteOptions.builder() + .accessToken("token") + .baseUrl("base_url") + .language("en") + .coordinates(coordinates) + .user("user") + .profile("profile") + .geometries("geometries") + .requestUuid("requestUuid") + .build(); + } +} diff --git a/services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/WalkingOptionsTest.java b/services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/WalkingOptionsTest.java index e0a590eab..93fef3c10 100644 --- a/services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/WalkingOptionsTest.java +++ b/services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/WalkingOptionsTest.java @@ -37,6 +37,22 @@ public void fromJson() { assertEquals(Double.valueOf(0.7), walkingOptions.alleyBias()); } + @Test + public void toBuilder() { + WalkingOptions walkingOptions = walkingOptions(); + + double delta = 0; + double newSpeed = 2.0; + + WalkingOptions updatedOptions = walkingOptions.toBuilder() + .walkingSpeed(newSpeed) + .build(); + + assertEquals(newSpeed, updatedOptions.walkingSpeed(), delta); + assertEquals(walkingOptions.walkwayBias(), updatedOptions.walkwayBias(), delta); + assertEquals(walkingOptions.alleyBias(), updatedOptions.alleyBias(), delta); + } + private WalkingOptions walkingOptions() { return WalkingOptions.builder() .walkingSpeed(1.0)