From 210c913c7a8dd98783665c975b884f2a1ac8b9e8 Mon Sep 17 00:00:00 2001 From: Richard Ross Date: Mon, 14 Dec 2015 15:28:27 -0800 Subject: [PATCH] Properly initialize `Configuration.interceptors` when using old-style APIs. This happened because `this.interceptors` was null when `clear()` was invoked. Fixes #296. --- Parse/src/main/java/com/parse/Parse.java | 9 ++- .../parse/ParseClientConfigurationTest.java | 60 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/Parse/src/main/java/com/parse/Parse.java b/Parse/src/main/java/com/parse/Parse.java index 2940245f7..f3010b26b 100644 --- a/Parse/src/main/java/com/parse/Parse.java +++ b/Parse/src/main/java/com/parse/Parse.java @@ -152,9 +152,14 @@ public Builder enableLocalDataStore() { return this; } - private Builder setNetworkInterceptors(Collection interceptors) { - if (interceptors != null) { + /* package for tests */ Builder setNetworkInterceptors(Collection interceptors) { + if (this.interceptors == null) { + this.interceptors = new ArrayList<>(); + } else { this.interceptors.clear(); + } + + if (interceptors != null) { this.interceptors.addAll(interceptors); } return this; diff --git a/Parse/src/test/java/com/parse/ParseClientConfigurationTest.java b/Parse/src/test/java/com/parse/ParseClientConfigurationTest.java index b5925763a..cabc3ed4a 100644 --- a/Parse/src/test/java/com/parse/ParseClientConfigurationTest.java +++ b/Parse/src/test/java/com/parse/ParseClientConfigurationTest.java @@ -12,6 +12,10 @@ import org.junit.Test; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; @@ -57,4 +61,60 @@ public void testNetworkInterceptors() { // Expected } } + + @Test + public void testSetNetworkInterceptors() { + final ParseNetworkInterceptor interceptorA = mock(ParseNetworkInterceptor.class); + final ParseNetworkInterceptor interceptorB = mock(ParseNetworkInterceptor.class); + + Collection collectionA = new ArrayList() {{ + add(interceptorA); + add(interceptorB); + }}; + + Collection collectionB = new ArrayList() {{ + add(interceptorB); + add(interceptorA); + }}; + + Parse.Configuration.Builder builder = new Parse.Configuration.Builder(null); + + builder.setNetworkInterceptors(collectionA); + Parse.Configuration configurationA = builder.build(); + + builder.setNetworkInterceptors(collectionB); + Parse.Configuration configurationB = builder.build(); + + assertTrue(collectionsEqual(configurationA.interceptors, collectionA)); + assertTrue(collectionsEqual(configurationB.interceptors, collectionB)); + } + + private static boolean collectionsEqual(Collection a, Collection b) { + if (a.size() != b.size()) { + return false; + } + + Iterator iteratorA = a.iterator(); + Iterator iteratorB = b.iterator(); + for (; iteratorA.hasNext() && iteratorB.hasNext();) { + T objectA = iteratorA.next(); + T objectB = iteratorB.next(); + + if (objectA == null || objectB == null) { + if (objectA != objectB) { + return false; + } + continue; + } + + if (!objectA.equals(objectB)) { + return false; + } + } + + if (iteratorA.hasNext() || iteratorB.hasNext()) { + return false; + } + return true; + } }