summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortobrun <tobrun.van.nuland@gmail.com>2019-04-05 10:49:57 +0200
committertobrun <tobrun.van.nuland@gmail.com>2019-04-05 14:59:32 +0200
commit4cc46deb03dadd09889806df21ed7f902d1901ee (patch)
tree905d684712159613cf2eae06c7f708bb2ad67a20
parent3ceabcd3ec91dbd9458d3c5b78fb12c3182636e1 (diff)
downloadqtlocation-mapboxgl-upstream/tvn-reset-custom-client.tar.gz
[android] - allow resetting a custom OkHttp client to the default implementationupstream/tvn-reset-custom-client
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/http/HttpRequestImpl.java19
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/http/HttpRequestUtil.java7
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxInjector.java29
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java29
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/module/http/HttpRequestUtilTest.kt35
5 files changed, 87 insertions, 32 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/http/HttpRequestImpl.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/http/HttpRequestImpl.java
index 62ad1222cc..441db7e945 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/http/HttpRequestImpl.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/http/HttpRequestImpl.java
@@ -3,15 +3,16 @@ package com.mapbox.mapboxsdk.module.http;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;
import com.mapbox.mapboxsdk.BuildConfig;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
-import com.mapbox.mapboxsdk.http.HttpRequest;
import com.mapbox.mapboxsdk.http.HttpIdentifier;
import com.mapbox.mapboxsdk.http.HttpLogger;
-import com.mapbox.mapboxsdk.http.HttpResponder;
+import com.mapbox.mapboxsdk.http.HttpRequest;
import com.mapbox.mapboxsdk.http.HttpRequestUrl;
+import com.mapbox.mapboxsdk.http.HttpResponder;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Dispatcher;
@@ -42,7 +43,11 @@ public class HttpRequestImpl implements HttpRequest {
Build.CPU_ABI)
);
- private static OkHttpClient client = new OkHttpClient.Builder().dispatcher(getDispatcher()).build();
+ @VisibleForTesting
+ static final OkHttpClient DEFAULT_CLIENT = new OkHttpClient.Builder().dispatcher(getDispatcher()).build();
+
+ @VisibleForTesting
+ static OkHttpClient client = DEFAULT_CLIENT;
private Call call;
@@ -94,8 +99,12 @@ public class HttpRequestImpl implements HttpRequest {
HttpLogger.logEnabled = enabled;
}
- public static void setOkHttpClient(OkHttpClient okHttpClient) {
- HttpRequestImpl.client = okHttpClient;
+ public static void setOkHttpClient(@Nullable OkHttpClient okHttpClient) {
+ if (okHttpClient != null) {
+ HttpRequestImpl.client = okHttpClient;
+ } else {
+ HttpRequestImpl.client = DEFAULT_CLIENT;
+ }
}
private static class OkHttpCallback implements Callback {
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/http/HttpRequestUtil.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/http/HttpRequestUtil.java
index 6fdaca138e..5d8dafbdf2 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/http/HttpRequestUtil.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/http/HttpRequestUtil.java
@@ -1,6 +1,7 @@
package com.mapbox.mapboxsdk.module.http;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import okhttp3.OkHttpClient;
import okio.Buffer;
@@ -38,10 +39,14 @@ public class HttpRequestUtil {
/**
* Set the OkHttpClient used for requesting map resources.
+ * <p>
+ * This configuration survives across mapView instances.
+ * Reset the OkHttpClient to the default by passing null as parameter.
+ * </p>
*
* @param client the OkHttpClient
*/
- public static void setOkHttpClient(OkHttpClient client) {
+ public static void setOkHttpClient(@Nullable OkHttpClient client) {
HttpRequestImpl.setOkHttpClient(client);
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxInjector.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxInjector.java
new file mode 100644
index 0000000000..46adc2007b
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxInjector.java
@@ -0,0 +1,29 @@
+package com.mapbox.mapboxsdk;
+
+import android.content.Context;
+
+import java.lang.reflect.Field;
+
+public class MapboxInjector {
+
+ public static void inject(Context context, String accessToken) {
+ Mapbox mapbox = new Mapbox(context, accessToken);
+ try {
+ Field field = Mapbox.class.getDeclaredField("INSTANCE");
+ field.setAccessible(true);
+ field.set(mapbox, mapbox);
+ } catch (Exception exception) {
+ throw new AssertionError();
+ }
+ }
+
+ public static void clear() {
+ try {
+ Field field = Mapbox.class.getDeclaredField("INSTANCE");
+ field.setAccessible(true);
+ field.set(field, null);
+ } catch (Exception exception) {
+ throw new AssertionError();
+ }
+ }
+}
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java
index 415953d747..127967d580 100644
--- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java
+++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java
@@ -1,13 +1,10 @@
package com.mapbox.mapboxsdk;
import android.content.Context;
-
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import java.lang.reflect.Field;
-
import static junit.framework.TestCase.assertNotNull;
import static junit.framework.TestCase.assertSame;
import static org.junit.Assert.assertEquals;
@@ -32,13 +29,13 @@ public class MapboxTest {
@Test
public void testGetAccessToken() {
final String accessToken = "pk.0000000001";
- injectMapboxSingleton(accessToken);
+ MapboxInjector.inject(context, accessToken);
assertSame(accessToken, Mapbox.getAccessToken());
}
@Test
public void testApplicationContext() {
- injectMapboxSingleton("pk.0000000001");
+ MapboxInjector.inject(context, "pk.0000000001");
assertNotNull(Mapbox.getApplicationContext());
assertNotEquals(context, appContext);
assertEquals(appContext, appContext);
@@ -71,27 +68,7 @@ public class MapboxTest {
@After
public void after() {
- clearMapboxSingleton();
+ MapboxInjector.clear();
}
- private void injectMapboxSingleton(String accessToken) {
- Mapbox mapbox = new Mapbox(context, accessToken);
- try {
- Field field = Mapbox.class.getDeclaredField("INSTANCE");
- field.setAccessible(true);
- field.set(mapbox, mapbox);
- } catch (Exception exception) {
- throw new AssertionError();
- }
- }
-
- private void clearMapboxSingleton() {
- try {
- Field field = Mapbox.class.getDeclaredField("INSTANCE");
- field.setAccessible(true);
- field.set(field, null);
- } catch (Exception exception) {
- throw new AssertionError();
- }
- }
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/module/http/HttpRequestUtilTest.kt b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/module/http/HttpRequestUtilTest.kt
new file mode 100644
index 0000000000..973f242a46
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/module/http/HttpRequestUtilTest.kt
@@ -0,0 +1,35 @@
+package com.mapbox.mapboxsdk.module.http
+
+import com.mapbox.mapboxsdk.MapboxInjector
+import io.mockk.mockk
+import junit.framework.Assert.assertEquals
+import okhttp3.OkHttpClient
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+
+@RunWith(RobolectricTestRunner::class)
+class HttpRequestUtilTest {
+
+ @Test
+ fun replaceHttpClient() {
+ MapboxInjector.inject(mockk(relaxed = true), "")
+
+ assertEquals(HttpRequestImpl.DEFAULT_CLIENT, HttpRequestImpl.client)
+
+ val httpMock = mockk<OkHttpClient>()
+ HttpRequestUtil.setOkHttpClient(httpMock)
+ assertEquals("Http client should have set to the mocked client",
+ httpMock,
+ HttpRequestImpl.client
+ )
+
+ HttpRequestUtil.setOkHttpClient(null)
+ assertEquals("Http client should have been reset to the default client",
+ HttpRequestImpl.DEFAULT_CLIENT,
+ HttpRequestImpl.client
+ )
+
+ MapboxInjector.clear()
+ }
+} \ No newline at end of file