From 9a128540048414c78a2be9524f93b6234c640b3a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 7 May 2018 11:39:31 -0700 Subject: Import of Volley from GitHub to AOSP. Adds android-support-annotations as a runtime dependency in Android.mk. - 28588322fa4eca3c1a7922b8a2f7b4a97d5c099a Fix concurrent modification errors in ImageContainer. (#1... by Jeff Davidson - ba3b40457a97b3b3812cb00191b41cb0af4149df Fix unchecked operations in Volley build. (#178) by Jeff Davidson - 62c19019e43a76ba4a084b25548e7fb1cfd4a457 Always close HttpURLConnections in HurlStack. (#176) by Jeff Davidson - 36c80f25a78cf2ba2feb2d697f12f9bbca96bf43 Port dispatcher tests to mockito. (#172) by Jeff Davidson - 15b55093fc8ac86902a745f46a2bdea825e797a3 Cleaning up parameter comments + unnecessary generics. (#... by Jeff Davidson - 6b341755e522f23de149544536b9b69c7b7b8305 Remove all wildcard imports. (#170) by Jeff Davidson - a8424005b3ba6d17fc9e123a2176da702f3ead10 Use actual annotations instead of comments. (#169) by Jeff Davidson - bdc80555aee738235bd33c26878bbe8ce382d795 Apply google-java-format to all code. (#165) by Jeff Davidson - 5307293b15dd0c32f53b8f1fd8c198caa443982e Integrate Volley builds with errorprone. (#162) by Jeff Davidson - fa586029500e6813d654f1b454cd3345b0a43897 Fail Travis builds if snapshot uploading fails. (#163) by Jeff Davidson - 0ebb97e9b0192e879088b38b5992158e99364dc6 Stop publishing bintray-info.json. (#141) by Jeff Davidson - b89dfbd2e6964acfe5561e268300611a83957a15 fix: request time contains RequestQueue blocking time. (#... by dezng - c2bfd86596e588c924c2c7e0ae0940053800af5c Guard against illegal argument and OOM exceptions in read... by Joe Bowbeer - fc8ff0423fe9a3af6595088b34f912fb2d920ffb Log fix (#112) by Navid Ht - 47586f0fd42acd5ce09dfc767387df685edfa547 Bump version to 1.1.1-SNAPSHOT. (#123) by Jeff Davidson - 1392f961af17d0f5ba367d8d199a18e5325b882e Update deploy credentials. (#122) by Jeff Davidson - ffe9281709f38f84492ce898603d3ec084326a57 Set project group and version. (#120) by Jeff Davidson GitOrigin-RevId: 28588322fa4eca3c1a7922b8a2f7b4a97d5c099a Change-Id: Ifeea069df2f0a5fd10bc3d4686601c88906ee653 --- .../com/android/volley/CacheDispatcherTest.java | 254 ++++++++++++--------- .../com/android/volley/NetworkDispatcherTest.java | 115 +++++----- .../com/android/volley/NetworkResponseTest.java | 16 +- .../volley/RequestQueueIntegrationTest.java | 86 ++++--- .../java/com/android/volley/RequestQueueTest.java | 29 +-- src/test/java/com/android/volley/RequestTest.java | 25 +- .../com/android/volley/ResponseDeliveryTest.java | 19 +- .../java/com/android/volley/mock/MockCache.java | 65 ------ .../com/android/volley/mock/MockHttpStack.java | 1 - .../android/volley/mock/MockHttpURLConnection.java | 77 ------- .../java/com/android/volley/mock/MockNetwork.java | 58 ----- .../java/com/android/volley/mock/MockRequest.java | 2 - .../android/volley/mock/MockResponseDelivery.java | 54 ----- .../java/com/android/volley/mock/TestRequest.java | 10 +- .../com/android/volley/mock/WaitableQueue.java | 72 ------ .../volley/toolbox/AdaptedHttpStackTest.java | 55 ++--- .../volley/toolbox/AndroidAuthenticatorTest.java | 26 ++- .../android/volley/toolbox/BaseHttpStackTest.java | 102 ++++----- .../android/volley/toolbox/BasicNetworkTest.java | 102 +++++---- .../android/volley/toolbox/ByteArrayPoolTest.java | 18 +- .../java/com/android/volley/toolbox/CacheTest.java | 4 +- .../android/volley/toolbox/DiskBasedCacheTest.java | 108 +++++---- .../volley/toolbox/HttpClientStackTest.java | 46 ++-- .../volley/toolbox/HttpHeaderParserTest.java | 70 +++--- .../com/android/volley/toolbox/HurlStackTest.java | 187 ++++++++++----- .../android/volley/toolbox/ImageLoaderTest.java | 58 +++-- .../android/volley/toolbox/ImageRequestTest.java | 60 +++-- .../volley/toolbox/JsonRequestCharsetTest.java | 42 ++-- .../android/volley/toolbox/JsonRequestTest.java | 52 +++-- .../volley/toolbox/NetworkImageViewTest.java | 36 +-- .../toolbox/PoolingByteArrayOutputStreamTest.java | 17 +- .../android/volley/toolbox/RequestFutureTest.java | 4 +- .../android/volley/toolbox/RequestQueueTest.java | 15 +- .../com/android/volley/toolbox/RequestTest.java | 20 +- .../com/android/volley/toolbox/ResponseTest.java | 22 +- .../android/volley/toolbox/StringRequestTest.java | 17 +- .../com/android/volley/utils/CacheTestUtils.java | 6 +- .../volley/utils/ImmediateResponseDelivery.java | 18 +- 38 files changed, 965 insertions(+), 1003 deletions(-) delete mode 100644 src/test/java/com/android/volley/mock/MockCache.java delete mode 100644 src/test/java/com/android/volley/mock/MockHttpURLConnection.java delete mode 100644 src/test/java/com/android/volley/mock/MockNetwork.java delete mode 100644 src/test/java/com/android/volley/mock/MockResponseDelivery.java delete mode 100644 src/test/java/com/android/volley/mock/WaitableQueue.java (limited to 'src/test/java/com') diff --git a/src/test/java/com/android/volley/CacheDispatcherTest.java b/src/test/java/com/android/volley/CacheDispatcherTest.java index a39be7b..9c5d3c3 100644 --- a/src/test/java/com/android/volley/CacheDispatcherTest.java +++ b/src/test/java/com/android/volley/CacheDispatcherTest.java @@ -16,183 +16,219 @@ package com.android.volley; -import com.android.volley.mock.MockCache; -import com.android.volley.mock.MockRequest; -import com.android.volley.mock.MockResponseDelivery; -import com.android.volley.mock.WaitableQueue; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.initMocks; + +import com.android.volley.toolbox.StringRequest; import com.android.volley.utils.CacheTestUtils; - -import org.junit.After; +import java.util.concurrent.BlockingQueue; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.*; - @RunWith(RobolectricTestRunner.class) @SuppressWarnings("rawtypes") public class CacheDispatcherTest { private CacheDispatcher mDispatcher; - private WaitableQueue mCacheQueue; - private WaitableQueue mNetworkQueue; - private MockCache mCache; - private MockResponseDelivery mDelivery; - private MockRequest mRequest; + private @Mock BlockingQueue> mCacheQueue; + private @Mock BlockingQueue> mNetworkQueue; + private @Mock Cache mCache; + private @Mock ResponseDelivery mDelivery; + private StringRequest mRequest; - private static final long TIMEOUT_MILLIS = 5000; + @Before + public void setUp() throws Exception { + initMocks(this); - @Before public void setUp() throws Exception { - mCacheQueue = new WaitableQueue(); - mNetworkQueue = new WaitableQueue(); - mCache = new MockCache(); - mDelivery = new MockResponseDelivery(); + mRequest = new StringRequest(Request.Method.GET, "http://foo", null, null); + mDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue, mCache, mDelivery); + } - mRequest = new MockRequest(); + private static class WaitForever implements Answer { + @Override + public Object answer(InvocationOnMock invocationOnMock) throws Throwable { + Thread.sleep(Long.MAX_VALUE); + return null; + } + } - mDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue, mCache, mDelivery); + @Test + public void runStopsOnQuit() throws Exception { + when(mCacheQueue.take()).then(new WaitForever()); mDispatcher.start(); + mDispatcher.quit(); + mDispatcher.join(1000); } - @After public void tearDown() throws Exception { - mDispatcher.quit(); - mDispatcher.join(); + private static void verifyNoResponse(ResponseDelivery delivery) { + verify(delivery, never()).postResponse(any(Request.class), any(Response.class)); + verify(delivery, never()) + .postResponse(any(Request.class), any(Response.class), any(Runnable.class)); + verify(delivery, never()).postError(any(Request.class), any(VolleyError.class)); } // A cancelled request should not be processed at all. - @Test public void cancelledRequest() throws Exception { + @Test + public void cancelledRequest() throws Exception { mRequest.cancel(); - mCacheQueue.add(mRequest); - mCacheQueue.waitUntilEmpty(TIMEOUT_MILLIS); - assertFalse(mCache.getCalled); - assertFalse(mDelivery.wasEitherResponseCalled()); + mDispatcher.processRequest(mRequest); + verify(mCache, never()).get(anyString()); + verifyNoResponse(mDelivery); } // A cache miss does not post a response and puts the request on the network queue. - @Test public void cacheMiss() throws Exception { - mCacheQueue.add(mRequest); - mCacheQueue.waitUntilEmpty(TIMEOUT_MILLIS); - assertFalse(mDelivery.wasEitherResponseCalled()); - assertTrue(mNetworkQueue.size() > 0); - Request request = mNetworkQueue.take(); - assertNull(request.getCacheEntry()); + @Test + public void cacheMiss() throws Exception { + mDispatcher.processRequest(mRequest); + verifyNoResponse(mDelivery); + verify(mNetworkQueue).put(mRequest); + assertNull(mRequest.getCacheEntry()); } // A non-expired cache hit posts a response and does not queue to the network. - @Test public void nonExpiredCacheHit() throws Exception { + @Test + public void nonExpiredCacheHit() throws Exception { Cache.Entry entry = CacheTestUtils.makeRandomCacheEntry(null, false, false); - mCache.setEntryToReturn(entry); - mCacheQueue.add(mRequest); - mCacheQueue.waitUntilEmpty(TIMEOUT_MILLIS); - assertTrue(mDelivery.postResponse_called); - assertFalse(mDelivery.postError_called); + when(mCache.get(anyString())).thenReturn(entry); + mDispatcher.processRequest(mRequest); + verify(mDelivery).postResponse(any(Request.class), any(Response.class)); + verify(mDelivery, never()).postError(any(Request.class), any(VolleyError.class)); } // A soft-expired cache hit posts a response and queues to the network. - @Test public void softExpiredCacheHit() throws Exception { + @Test + public void softExpiredCacheHit() throws Exception { Cache.Entry entry = CacheTestUtils.makeRandomCacheEntry(null, false, true); - mCache.setEntryToReturn(entry); - mCacheQueue.add(mRequest); - mCacheQueue.waitUntilEmpty(TIMEOUT_MILLIS); - assertTrue(mDelivery.postResponse_called); - assertFalse(mDelivery.postError_called); - assertTrue(mNetworkQueue.size() > 0); - Request request = mNetworkQueue.take(); - assertSame(entry, request.getCacheEntry()); + when(mCache.get(anyString())).thenReturn(entry); + mDispatcher.processRequest(mRequest); + + // Soft expiration needs to use the deferred Runnable variant of postResponse, + // so make sure it gets to run. + ArgumentCaptor runnable = ArgumentCaptor.forClass(Runnable.class); + verify(mDelivery).postResponse(any(Request.class), any(Response.class), runnable.capture()); + runnable.getValue().run(); + // This way we can verify the behavior of the Runnable as well. + verify(mNetworkQueue).put(mRequest); + assertSame(entry, mRequest.getCacheEntry()); + + verify(mDelivery, never()).postError(any(Request.class), any(VolleyError.class)); } // An expired cache hit does not post a response and queues to the network. - @Test public void expiredCacheHit() throws Exception { + @Test + public void expiredCacheHit() throws Exception { Cache.Entry entry = CacheTestUtils.makeRandomCacheEntry(null, true, true); - mCache.setEntryToReturn(entry); - mCacheQueue.add(mRequest); - mCacheQueue.waitUntilEmpty(TIMEOUT_MILLIS); - assertFalse(mDelivery.wasEitherResponseCalled()); - assertTrue(mNetworkQueue.size() > 0); - Request request = mNetworkQueue.take(); - assertSame(entry, request.getCacheEntry()); + when(mCache.get(anyString())).thenReturn(entry); + mDispatcher.processRequest(mRequest); + verifyNoResponse(mDelivery); + verify(mNetworkQueue).put(mRequest); + assertSame(entry, mRequest.getCacheEntry()); } - @Test public void duplicateCacheMiss() throws Exception { - MockRequest secondRequest = new MockRequest(); + @Test + public void duplicateCacheMiss() throws Exception { + StringRequest secondRequest = + new StringRequest(Request.Method.GET, "http://foo", null, null); mRequest.setSequence(1); secondRequest.setSequence(2); - mCacheQueue.add(mRequest); - mCacheQueue.add(secondRequest); - mCacheQueue.waitUntilEmpty(TIMEOUT_MILLIS); - assertTrue(mNetworkQueue.size() == 1); - assertFalse(mDelivery.postResponse_called); + mDispatcher.processRequest(mRequest); + mDispatcher.processRequest(secondRequest); + verify(mNetworkQueue).put(mRequest); + verifyNoResponse(mDelivery); } - @Test public void tripleCacheMiss_networkErrorOnFirst() throws Exception { - MockRequest secondRequest = new MockRequest(); - MockRequest thirdRequest = new MockRequest(); + @Test + public void tripleCacheMiss_networkErrorOnFirst() throws Exception { + StringRequest secondRequest = + new StringRequest(Request.Method.GET, "http://foo", null, null); + StringRequest thirdRequest = + new StringRequest(Request.Method.GET, "http://foo", null, null); mRequest.setSequence(1); secondRequest.setSequence(2); thirdRequest.setSequence(3); - mCacheQueue.add(mRequest); - mCacheQueue.add(secondRequest); - mCacheQueue.add(thirdRequest); - mCacheQueue.waitUntilEmpty(TIMEOUT_MILLIS); + mDispatcher.processRequest(mRequest); + mDispatcher.processRequest(secondRequest); + mDispatcher.processRequest(thirdRequest); - assertTrue(mNetworkQueue.size() == 1); - assertFalse(mDelivery.postResponse_called); + verify(mNetworkQueue).put(mRequest); + verifyNoResponse(mDelivery); - Request request = mNetworkQueue.take(); - request.notifyListenerResponseNotUsable(); + ((Request) mRequest).notifyListenerResponseNotUsable(); // Second request should now be in network queue. - assertTrue(mNetworkQueue.size() == 1); - request = mNetworkQueue.take(); - assertTrue(request.equals(secondRequest)); + verify(mNetworkQueue).put(secondRequest); // Another unusable response, third request should now be added. - request.notifyListenerResponseNotUsable(); - assertTrue(mNetworkQueue.size() == 1); - request = mNetworkQueue.take(); - assertTrue(request.equals(thirdRequest)); + ((Request) secondRequest).notifyListenerResponseNotUsable(); + verify(mNetworkQueue).put(thirdRequest); } - @Test public void duplicateSoftExpiredCacheHit_failedRequest() throws Exception { + @Test + public void duplicateSoftExpiredCacheHit_failedRequest() throws Exception { Cache.Entry entry = CacheTestUtils.makeRandomCacheEntry(null, false, true); - mCache.setEntryToReturn(entry); + when(mCache.get(anyString())).thenReturn(entry); - MockRequest secondRequest = new MockRequest(); + StringRequest secondRequest = + new StringRequest(Request.Method.GET, "http://foo", null, null); mRequest.setSequence(1); secondRequest.setSequence(2); - mCacheQueue.add(mRequest); - mCacheQueue.add(secondRequest); - mCacheQueue.waitUntilEmpty(TIMEOUT_MILLIS); + mDispatcher.processRequest(mRequest); + mDispatcher.processRequest(secondRequest); - assertTrue(mNetworkQueue.size() == 1); - assertTrue(mDelivery.postResponse_calledNtimes == 2); + // Soft expiration needs to use the deferred Runnable variant of postResponse, + // so make sure it gets to run. + ArgumentCaptor runnable = ArgumentCaptor.forClass(Runnable.class); + verify(mDelivery).postResponse(any(Request.class), any(Response.class), runnable.capture()); + runnable.getValue().run(); + // This way we can verify the behavior of the Runnable as well. - Request request = mNetworkQueue.take(); - request.notifyListenerResponseNotUsable(); + verify(mNetworkQueue).put(mRequest); + verify(mDelivery) + .postResponse(any(Request.class), any(Response.class), any(Runnable.class)); + + ((Request) mRequest).notifyListenerResponseNotUsable(); // Second request should now be in network queue. - assertTrue(mNetworkQueue.size() == 1); - request = mNetworkQueue.take(); - assertTrue(request.equals(secondRequest)); + verify(mNetworkQueue).put(secondRequest); } - @Test public void duplicateSoftExpiredCacheHit_successfulRequest() throws Exception { + @Test + public void duplicateSoftExpiredCacheHit_successfulRequest() throws Exception { Cache.Entry entry = CacheTestUtils.makeRandomCacheEntry(null, false, true); - mCache.setEntryToReturn(entry); + when(mCache.get(anyString())).thenReturn(entry); - MockRequest secondRequest = new MockRequest(); + StringRequest secondRequest = + new StringRequest(Request.Method.GET, "http://foo", null, null); mRequest.setSequence(1); secondRequest.setSequence(2); - mCacheQueue.add(mRequest); - mCacheQueue.add(secondRequest); - mCacheQueue.waitUntilEmpty(TIMEOUT_MILLIS); + mDispatcher.processRequest(mRequest); + mDispatcher.processRequest(secondRequest); + + // Soft expiration needs to use the deferred Runnable variant of postResponse, + // so make sure it gets to run. + ArgumentCaptor runnable = ArgumentCaptor.forClass(Runnable.class); + verify(mDelivery).postResponse(any(Request.class), any(Response.class), runnable.capture()); + runnable.getValue().run(); + // This way we can verify the behavior of the Runnable as well. - assertTrue(mNetworkQueue.size() == 1); - assertTrue(mDelivery.postResponse_calledNtimes == 2); + verify(mNetworkQueue).put(mRequest); + verify(mDelivery) + .postResponse(any(Request.class), any(Response.class), any(Runnable.class)); - Request request = mNetworkQueue.take(); - request.notifyListenerResponseReceived(Response.success(null, entry)); + ((Request) mRequest).notifyListenerResponseReceived(Response.success(null, entry)); // Second request should have delivered response. - assertTrue(mNetworkQueue.size() == 0); - assertTrue(mDelivery.postResponse_calledNtimes == 3); + verify(mNetworkQueue, never()).put(secondRequest); + verify(mDelivery) + .postResponse(any(Request.class), any(Response.class), any(Runnable.class)); } } diff --git a/src/test/java/com/android/volley/NetworkDispatcherTest.java b/src/test/java/com/android/volley/NetworkDispatcherTest.java index c5763bd..51c6971 100644 --- a/src/test/java/com/android/volley/NetworkDispatcherTest.java +++ b/src/test/java/com/android/volley/NetworkDispatcherTest.java @@ -16,85 +16,84 @@ package com.android.volley; -import com.android.volley.mock.MockCache; -import com.android.volley.mock.MockNetwork; -import com.android.volley.mock.MockRequest; -import com.android.volley.mock.MockResponseDelivery; -import com.android.volley.mock.WaitableQueue; -import org.junit.After; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.initMocks; + +import com.android.volley.toolbox.StringRequest; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.concurrent.BlockingQueue; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; import org.robolectric.RobolectricTestRunner; -import java.util.Arrays; - -import static org.junit.Assert.*; - @RunWith(RobolectricTestRunner.class) public class NetworkDispatcherTest { private NetworkDispatcher mDispatcher; - private MockResponseDelivery mDelivery; - private WaitableQueue mNetworkQueue; - private MockNetwork mNetwork; - private MockCache mCache; - private MockRequest mRequest; + private @Mock ResponseDelivery mDelivery; + private @Mock BlockingQueue> mNetworkQueue; + private @Mock Network mNetwork; + private @Mock Cache mCache; + private StringRequest mRequest; - private static final byte[] CANNED_DATA = "Ceci n'est pas une vraie reponse".getBytes(); - private static final long TIMEOUT_MILLIS = 5000; + private static final byte[] CANNED_DATA = + "Ceci n'est pas une vraie reponse".getBytes(StandardCharsets.UTF_8); - @Before public void setUp() throws Exception { - mDelivery = new MockResponseDelivery(); - mNetworkQueue = new WaitableQueue(); - mNetwork = new MockNetwork(); - mCache = new MockCache(); - mRequest = new MockRequest(); + @Before + public void setUp() throws Exception { + initMocks(this); + mRequest = new StringRequest(Request.Method.GET, "http://foo", null, null); mDispatcher = new NetworkDispatcher(mNetworkQueue, mNetwork, mCache, mDelivery); - mDispatcher.start(); } - @After public void tearDown() throws Exception { - mDispatcher.quit(); - mDispatcher.join(); - } + @Test + public void successPostsResponse() throws Exception { + when(mNetwork.performRequest(any(Request.class))) + .thenReturn(new NetworkResponse(CANNED_DATA)); + mDispatcher.processRequest(mRequest); - @Test public void successPostsResponse() throws Exception { - mNetwork.setDataToReturn(CANNED_DATA); - mNetwork.setNumExceptionsToThrow(0); - mNetworkQueue.add(mRequest); - mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); - assertFalse(mDelivery.postError_called); - assertTrue(mDelivery.postResponse_called); - Response response = mDelivery.responsePosted; - assertNotNull(response); - assertTrue(response.isSuccess()); - assertTrue(Arrays.equals((byte[])response.result, CANNED_DATA)); + ArgumentCaptor response = ArgumentCaptor.forClass(Response.class); + verify(mDelivery).postResponse(any(Request.class), response.capture()); + assertTrue(response.getValue().isSuccess()); + assertEquals(response.getValue().result, new String(CANNED_DATA, StandardCharsets.UTF_8)); + + verify(mDelivery, never()).postError(any(Request.class), any(VolleyError.class)); } - @Test public void exceptionPostsError() throws Exception { - mNetwork.setNumExceptionsToThrow(MockNetwork.ALWAYS_THROW_EXCEPTIONS); - mNetworkQueue.add(mRequest); - mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); - assertFalse(mDelivery.postResponse_called); - assertTrue(mDelivery.postError_called); + @Test + public void exceptionPostsError() throws Exception { + when(mNetwork.performRequest(any(Request.class))).thenThrow(new ServerError()); + mDispatcher.processRequest(mRequest); + + verify(mDelivery).postError(any(Request.class), any(VolleyError.class)); + verify(mDelivery, never()).postResponse(any(Request.class), any(Response.class)); } - @Test public void shouldCacheFalse() throws Exception { + @Test + public void shouldCacheFalse() throws Exception { mRequest.setShouldCache(false); - mNetworkQueue.add(mRequest); - mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); - assertFalse(mCache.putCalled); + mDispatcher.processRequest(mRequest); + verify(mCache, never()).put(anyString(), any(Cache.Entry.class)); } - @Test public void shouldCacheTrue() throws Exception { - mNetwork.setDataToReturn(CANNED_DATA); + @Test + public void shouldCacheTrue() throws Exception { + when(mNetwork.performRequest(any(Request.class))) + .thenReturn(new NetworkResponse(CANNED_DATA)); mRequest.setShouldCache(true); - mRequest.setCacheKey("bananaphone"); - mNetworkQueue.add(mRequest); - mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); - assertTrue(mCache.putCalled); - assertNotNull(mCache.entryPut); - assertTrue(Arrays.equals(mCache.entryPut.data, CANNED_DATA)); - assertEquals("bananaphone", mCache.keyPut); + mDispatcher.processRequest(mRequest); + ArgumentCaptor entry = ArgumentCaptor.forClass(Cache.Entry.class); + verify(mCache).put(eq(mRequest.getCacheKey()), entry.capture()); + assertTrue(Arrays.equals(entry.getValue().data, CANNED_DATA)); } } diff --git a/src/test/java/com/android/volley/NetworkResponseTest.java b/src/test/java/com/android/volley/NetworkResponseTest.java index be34143..48b1f6d 100644 --- a/src/test/java/com/android/volley/NetworkResponseTest.java +++ b/src/test/java/com/android/volley/NetworkResponseTest.java @@ -1,18 +1,17 @@ package com.android.volley; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; - -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class NetworkResponseTest { @@ -30,7 +29,8 @@ public class NetworkResponseTest { expectedHeaders.add(new Header("key1", "value1")); expectedHeaders.add(new Header("key2", "value2")); - assertThat(expectedHeaders, + assertThat( + expectedHeaders, containsInAnyOrder(resp.allHeaders.toArray(new Header[resp.allHeaders.size()]))); } diff --git a/src/test/java/com/android/volley/RequestQueueIntegrationTest.java b/src/test/java/com/android/volley/RequestQueueIntegrationTest.java index 304a1ab..a2bfbc6 100644 --- a/src/test/java/com/android/volley/RequestQueueIntegrationTest.java +++ b/src/test/java/com/android/volley/RequestQueueIntegrationTest.java @@ -16,13 +16,19 @@ package com.android.volley; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.initMocks; + import com.android.volley.Request.Priority; import com.android.volley.RequestQueue.RequestFinishedListener; import com.android.volley.mock.MockRequest; import com.android.volley.mock.ShadowSystemClock; import com.android.volley.toolbox.NoCache; import com.android.volley.utils.ImmediateResponseDelivery; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -33,14 +39,6 @@ import org.mockito.stubbing.Answer; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import static org.mockito.Mockito.inOrder; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - - /** * Integration tests for {@link RequestQueue} that verify its behavior in conjunction with real * dispatcher, queues and Requests. @@ -56,12 +54,14 @@ public class RequestQueueIntegrationTest { @Mock private RequestFinishedListener mMockListener; @Mock private RequestFinishedListener mMockListener2; - @Before public void setUp() throws Exception { + @Before + public void setUp() throws Exception { mDelivery = new ImmediateResponseDelivery(); initMocks(this); } - @Test public void add_requestProcessedInCorrectOrder() throws Exception { + @Test + public void add_requestProcessedInCorrectOrder() throws Exception { // Enqueue 2 requests with different cache keys, and different priorities. The second, // higher priority request takes 20ms. // Assert that the first request is only handled after the first one has been parsed and @@ -73,13 +73,15 @@ public class RequestQueueIntegrationTest { lowerPriorityReq.setPriority(Priority.LOW); higherPriorityReq.setPriority(Priority.HIGH); - Answer delayAnswer = new Answer() { - @Override - public NetworkResponse answer(InvocationOnMock invocationOnMock) throws Throwable { - Thread.sleep(20); - return mock(NetworkResponse.class); - } - }; + Answer delayAnswer = + new Answer() { + @Override + public NetworkResponse answer(InvocationOnMock invocationOnMock) + throws Throwable { + Thread.sleep(20); + return mock(NetworkResponse.class); + } + }; // delay only for higher request when(mMockNetwork.performRequest(higherPriorityReq)).thenAnswer(delayAnswer); when(mMockNetwork.performRequest(lowerPriorityReq)).thenReturn(mock(NetworkResponse.class)); @@ -100,19 +102,22 @@ public class RequestQueueIntegrationTest { } /** Asserts that requests with same cache key are processed in order. */ - @Test public void add_dedupeByCacheKey() throws Exception { + @Test + public void add_dedupeByCacheKey() throws Exception { // Enqueue 2 requests with the same cache key. The first request takes 20ms. Assert that the // second request is only handled after the first one has been parsed and delivered. MockRequest req1 = new MockRequest(); MockRequest req2 = new MockRequest(); - Answer delayAnswer = new Answer() { - @Override - public NetworkResponse answer(InvocationOnMock invocationOnMock) throws Throwable { - Thread.sleep(20); - return mock(NetworkResponse.class); - } - }; - //delay only for first + Answer delayAnswer = + new Answer() { + @Override + public NetworkResponse answer(InvocationOnMock invocationOnMock) + throws Throwable { + Thread.sleep(20); + return mock(NetworkResponse.class); + } + }; + // delay only for first when(mMockNetwork.performRequest(req1)).thenAnswer(delayAnswer); when(mMockNetwork.performRequest(req2)).thenReturn(mock(NetworkResponse.class)); @@ -131,16 +136,19 @@ public class RequestQueueIntegrationTest { queue.stop(); } - /** Verify RequestFinishedListeners are informed when requests are canceled. */ - @Test public void add_requestFinishedListenerCanceled() throws Exception { + /** Verify RequestFinishedListeners are informed when requests are canceled. */ + @Test + public void add_requestFinishedListenerCanceled() throws Exception { MockRequest request = new MockRequest(); - Answer delayAnswer = new Answer() { - @Override - public NetworkResponse answer(InvocationOnMock invocationOnMock) throws Throwable { - Thread.sleep(200); - return mock(NetworkResponse.class); - } - }; + Answer delayAnswer = + new Answer() { + @Override + public NetworkResponse answer(InvocationOnMock invocationOnMock) + throws Throwable { + Thread.sleep(200); + return mock(NetworkResponse.class); + } + }; RequestQueue queue = new RequestQueue(new NoCache(), mMockNetwork, 1, mDelivery); when(mMockNetwork.performRequest(request)).thenAnswer(delayAnswer); @@ -155,7 +163,8 @@ public class RequestQueueIntegrationTest { } /** Verify RequestFinishedListeners are informed when requests are successfully delivered. */ - @Test public void add_requestFinishedListenerSuccess() throws Exception { + @Test + public void add_requestFinishedListenerSuccess() throws Exception { MockRequest request = new MockRequest(); RequestQueue queue = new RequestQueue(new NoCache(), mMockNetwork, 1, mDelivery); @@ -171,7 +180,8 @@ public class RequestQueueIntegrationTest { } /** Verify RequestFinishedListeners are informed when request errors. */ - @Test public void add_requestFinishedListenerError() throws Exception { + @Test + public void add_requestFinishedListenerError() throws Exception { MockRequest request = new MockRequest(); RequestQueue queue = new RequestQueue(new NoCache(), mMockNetwork, 1, mDelivery); diff --git a/src/test/java/com/android/volley/RequestQueueTest.java b/src/test/java/com/android/volley/RequestQueueTest.java index bcf3ff2..11c6fe2 100644 --- a/src/test/java/com/android/volley/RequestQueueTest.java +++ b/src/test/java/com/android/volley/RequestQueueTest.java @@ -16,8 +16,15 @@ package com.android.volley; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.initMocks; + import com.android.volley.mock.ShadowSystemClock; import com.android.volley.toolbox.NoCache; +import com.android.volley.toolbox.StringRequest; import com.android.volley.utils.ImmediateResponseDelivery; import org.junit.Before; import org.junit.Test; @@ -26,13 +33,7 @@ import org.mockito.Mock; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; -import static org.mockito.MockitoAnnotations.initMocks; - -/** - * Unit tests for RequestQueue, with all dependencies mocked out - */ +/** Unit tests for RequestQueue, with all dependencies mocked out */ @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowSystemClock.class}) public class RequestQueueTest { @@ -40,22 +41,24 @@ public class RequestQueueTest { private ResponseDelivery mDelivery; @Mock private Network mMockNetwork; - @Before public void setUp() throws Exception { + @Before + public void setUp() throws Exception { mDelivery = new ImmediateResponseDelivery(); initMocks(this); } - @Test public void cancelAll_onlyCorrectTag() throws Exception { + @Test + public void cancelAll_onlyCorrectTag() throws Exception { RequestQueue queue = new RequestQueue(new NoCache(), mMockNetwork, 0, mDelivery); Object tagA = new Object(); Object tagB = new Object(); - Request req1 = mock(Request.class); + StringRequest req1 = mock(StringRequest.class); when(req1.getTag()).thenReturn(tagA); - Request req2 = mock(Request.class); + StringRequest req2 = mock(StringRequest.class); when(req2.getTag()).thenReturn(tagB); - Request req3 = mock(Request.class); + StringRequest req3 = mock(StringRequest.class); when(req3.getTag()).thenReturn(tagA); - Request req4 = mock(Request.class); + StringRequest req4 = mock(StringRequest.class); when(req4.getTag()).thenReturn(tagA); queue.add(req1); // A diff --git a/src/test/java/com/android/volley/RequestTest.java b/src/test/java/com/android/volley/RequestTest.java index d5beca5..e2dd655 100644 --- a/src/test/java/com/android/volley/RequestTest.java +++ b/src/test/java/com/android/volley/RequestTest.java @@ -16,17 +16,20 @@ package com.android.volley; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import com.android.volley.Request.Priority; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.*; - @RunWith(RobolectricTestRunner.class) public class RequestTest { - - @Test public void compareTo() { + + @Test + public void compareTo() { int sequence = 0; TestRequest low = new TestRequest(Priority.LOW); low.setSequence(sequence++); @@ -45,8 +48,9 @@ public class RequestTest { assertTrue(immediate.compareTo(high) < 0); } - private class TestRequest extends Request { + private static class TestRequest extends Request { private Priority mPriority = Priority.NORMAL; + public TestRequest(Priority priority) { super(Request.Method.GET, "", null); mPriority = priority; @@ -58,8 +62,7 @@ public class RequestTest { } @Override - protected void deliverResponse(Object response) { - } + protected void deliverResponse(Object response) {} @Override protected Response parseNetworkResponse(NetworkResponse response) { @@ -67,7 +70,8 @@ public class RequestTest { } } - @Test public void urlParsing() { + @Test + public void urlParsing() { UrlParseRequest nullUrl = new UrlParseRequest(null); assertEquals(0, nullUrl.getTrafficStatsTag()); UrlParseRequest emptyUrl = new UrlParseRequest(""); @@ -80,14 +84,13 @@ public class RequestTest { assertFalse(0 == goodProtocol.getTrafficStatsTag()); } - private class UrlParseRequest extends Request { + private static class UrlParseRequest extends Request { public UrlParseRequest(String url) { super(Request.Method.GET, url, null); } @Override - protected void deliverResponse(Object response) { - } + protected void deliverResponse(Object response) {} @Override protected Response parseNetworkResponse(NetworkResponse response) { diff --git a/src/test/java/com/android/volley/ResponseDeliveryTest.java b/src/test/java/com/android/volley/ResponseDeliveryTest.java index 9fadfc3..6e71c3b 100644 --- a/src/test/java/com/android/volley/ResponseDeliveryTest.java +++ b/src/test/java/com/android/volley/ResponseDeliveryTest.java @@ -16,18 +16,17 @@ package com.android.volley; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import com.android.volley.mock.MockRequest; import com.android.volley.utils.CacheTestUtils; import com.android.volley.utils.ImmediateResponseDelivery; - -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.*; - @RunWith(RobolectricTestRunner.class) public class ResponseDeliveryTest { @@ -35,7 +34,8 @@ public class ResponseDeliveryTest { private MockRequest mRequest; private Response mSuccessResponse; - @Before public void setUp() throws Exception { + @Before + public void setUp() throws Exception { // Make the delivery just run its posted responses immediately. mDelivery = new ImmediateResponseDelivery(); mRequest = new MockRequest(); @@ -45,20 +45,23 @@ public class ResponseDeliveryTest { mSuccessResponse = Response.success(data, cacheEntry); } - @Test public void postResponseCallsDeliverResponse() { + @Test + public void postResponseCallsDeliverResponse() { mDelivery.postResponse(mRequest, mSuccessResponse); assertTrue(mRequest.deliverResponse_called); assertFalse(mRequest.deliverError_called); } - @Test public void postResponseSuppressesCanceled() { + @Test + public void postResponseSuppressesCanceled() { mRequest.cancel(); mDelivery.postResponse(mRequest, mSuccessResponse); assertFalse(mRequest.deliverResponse_called); assertFalse(mRequest.deliverError_called); } - @Test public void postErrorCallsDeliverError() { + @Test + public void postErrorCallsDeliverError() { Response errorResponse = Response.error(new ServerError()); mDelivery.postResponse(mRequest, errorResponse); diff --git a/src/test/java/com/android/volley/mock/MockCache.java b/src/test/java/com/android/volley/mock/MockCache.java deleted file mode 100644 index 85a4607..0000000 --- a/src/test/java/com/android/volley/mock/MockCache.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * 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 com.android.volley.mock; - -import com.android.volley.Cache; - -public class MockCache implements Cache { - - public boolean clearCalled = false; - @Override - public void clear() { - clearCalled = true; - } - - public boolean getCalled = false; - private Entry mFakeEntry = null; - - public void setEntryToReturn(Entry entry) { - mFakeEntry = entry; - } - - @Override - public Entry get(String key) { - getCalled = true; - return mFakeEntry; - } - - public boolean putCalled = false; - public String keyPut = null; - public Entry entryPut = null; - - @Override - public void put(String key, Entry entry) { - putCalled = true; - keyPut = key; - entryPut = entry; - } - - @Override - public void invalidate(String key, boolean fullExpire) { - } - - @Override - public void remove(String key) { - } - - @Override - public void initialize() { - } - -} diff --git a/src/test/java/com/android/volley/mock/MockHttpStack.java b/src/test/java/com/android/volley/mock/MockHttpStack.java index 56b29f1..b86e7a0 100644 --- a/src/test/java/com/android/volley/mock/MockHttpStack.java +++ b/src/test/java/com/android/volley/mock/MockHttpStack.java @@ -20,7 +20,6 @@ import com.android.volley.AuthFailureError; import com.android.volley.Request; import com.android.volley.toolbox.BaseHttpStack; import com.android.volley.toolbox.HttpResponse; - import java.io.IOException; import java.util.HashMap; import java.util.Map; diff --git a/src/test/java/com/android/volley/mock/MockHttpURLConnection.java b/src/test/java/com/android/volley/mock/MockHttpURLConnection.java deleted file mode 100644 index efa3a21..0000000 --- a/src/test/java/com/android/volley/mock/MockHttpURLConnection.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * 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 com.android.volley.mock; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; - -public class MockHttpURLConnection extends HttpURLConnection { - - private boolean mDoOutput; - private String mRequestMethod; - private OutputStream mOutputStream; - - public MockHttpURLConnection() throws MalformedURLException { - super(new URL("http://foo.com")); - mDoOutput = false; - mRequestMethod = "GET"; - mOutputStream = new ByteArrayOutputStream(); - } - - @Override - public void setDoOutput(boolean flag) { - mDoOutput = flag; - } - - @Override - public boolean getDoOutput() { - return mDoOutput; - } - - @Override - public void setRequestMethod(String method) { - mRequestMethod = method; - } - - @Override - public String getRequestMethod() { - return mRequestMethod; - } - - @Override - public OutputStream getOutputStream() { - return mOutputStream; - } - - @Override - public void disconnect() { - } - - @Override - public boolean usingProxy() { - return false; - } - - @Override - public void connect() throws IOException { - } - -} diff --git a/src/test/java/com/android/volley/mock/MockNetwork.java b/src/test/java/com/android/volley/mock/MockNetwork.java deleted file mode 100644 index 207ec63..0000000 --- a/src/test/java/com/android/volley/mock/MockNetwork.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * 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 com.android.volley.mock; - -import com.android.volley.Network; -import com.android.volley.NetworkResponse; -import com.android.volley.Request; -import com.android.volley.ServerError; -import com.android.volley.VolleyError; - -public class MockNetwork implements Network { - public final static int ALWAYS_THROW_EXCEPTIONS = -1; - - private int mNumExceptionsToThrow = 0; - private byte[] mDataToReturn = null; - - /** - * @param numExceptionsToThrow number of times to throw an exception or - * {@link #ALWAYS_THROW_EXCEPTIONS} - */ - public void setNumExceptionsToThrow(int numExceptionsToThrow) { - mNumExceptionsToThrow = numExceptionsToThrow; - } - - public void setDataToReturn(byte[] data) { - mDataToReturn = data; - } - - public Request requestHandled = null; - - @Override - public NetworkResponse performRequest(Request request) throws VolleyError { - if (mNumExceptionsToThrow > 0 || mNumExceptionsToThrow == ALWAYS_THROW_EXCEPTIONS) { - if (mNumExceptionsToThrow != ALWAYS_THROW_EXCEPTIONS) { - mNumExceptionsToThrow--; - } - throw new ServerError(); - } - - requestHandled = request; - return new NetworkResponse(mDataToReturn); - } - -} diff --git a/src/test/java/com/android/volley/mock/MockRequest.java b/src/test/java/com/android/volley/mock/MockRequest.java index 9815ea8..6fc26b4 100644 --- a/src/test/java/com/android/volley/mock/MockRequest.java +++ b/src/test/java/com/android/volley/mock/MockRequest.java @@ -22,7 +22,6 @@ import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.VolleyError; import com.android.volley.utils.CacheTestUtils; - import java.util.HashMap; import java.util.Map; @@ -97,5 +96,4 @@ public class MockRequest extends Request { parseResponse_called = true; return Response.success(response.data, CacheTestUtils.makeRandomCacheEntry(response.data)); } - } diff --git a/src/test/java/com/android/volley/mock/MockResponseDelivery.java b/src/test/java/com/android/volley/mock/MockResponseDelivery.java deleted file mode 100644 index e923c1a..0000000 --- a/src/test/java/com/android/volley/mock/MockResponseDelivery.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * 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 com.android.volley.mock; - -import com.android.volley.Request; -import com.android.volley.Response; -import com.android.volley.ResponseDelivery; -import com.android.volley.VolleyError; - -public class MockResponseDelivery implements ResponseDelivery { - - public boolean postResponse_called = false; - public boolean postError_called = false; - public long postResponse_calledNtimes = 0; - - public boolean wasEitherResponseCalled() { - return postResponse_called || postError_called; - } - - public Response responsePosted = null; - @Override - public void postResponse(Request request, Response response) { - postResponse_called = true; - postResponse_calledNtimes++; - responsePosted = response; - } - - @Override - public void postResponse(Request request, Response response, Runnable runnable) { - postResponse_called = true; - postResponse_calledNtimes++; - responsePosted = response; - runnable.run(); - } - - @Override - public void postError(Request request, VolleyError error) { - postError_called = true; - } -} diff --git a/src/test/java/com/android/volley/mock/TestRequest.java b/src/test/java/com/android/volley/mock/TestRequest.java index 16bf79e..f397f01 100644 --- a/src/test/java/com/android/volley/mock/TestRequest.java +++ b/src/test/java/com/android/volley/mock/TestRequest.java @@ -19,7 +19,6 @@ package com.android.volley.mock; import com.android.volley.NetworkResponse; import com.android.volley.Request; import com.android.volley.Response; - import java.util.HashMap; import java.util.Map; @@ -43,8 +42,7 @@ public class TestRequest { } @Override - protected void deliverResponse(byte[] response) { - } + protected void deliverResponse(byte[] response) {} } /** Test example of a GET request in the deprecated style. */ @@ -78,8 +76,8 @@ public class TestRequest { } /** - * Test example of a POST request in the new style. In the new style, it is possible - * to have a POST with no body. + * Test example of a POST request in the new style. In the new style, it is possible to have a + * POST with no body. */ public static class Post extends Base { public Post() { @@ -103,7 +101,7 @@ public class TestRequest { } /** - * Test example of a PUT request in the new style. In the new style, it is possible to have a + * Test example of a PUT request in the new style. In the new style, it is possible to have a * PUT with no body. */ public static class Put extends Base { diff --git a/src/test/java/com/android/volley/mock/WaitableQueue.java b/src/test/java/com/android/volley/mock/WaitableQueue.java deleted file mode 100644 index 079bbf5..0000000 --- a/src/test/java/com/android/volley/mock/WaitableQueue.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * 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 com.android.volley.mock; - -import com.android.volley.NetworkResponse; -import com.android.volley.Request; -import com.android.volley.Response; - -import java.util.concurrent.PriorityBlockingQueue; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -// TODO: the name of this class sucks -@SuppressWarnings("serial") -public class WaitableQueue extends PriorityBlockingQueue> { - private final Request mStopRequest = new MagicStopRequest(); - private final Semaphore mStopEvent = new Semaphore(0); - - // TODO: this isn't really "until empty" it's "until next call to take() after empty" - public void waitUntilEmpty(long timeoutMillis) - throws TimeoutException, InterruptedException { - add(mStopRequest); - if (!mStopEvent.tryAcquire(timeoutMillis, TimeUnit.MILLISECONDS)) { - throw new TimeoutException(); - } - } - - @Override - public Request take() throws InterruptedException { - Request item = super.take(); - if (item == mStopRequest) { - mStopEvent.release(); - return take(); - } - return item; - } - - private static class MagicStopRequest extends Request { - public MagicStopRequest() { - super(Request.Method.GET, "", null); - } - - @Override - public Priority getPriority() { - return Priority.LOW; - } - - @Override - protected Response parseNetworkResponse(NetworkResponse response) { - return null; - } - - @Override - protected void deliverResponse(Object response) { - } - } -} diff --git a/src/test/java/com/android/volley/toolbox/AdaptedHttpStackTest.java b/src/test/java/com/android/volley/toolbox/AdaptedHttpStackTest.java index 615687d..dbd6535 100644 --- a/src/test/java/com/android/volley/toolbox/AdaptedHttpStackTest.java +++ b/src/test/java/com/android/volley/toolbox/AdaptedHttpStackTest.java @@ -1,11 +1,20 @@ package com.android.volley.toolbox; -import android.util.Pair; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.mockito.Mockito.when; import com.android.volley.Header; import com.android.volley.Request; import com.android.volley.mock.TestRequest; - +import java.io.IOException; +import java.io.InputStream; +import java.net.SocketTimeoutException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; @@ -18,34 +27,16 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; -import java.io.IOException; -import java.io.InputStream; -import java.net.SocketTimeoutException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.mockito.Mockito.when; - @RunWith(RobolectricTestRunner.class) public class AdaptedHttpStackTest { private static final Request REQUEST = new TestRequest.Get(); private static final Map ADDITIONAL_HEADERS = Collections.emptyMap(); - @Mock - private HttpStack mHttpStack; - @Mock - private HttpResponse mHttpResponse; - @Mock - private StatusLine mStatusLine; - @Mock - private HttpEntity mHttpEntity; - @Mock - private InputStream mContent; + @Mock private HttpStack mHttpStack; + @Mock private HttpResponse mHttpResponse; + @Mock private StatusLine mStatusLine; + @Mock private HttpEntity mHttpEntity; + @Mock private InputStream mContent; private AdaptedHttpStack mAdaptedHttpStack; @@ -112,12 +103,14 @@ public class AdaptedHttpStackTest { public void responseWithHeaders() throws Exception { when(mHttpStack.performRequest(REQUEST, ADDITIONAL_HEADERS)).thenReturn(mHttpResponse); when(mStatusLine.getStatusCode()).thenReturn(12345); - when(mHttpResponse.getAllHeaders()).thenReturn(new org.apache.http.Header[] { - new BasicHeader("header1", "value1_B"), - new BasicHeader("header3", "value3"), - new BasicHeader("HEADER2", "value2"), - new BasicHeader("header1", "value1_A") - }); + when(mHttpResponse.getAllHeaders()) + .thenReturn( + new org.apache.http.Header[] { + new BasicHeader("header1", "value1_B"), + new BasicHeader("header3", "value3"), + new BasicHeader("HEADER2", "value2"), + new BasicHeader("header1", "value1_A") + }); com.android.volley.toolbox.HttpResponse response = mAdaptedHttpStack.executeRequest(REQUEST, ADDITIONAL_HEADERS); diff --git a/src/test/java/com/android/volley/toolbox/AndroidAuthenticatorTest.java b/src/test/java/com/android/volley/toolbox/AndroidAuthenticatorTest.java index e878658..982eda2 100644 --- a/src/test/java/com/android/volley/toolbox/AndroidAuthenticatorTest.java +++ b/src/test/java/com/android/volley/toolbox/AndroidAuthenticatorTest.java @@ -16,6 +16,10 @@ package com.android.volley.toolbox; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AccountManagerFuture; @@ -26,33 +30,30 @@ import android.os.Bundle; import com.android.volley.AuthFailureError; import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; -import static org.mockito.Mockito.*; - @RunWith(RobolectricTestRunner.class) public class AndroidAuthenticatorTest { - private AccountManager mAccountManager; + @Mock private AccountManager mAccountManager; + @Mock private AccountManagerFuture mFuture; private Account mAccount; - private AccountManagerFuture mFuture; private AndroidAuthenticator mAuthenticator; @Before public void setUp() { - mAccountManager = mock(AccountManager.class); - mFuture = mock(AccountManagerFuture.class); + MockitoAnnotations.initMocks(this); mAccount = new Account("coolperson", "cooltype"); mAuthenticator = new AndroidAuthenticator(mAccountManager, mAccount, "cooltype", false); } @Test(expected = AuthFailureError.class) public void failedGetAuthToken() throws Exception { - when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)).thenReturn(mFuture); + when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)) + .thenReturn(mFuture); when(mFuture.getResult()).thenThrow(new AuthenticatorException("sadness!")); mAuthenticator.getAuthToken(); } @@ -62,7 +63,8 @@ public class AndroidAuthenticatorTest { Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putParcelable(AccountManager.KEY_INTENT, intent); - when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)).thenReturn(mFuture); + when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)) + .thenReturn(mFuture); when(mFuture.getResult()).thenReturn(bundle); when(mFuture.isDone()).thenReturn(true); when(mFuture.isCancelled()).thenReturn(false); @@ -72,7 +74,8 @@ public class AndroidAuthenticatorTest { @Test(expected = AuthFailureError.class) public void missingAuthToken() throws Exception { Bundle bundle = new Bundle(); - when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)).thenReturn(mFuture); + when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)) + .thenReturn(mFuture); when(mFuture.getResult()).thenReturn(bundle); when(mFuture.isDone()).thenReturn(true); when(mFuture.isCancelled()).thenReturn(false); @@ -89,7 +92,8 @@ public class AndroidAuthenticatorTest { public void goodToken() throws Exception { Bundle bundle = new Bundle(); bundle.putString(AccountManager.KEY_AUTHTOKEN, "monkey"); - when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)).thenReturn(mFuture); + when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)) + .thenReturn(mFuture); when(mFuture.getResult()).thenReturn(bundle); when(mFuture.isDone()).thenReturn(true); when(mFuture.isCancelled()).thenReturn(false); diff --git a/src/test/java/com/android/volley/toolbox/BaseHttpStackTest.java b/src/test/java/com/android/volley/toolbox/BaseHttpStackTest.java index 3ae145c..1049ad0 100644 --- a/src/test/java/com/android/volley/toolbox/BaseHttpStackTest.java +++ b/src/test/java/com/android/volley/toolbox/BaseHttpStackTest.java @@ -1,36 +1,32 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; + import com.android.volley.AuthFailureError; import com.android.volley.Header; import com.android.volley.Request; import com.android.volley.mock.TestRequest; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; - import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.TreeMap; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class BaseHttpStackTest { private static final Request REQUEST = new TestRequest.Get(); private static final Map ADDITIONAL_HEADERS = Collections.emptyMap(); - @Mock - private InputStream mContent; + @Mock private InputStream mContent; @Before public void setUp() { @@ -39,16 +35,17 @@ public class BaseHttpStackTest { @Test public void legacyRequestWithoutBody() throws Exception { - BaseHttpStack stack = new BaseHttpStack() { - @Override - public HttpResponse executeRequest( - Request request, Map additionalHeaders) - throws IOException, AuthFailureError { - assertSame(REQUEST, request); - assertSame(ADDITIONAL_HEADERS, additionalHeaders); - return new HttpResponse(12345, Collections.
emptyList()); - } - }; + BaseHttpStack stack = + new BaseHttpStack() { + @Override + public HttpResponse executeRequest( + Request request, Map additionalHeaders) + throws IOException, AuthFailureError { + assertSame(REQUEST, request); + assertSame(ADDITIONAL_HEADERS, additionalHeaders); + return new HttpResponse(12345, Collections.
emptyList()); + } + }; org.apache.http.HttpResponse resp = stack.performRequest(REQUEST, ADDITIONAL_HEADERS); assertEquals(12345, resp.getStatusLine().getStatusCode()); assertEquals(0, resp.getAllHeaders().length); @@ -57,20 +54,18 @@ public class BaseHttpStackTest { @Test public void legacyResponseWithBody() throws Exception { - BaseHttpStack stack = new BaseHttpStack() { - @Override - public HttpResponse executeRequest( - Request request, Map additionalHeaders) - throws IOException, AuthFailureError { - assertSame(REQUEST, request); - assertSame(ADDITIONAL_HEADERS, additionalHeaders); - return new HttpResponse( - 12345, - Collections.
emptyList(), - 555, - mContent); - } - }; + BaseHttpStack stack = + new BaseHttpStack() { + @Override + public HttpResponse executeRequest( + Request request, Map additionalHeaders) + throws IOException, AuthFailureError { + assertSame(REQUEST, request); + assertSame(ADDITIONAL_HEADERS, additionalHeaders); + return new HttpResponse( + 12345, Collections.
emptyList(), 555, mContent); + } + }; org.apache.http.HttpResponse resp = stack.performRequest(REQUEST, ADDITIONAL_HEADERS); assertEquals(12345, resp.getStatusLine().getStatusCode()); assertEquals(0, resp.getAllHeaders().length); @@ -80,20 +75,21 @@ public class BaseHttpStackTest { @Test public void legacyResponseHeaders() throws Exception { - BaseHttpStack stack = new BaseHttpStack() { - @Override - public HttpResponse executeRequest( - Request request, Map additionalHeaders) - throws IOException, AuthFailureError { - assertSame(REQUEST, request); - assertSame(ADDITIONAL_HEADERS, additionalHeaders); - List
headers = new ArrayList<>(); - headers.add(new Header("HeaderA", "ValueA")); - headers.add(new Header("HeaderB", "ValueB_1")); - headers.add(new Header("HeaderB", "ValueB_2")); - return new HttpResponse(12345, headers); - } - }; + BaseHttpStack stack = + new BaseHttpStack() { + @Override + public HttpResponse executeRequest( + Request request, Map additionalHeaders) + throws IOException, AuthFailureError { + assertSame(REQUEST, request); + assertSame(ADDITIONAL_HEADERS, additionalHeaders); + List
headers = new ArrayList<>(); + headers.add(new Header("HeaderA", "ValueA")); + headers.add(new Header("HeaderB", "ValueB_1")); + headers.add(new Header("HeaderB", "ValueB_2")); + return new HttpResponse(12345, headers); + } + }; org.apache.http.HttpResponse resp = stack.performRequest(REQUEST, ADDITIONAL_HEADERS); assertEquals(12345, resp.getStatusLine().getStatusCode()); assertEquals(3, resp.getAllHeaders().length); diff --git a/src/test/java/com/android/volley/toolbox/BasicNetworkTest.java b/src/test/java/com/android/volley/toolbox/BasicNetworkTest.java index 7f0d5e2..adf695d 100644 --- a/src/test/java/com/android/volley/toolbox/BasicNetworkTest.java +++ b/src/test/java/com/android/volley/toolbox/BasicNetworkTest.java @@ -16,6 +16,16 @@ package com.android.volley.toolbox; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; +import static org.mockito.MockitoAnnotations.initMocks; + import com.android.volley.AuthFailureError; import com.android.volley.Cache.Entry; import com.android.volley.Header; @@ -27,33 +37,22 @@ import com.android.volley.ServerError; import com.android.volley.TimeoutError; import com.android.volley.VolleyError; import com.android.volley.mock.MockHttpStack; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.robolectric.RobolectricTestRunner; - import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.SocketTimeoutException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; - -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.verify; -import static org.mockito.MockitoAnnotations.initMocks; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class BasicNetworkTest { @@ -61,14 +60,16 @@ public class BasicNetworkTest { @Mock private Request mMockRequest; @Mock private RetryPolicy mMockRetryPolicy; - @Before public void setUp() throws Exception { + @Before + public void setUp() throws Exception { initMocks(this); } - @Test public void headersAndPostParams() throws Exception { + @Test + public void headersAndPostParams() throws Exception { MockHttpStack mockHttpStack = new MockHttpStack(); InputStream responseStream = - new ByteArrayInputStream("foobar".getBytes()); + new ByteArrayInputStream("foobar".getBytes(StandardCharsets.UTF_8)); HttpResponse fakeResponse = new HttpResponse(200, Collections.
emptyList(), 6, responseStream); mockHttpStack.setResponseToReturn(fakeResponse); @@ -81,12 +82,16 @@ public class BasicNetworkTest { httpNetwork.performRequest(request); assertEquals("foo", mockHttpStack.getLastHeaders().get("requestheader")); assertEquals("foobar", mockHttpStack.getLastHeaders().get("If-None-Match")); - assertEquals("Sat, 19 Aug 2017 00:20:02 GMT", + assertEquals( + "Sat, 19 Aug 2017 00:20:02 GMT", mockHttpStack.getLastHeaders().get("If-Modified-Since")); - assertEquals("requestpost=foo&", new String(mockHttpStack.getLastPostBody())); + assertEquals( + "requestpost=foo&", + new String(mockHttpStack.getLastPostBody(), StandardCharsets.UTF_8)); } - @Test public void notModified() throws Exception { + @Test + public void notModified() throws Exception { MockHttpStack mockHttpStack = new MockHttpStack(); List
headers = new ArrayList<>(); headers.add(new Header("ServerKeyA", "ServerValueA")); @@ -94,8 +99,7 @@ public class BasicNetworkTest { headers.add(new Header("SharedKey", "ServerValueShared")); headers.add(new Header("sharedcaseinsensitivekey", "ServerValueShared1")); headers.add(new Header("SharedCaseInsensitiveKey", "ServerValueShared2")); - HttpResponse fakeResponse = - new HttpResponse(HttpURLConnection.HTTP_NOT_MODIFIED, headers); + HttpResponse fakeResponse = new HttpResponse(HttpURLConnection.HTTP_NOT_MODIFIED, headers); mockHttpStack.setResponseToReturn(fakeResponse); BasicNetwork httpNetwork = new BasicNetwork(mockHttpStack); Request request = buildRequest(); @@ -117,11 +121,14 @@ public class BasicNetworkTest { expectedHeaders.add(new Header("SharedCaseInsensitiveKey", "ServerValueShared2")); expectedHeaders.add(new Header("CachedKeyA", "CachedValueA")); expectedHeaders.add(new Header("CachedKeyB", "CachedValueB")); - assertThat(expectedHeaders, containsInAnyOrder( - response.allHeaders.toArray(new Header[response.allHeaders.size()]))); + assertThat( + expectedHeaders, + containsInAnyOrder( + response.allHeaders.toArray(new Header[response.allHeaders.size()]))); } - @Test public void notModified_legacyCache() throws Exception { + @Test + public void notModified_legacyCache() throws Exception { MockHttpStack mockHttpStack = new MockHttpStack(); List
headers = new ArrayList<>(); headers.add(new Header("ServerKeyA", "ServerValueA")); @@ -129,8 +136,7 @@ public class BasicNetworkTest { headers.add(new Header("SharedKey", "ServerValueShared")); headers.add(new Header("sharedcaseinsensitivekey", "ServerValueShared1")); headers.add(new Header("SharedCaseInsensitiveKey", "ServerValueShared2")); - HttpResponse fakeResponse = - new HttpResponse(HttpURLConnection.HTTP_NOT_MODIFIED, headers); + HttpResponse fakeResponse = new HttpResponse(HttpURLConnection.HTTP_NOT_MODIFIED, headers); mockHttpStack.setResponseToReturn(fakeResponse); BasicNetwork httpNetwork = new BasicNetwork(mockHttpStack); Request request = buildRequest(); @@ -152,11 +158,14 @@ public class BasicNetworkTest { expectedHeaders.add(new Header("SharedCaseInsensitiveKey", "ServerValueShared2")); expectedHeaders.add(new Header("CachedKeyA", "CachedValueA")); expectedHeaders.add(new Header("CachedKeyB", "CachedValueB")); - assertThat(expectedHeaders, containsInAnyOrder( - response.allHeaders.toArray(new Header[response.allHeaders.size()]))); + assertThat( + expectedHeaders, + containsInAnyOrder( + response.allHeaders.toArray(new Header[response.allHeaders.size()]))); } - @Test public void socketTimeout() throws Exception { + @Test + public void socketTimeout() throws Exception { MockHttpStack mockHttpStack = new MockHttpStack(); mockHttpStack.setExceptionToThrow(new SocketTimeoutException()); BasicNetwork httpNetwork = new BasicNetwork(mockHttpStack); @@ -172,7 +181,8 @@ public class BasicNetworkTest { verify(mMockRetryPolicy).retry(any(TimeoutError.class)); } - @Test public void noConnection() throws Exception { + @Test + public void noConnection() throws Exception { MockHttpStack mockHttpStack = new MockHttpStack(); mockHttpStack.setExceptionToThrow(new IOException()); BasicNetwork httpNetwork = new BasicNetwork(mockHttpStack); @@ -188,7 +198,8 @@ public class BasicNetworkTest { verify(mMockRetryPolicy, never()).retry(any(VolleyError.class)); } - @Test public void unauthorized() throws Exception { + @Test + public void unauthorized() throws Exception { MockHttpStack mockHttpStack = new MockHttpStack(); HttpResponse fakeResponse = new HttpResponse(401, Collections.
emptyList()); mockHttpStack.setResponseToReturn(fakeResponse); @@ -205,7 +216,8 @@ public class BasicNetworkTest { verify(mMockRetryPolicy).retry(any(AuthFailureError.class)); } - @Test public void forbidden() throws Exception { + @Test + public void forbidden() throws Exception { MockHttpStack mockHttpStack = new MockHttpStack(); HttpResponse fakeResponse = new HttpResponse(403, Collections.
emptyList()); mockHttpStack.setResponseToReturn(fakeResponse); @@ -222,7 +234,8 @@ public class BasicNetworkTest { verify(mMockRetryPolicy).retry(any(AuthFailureError.class)); } - @Test public void redirect() throws Exception { + @Test + public void redirect() throws Exception { for (int i = 300; i <= 399; i++) { MockHttpStack mockHttpStack = new MockHttpStack(); HttpResponse fakeResponse = new HttpResponse(i, Collections.
emptyList()); @@ -242,7 +255,8 @@ public class BasicNetworkTest { } } - @Test public void otherClientError() throws Exception { + @Test + public void otherClientError() throws Exception { for (int i = 400; i <= 499; i++) { if (i == 401 || i == 403) { // covered above. @@ -266,13 +280,13 @@ public class BasicNetworkTest { } } - @Test public void serverError_enableRetries() throws Exception { + @Test + public void serverError_enableRetries() throws Exception { for (int i = 500; i <= 599; i++) { MockHttpStack mockHttpStack = new MockHttpStack(); HttpResponse fakeResponse = new HttpResponse(i, Collections.
emptyList()); mockHttpStack.setResponseToReturn(fakeResponse); - BasicNetwork httpNetwork = - new BasicNetwork(mockHttpStack, new ByteArrayPool(4096)); + BasicNetwork httpNetwork = new BasicNetwork(mockHttpStack, new ByteArrayPool(4096)); Request request = buildRequest(); request.setRetryPolicy(mMockRetryPolicy); request.setShouldRetryServerErrors(true); @@ -288,7 +302,8 @@ public class BasicNetworkTest { } } - @Test public void serverError_disableRetries() throws Exception { + @Test + public void serverError_disableRetries() throws Exception { for (int i = 500; i <= 599; i++) { MockHttpStack mockHttpStack = new MockHttpStack(); HttpResponse fakeResponse = new HttpResponse(i, Collections.
emptyList()); @@ -317,8 +332,7 @@ public class BasicNetworkTest { } @Override - protected void deliverResponse(String response) { - } + protected void deliverResponse(String response) {} @Override public Map getHeaders() { diff --git a/src/test/java/com/android/volley/toolbox/ByteArrayPoolTest.java b/src/test/java/com/android/volley/toolbox/ByteArrayPoolTest.java index 661e994..62da207 100644 --- a/src/test/java/com/android/volley/toolbox/ByteArrayPoolTest.java +++ b/src/test/java/com/android/volley/toolbox/ByteArrayPoolTest.java @@ -16,15 +16,15 @@ package com.android.volley.toolbox; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; -import static org.junit.Assert.*; +import org.junit.Test; public class ByteArrayPoolTest { - @Test public void reusesBuffer() { + @Test + public void reusesBuffer() { ByteArrayPool pool = new ByteArrayPool(32); byte[] buf1 = pool.getBuf(16); @@ -40,7 +40,8 @@ public class ByteArrayPoolTest { assertTrue(buf3 != buf4); } - @Test public void obeysSizeLimit() { + @Test + public void obeysSizeLimit() { ByteArrayPool pool = new ByteArrayPool(32); byte[] buf1 = pool.getBuf(16); @@ -61,7 +62,8 @@ public class ByteArrayPoolTest { assertTrue(buf6 != buf1 && buf6 != buf2 && buf6 != buf3); } - @Test public void returnsBufferWithRightSize() { + @Test + public void returnsBufferWithRightSize() { ByteArrayPool pool = new ByteArrayPool(32); byte[] buf1 = pool.getBuf(16); diff --git a/src/test/java/com/android/volley/toolbox/CacheTest.java b/src/test/java/com/android/volley/toolbox/CacheTest.java index dcd8a27..22dae22 100644 --- a/src/test/java/com/android/volley/toolbox/CacheTest.java +++ b/src/test/java/com/android/volley/toolbox/CacheTest.java @@ -16,13 +16,13 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertNotNull; + import com.android.volley.Cache; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.assertNotNull; - @RunWith(RobolectricTestRunner.class) public class CacheTest { diff --git a/src/test/java/com/android/volley/toolbox/DiskBasedCacheTest.java b/src/test/java/com/android/volley/toolbox/DiskBasedCacheTest.java index 04c071e..fb6392c 100644 --- a/src/test/java/com/android/volley/toolbox/DiskBasedCacheTest.java +++ b/src/test/java/com/android/volley/toolbox/DiskBasedCacheTest.java @@ -16,21 +16,26 @@ package com.android.volley.toolbox; +import static org.hamcrest.Matchers.arrayWithSize; +import static org.hamcrest.Matchers.emptyArray; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + import com.android.volley.Cache; import com.android.volley.Header; import com.android.volley.toolbox.DiskBasedCache.CacheHeader; import com.android.volley.toolbox.DiskBasedCache.CountingInputStream; - -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.EOFException; @@ -42,38 +47,28 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Random; - -import static org.hamcrest.Matchers.arrayWithSize; -import static org.hamcrest.Matchers.emptyArray; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.nullValue; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) -@Config(manifest="src/main/AndroidManifest.xml", sdk=16) +@Config(manifest = "src/main/AndroidManifest.xml", sdk = 16) public class DiskBasedCacheTest { private static final int MAX_SIZE = 1024 * 1024; private Cache cache; - @Rule - public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); - @Rule - public ExpectedException exception = ExpectedException.none(); + @Rule public ExpectedException exception = ExpectedException.none(); @Before public void setup() throws IOException { @@ -279,6 +274,33 @@ public class DiskBasedCacheTest { DiskBasedCache.streamToBytes(cis, 0x100000000L); // int value is 0 } + @Test + public void testReadHeaderListWithNegativeSize() throws IOException { + // If a cached header list is corrupted and begins with a negative size, + // verify that readHeaderList will throw an IOException. + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DiskBasedCache.writeInt(baos, -1); // negative size + CountingInputStream cis = + new CountingInputStream( + new ByteArrayInputStream(baos.toByteArray()), Integer.MAX_VALUE); + // Expect IOException due to negative size + exception.expect(IOException.class); + DiskBasedCache.readHeaderList(cis); + } + + @Test + public void testReadHeaderListWithGinormousSize() throws IOException { + // If a cached header list is corrupted and begins with 2GB size, verify + // that readHeaderList will throw EOFException rather than OutOfMemoryError. + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DiskBasedCache.writeInt(baos, Integer.MAX_VALUE); // 2GB size + CountingInputStream cis = + new CountingInputStream(new ByteArrayInputStream(baos.toByteArray()), baos.size()); + // Expect EOFException when end of stream is reached + exception.expect(EOFException.class); + DiskBasedCache.readHeaderList(cis); + } + @Test public void testFileIsDeletedWhenWriteHeaderFails() throws IOException { // Create DataOutputStream that throws IOException @@ -314,8 +336,7 @@ public class DiskBasedCacheTest { doThrow(IOException.class).when(mockedInputStream).read(); // Create broken cache that fails to read anything - DiskBasedCache broken = - spy(new DiskBasedCache(temporaryFolder.getRoot())); + DiskBasedCache broken = spy(new DiskBasedCache(temporaryFolder.getRoot())); doReturn(mockedInputStream).when(broken).createInputStream(any(File.class)); // Attempt to initialize @@ -379,13 +400,15 @@ public class DiskBasedCacheTest { /* Serialization tests */ - @Test public void testEmptyReadThrowsEOF() throws IOException { - ByteArrayInputStream empty = new ByteArrayInputStream(new byte[]{}); + @Test + public void testEmptyReadThrowsEOF() throws IOException { + ByteArrayInputStream empty = new ByteArrayInputStream(new byte[] {}); exception.expect(EOFException.class); DiskBasedCache.readInt(empty); } - @Test public void serializeInt() throws IOException { + @Test + public void serializeInt() throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DiskBasedCache.writeInt(baos, 0); DiskBasedCache.writeInt(baos, 19791214); @@ -400,7 +423,8 @@ public class DiskBasedCacheTest { assertEquals(DiskBasedCache.readInt(bais), Integer.MAX_VALUE); } - @Test public void serializeLong() throws Exception { + @Test + public void serializeLong() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DiskBasedCache.writeLong(baos, 0); DiskBasedCache.writeLong(baos, 31337); @@ -419,7 +443,8 @@ public class DiskBasedCacheTest { assertEquals(DiskBasedCache.readLong(bais), Long.MAX_VALUE); } - @Test public void serializeString() throws Exception { + @Test + public void serializeString() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DiskBasedCache.writeString(baos, ""); DiskBasedCache.writeString(baos, "This is a string."); @@ -431,7 +456,8 @@ public class DiskBasedCacheTest { assertEquals(DiskBasedCache.readString(cis), "ファイカス"); } - @Test public void serializeHeaders() throws Exception { + @Test + public void serializeHeaders() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); List
empty = new ArrayList<>(); DiskBasedCache.writeHeaderList(empty, baos); diff --git a/src/test/java/com/android/volley/toolbox/HttpClientStackTest.java b/src/test/java/com/android/volley/toolbox/HttpClientStackTest.java index 0c417d4..2a451dc 100644 --- a/src/test/java/com/android/volley/toolbox/HttpClientStackTest.java +++ b/src/test/java/com/android/volley/toolbox/HttpClientStackTest.java @@ -16,10 +16,12 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import com.android.volley.Request.Method; import com.android.volley.mock.TestRequest; import com.android.volley.toolbox.HttpClientStack.HttpPatch; - import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpHead; @@ -28,17 +30,15 @@ import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.client.methods.HttpTrace; import org.apache.http.client.methods.HttpUriRequest; - import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.*; - @RunWith(RobolectricTestRunner.class) public class HttpClientStackTest { - @Test public void createDeprecatedGetRequest() throws Exception { + @Test + public void createDeprecatedGetRequest() throws Exception { TestRequest.DeprecatedGet request = new TestRequest.DeprecatedGet(); assertEquals(request.getMethod(), Method.DEPRECATED_GET_OR_POST); @@ -46,7 +46,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpGet); } - @Test public void createDeprecatedPostRequest() throws Exception { + @Test + public void createDeprecatedPostRequest() throws Exception { TestRequest.DeprecatedPost request = new TestRequest.DeprecatedPost(); assertEquals(request.getMethod(), Method.DEPRECATED_GET_OR_POST); @@ -54,7 +55,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpPost); } - @Test public void createGetRequest() throws Exception { + @Test + public void createGetRequest() throws Exception { TestRequest.Get request = new TestRequest.Get(); assertEquals(request.getMethod(), Method.GET); @@ -62,7 +64,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpGet); } - @Test public void createPostRequest() throws Exception { + @Test + public void createPostRequest() throws Exception { TestRequest.Post request = new TestRequest.Post(); assertEquals(request.getMethod(), Method.POST); @@ -70,7 +73,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpPost); } - @Test public void createPostRequestWithBody() throws Exception { + @Test + public void createPostRequestWithBody() throws Exception { TestRequest.PostWithBody request = new TestRequest.PostWithBody(); assertEquals(request.getMethod(), Method.POST); @@ -78,7 +82,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpPost); } - @Test public void createPutRequest() throws Exception { + @Test + public void createPutRequest() throws Exception { TestRequest.Put request = new TestRequest.Put(); assertEquals(request.getMethod(), Method.PUT); @@ -86,7 +91,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpPut); } - @Test public void createPutRequestWithBody() throws Exception { + @Test + public void createPutRequestWithBody() throws Exception { TestRequest.PutWithBody request = new TestRequest.PutWithBody(); assertEquals(request.getMethod(), Method.PUT); @@ -94,7 +100,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpPut); } - @Test public void createDeleteRequest() throws Exception { + @Test + public void createDeleteRequest() throws Exception { TestRequest.Delete request = new TestRequest.Delete(); assertEquals(request.getMethod(), Method.DELETE); @@ -102,7 +109,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpDelete); } - @Test public void createHeadRequest() throws Exception { + @Test + public void createHeadRequest() throws Exception { TestRequest.Head request = new TestRequest.Head(); assertEquals(request.getMethod(), Method.HEAD); @@ -110,7 +118,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpHead); } - @Test public void createOptionsRequest() throws Exception { + @Test + public void createOptionsRequest() throws Exception { TestRequest.Options request = new TestRequest.Options(); assertEquals(request.getMethod(), Method.OPTIONS); @@ -118,7 +127,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpOptions); } - @Test public void createTraceRequest() throws Exception { + @Test + public void createTraceRequest() throws Exception { TestRequest.Trace request = new TestRequest.Trace(); assertEquals(request.getMethod(), Method.TRACE); @@ -126,7 +136,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpTrace); } - @Test public void createPatchRequest() throws Exception { + @Test + public void createPatchRequest() throws Exception { TestRequest.Patch request = new TestRequest.Patch(); assertEquals(request.getMethod(), Method.PATCH); @@ -134,7 +145,8 @@ public class HttpClientStackTest { assertTrue(httpRequest instanceof HttpPatch); } - @Test public void createPatchRequestWithBody() throws Exception { + @Test + public void createPatchRequestWithBody() throws Exception { TestRequest.PatchWithBody request = new TestRequest.PatchWithBody(); assertEquals(request.getMethod(), Method.PATCH); diff --git a/src/test/java/com/android/volley/toolbox/HttpHeaderParserTest.java b/src/test/java/com/android/volley/toolbox/HttpHeaderParserTest.java index 9ccac05..9b670f9 100644 --- a/src/test/java/com/android/volley/toolbox/HttpHeaderParserTest.java +++ b/src/test/java/com/android/volley/toolbox/HttpHeaderParserTest.java @@ -16,15 +16,14 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import com.android.volley.Cache; import com.android.volley.Header; import com.android.volley.NetworkResponse; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; - import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -33,8 +32,10 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; - -import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class HttpHeaderParserTest { @@ -47,12 +48,14 @@ public class HttpHeaderParserTest { private NetworkResponse response; private Map headers; - @Before public void setUp() throws Exception { + @Before + public void setUp() throws Exception { headers = new HashMap(); response = new NetworkResponse(0, null, headers, false); } - @Test public void parseCacheHeaders_noHeaders() { + @Test + public void parseCacheHeaders_noHeaders() { Cache.Entry entry = HttpHeaderParser.parseCacheHeaders(response); assertNotNull(entry); @@ -63,7 +66,8 @@ public class HttpHeaderParserTest { assertEquals(0, entry.softTtl); } - @Test public void parseCacheHeaders_headersSet() { + @Test + public void parseCacheHeaders_headersSet() { headers.put("MyCustomHeader", "42"); Cache.Entry entry = HttpHeaderParser.parseCacheHeaders(response); @@ -74,7 +78,8 @@ public class HttpHeaderParserTest { assertEquals("42", entry.responseHeaders.get("MyCustomHeader")); } - @Test public void parseCacheHeaders_etag() { + @Test + public void parseCacheHeaders_etag() { headers.put("ETag", "Yow!"); Cache.Entry entry = HttpHeaderParser.parseCacheHeaders(response); @@ -83,7 +88,8 @@ public class HttpHeaderParserTest { assertEquals("Yow!", entry.etag); } - @Test public void parseCacheHeaders_normalExpire() { + @Test + public void parseCacheHeaders_normalExpire() { long now = System.currentTimeMillis(); headers.put("Date", rfc1123Date(now)); headers.put("Last-Modified", rfc1123Date(now - ONE_DAY_MILLIS)); @@ -99,7 +105,8 @@ public class HttpHeaderParserTest { assertTrue(entry.ttl == entry.softTtl); } - @Test public void parseCacheHeaders_expiresInPast() { + @Test + public void parseCacheHeaders_expiresInPast() { long now = System.currentTimeMillis(); headers.put("Date", rfc1123Date(now)); headers.put("Expires", rfc1123Date(now - ONE_HOUR_MILLIS)); @@ -113,7 +120,8 @@ public class HttpHeaderParserTest { assertEquals(0, entry.softTtl); } - @Test public void parseCacheHeaders_serverRelative() { + @Test + public void parseCacheHeaders_serverRelative() { long now = System.currentTimeMillis(); // Set "current" date as one hour in the future @@ -127,7 +135,8 @@ public class HttpHeaderParserTest { assertEquals(entry.softTtl, entry.ttl); } - @Test public void parseCacheHeaders_cacheControlOverridesExpires() { + @Test + public void parseCacheHeaders_cacheControlOverridesExpires() { long now = System.currentTimeMillis(); headers.put("Date", rfc1123Date(now)); headers.put("Expires", rfc1123Date(now + ONE_HOUR_MILLIS)); @@ -141,7 +150,8 @@ public class HttpHeaderParserTest { assertEquals(entry.softTtl, entry.ttl); } - @Test public void testParseCacheHeaders_staleWhileRevalidate() { + @Test + public void testParseCacheHeaders_staleWhileRevalidate() { long now = System.currentTimeMillis(); headers.put("Date", rfc1123Date(now)); headers.put("Expires", rfc1123Date(now + ONE_HOUR_MILLIS)); @@ -159,7 +169,8 @@ public class HttpHeaderParserTest { assertEqualsWithin(now + ONE_DAY_MILLIS + ONE_WEEK_MILLIS, entry.ttl, ONE_MINUTE_MILLIS); } - @Test public void parseCacheHeaders_cacheControlNoCache() { + @Test + public void parseCacheHeaders_cacheControlNoCache() { long now = System.currentTimeMillis(); headers.put("Date", rfc1123Date(now)); headers.put("Expires", rfc1123Date(now + ONE_HOUR_MILLIS)); @@ -170,7 +181,8 @@ public class HttpHeaderParserTest { assertNull(entry); } - @Test public void parseCacheHeaders_cacheControlMustRevalidateNoMaxAge() { + @Test + public void parseCacheHeaders_cacheControlMustRevalidateNoMaxAge() { long now = System.currentTimeMillis(); headers.put("Date", rfc1123Date(now)); headers.put("Expires", rfc1123Date(now + ONE_HOUR_MILLIS)); @@ -183,7 +195,8 @@ public class HttpHeaderParserTest { assertEquals(entry.softTtl, entry.ttl); } - @Test public void parseCacheHeaders_cacheControlMustRevalidateWithMaxAge() { + @Test + public void parseCacheHeaders_cacheControlMustRevalidateWithMaxAge() { long now = System.currentTimeMillis(); headers.put("Date", rfc1123Date(now)); headers.put("Expires", rfc1123Date(now + ONE_HOUR_MILLIS)); @@ -196,7 +209,8 @@ public class HttpHeaderParserTest { assertEquals(entry.softTtl, entry.ttl); } - @Test public void parseCacheHeaders_cacheControlMustRevalidateWithMaxAgeAndStale() { + @Test + public void parseCacheHeaders_cacheControlMustRevalidateWithMaxAgeAndStale() { long now = System.currentTimeMillis(); headers.put("Date", rfc1123Date(now)); headers.put("Expires", rfc1123Date(now + ONE_HOUR_MILLIS)); @@ -205,8 +219,8 @@ public class HttpHeaderParserTest { // - stale-while-revalidate (entry.ttl) indicates that the asset may // continue to be served stale for up to additional 7 days, but this is // ignored in this case because of the must-revalidate header. - headers.put("Cache-Control", - "must-revalidate, max-age=86400, stale-while-revalidate=604800"); + headers.put( + "Cache-Control", "must-revalidate, max-age=86400, stale-while-revalidate=604800"); Cache.Entry entry = HttpHeaderParser.parseCacheHeaders(response); assertNotNull(entry); @@ -227,7 +241,8 @@ public class HttpHeaderParserTest { // -------------------------- - @Test public void parseCharset() { + @Test + public void parseCharset() { // Like the ones we usually see headers.put("Content-Type", "text/plain; charset=utf-8"); assertEquals("utf-8", HttpHeaderParser.parseCharset(headers)); @@ -269,7 +284,8 @@ public class HttpHeaderParserTest { assertEquals("ISO-8859-1", HttpHeaderParser.parseCharset(headers)); } - @Test public void parseCaseInsensitive() { + @Test + public void parseCaseInsensitive() { long now = System.currentTimeMillis(); List
headers = new ArrayList<>(); @@ -286,7 +302,7 @@ public class HttpHeaderParserTest { assertEquals("Yow!", entry.etag); assertEqualsWithin(now + ONE_DAY_MILLIS, entry.ttl, ONE_MINUTE_MILLIS); assertEquals(entry.softTtl, entry.ttl); - assertEquals("ISO-8859-1", - HttpHeaderParser.parseCharset(HttpHeaderParser.toHeaderMap(headers))); + assertEquals( + "ISO-8859-1", HttpHeaderParser.parseCharset(HttpHeaderParser.toHeaderMap(headers))); } } diff --git a/src/test/java/com/android/volley/toolbox/HurlStackTest.java b/src/test/java/com/android/volley/toolbox/HurlStackTest.java index c8dd6f1..c1fc92d 100644 --- a/src/test/java/com/android/volley/toolbox/HurlStackTest.java +++ b/src/test/java/com/android/volley/toolbox/HurlStackTest.java @@ -16,151 +16,232 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import com.android.volley.Header; import com.android.volley.Request.Method; -import com.android.volley.mock.MockHttpURLConnection; import com.android.volley.mock.TestRequest; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; - +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; - -import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class HurlStackTest { - private MockHttpURLConnection mMockConnection; - - @Before public void setUp() throws Exception { - mMockConnection = new MockHttpURLConnection(); + @Mock private HttpURLConnection mMockConnection; + private HurlStack mHurlStack; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + when(mMockConnection.getOutputStream()).thenReturn(new ByteArrayOutputStream()); + + mHurlStack = + new HurlStack() { + @Override + protected HttpURLConnection createConnection(URL url) { + return mMockConnection; + } + }; } - @Test public void connectionForDeprecatedGetRequest() throws Exception { + @Test + public void connectionForDeprecatedGetRequest() throws Exception { TestRequest.DeprecatedGet request = new TestRequest.DeprecatedGet(); assertEquals(request.getMethod(), Method.DEPRECATED_GET_OR_POST); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("GET", mMockConnection.getRequestMethod()); - assertFalse(mMockConnection.getDoOutput()); + verify(mMockConnection, never()).setRequestMethod(anyString()); + verify(mMockConnection, never()).setDoOutput(true); } - @Test public void connectionForDeprecatedPostRequest() throws Exception { + @Test + public void connectionForDeprecatedPostRequest() throws Exception { TestRequest.DeprecatedPost request = new TestRequest.DeprecatedPost(); assertEquals(request.getMethod(), Method.DEPRECATED_GET_OR_POST); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("POST", mMockConnection.getRequestMethod()); - assertTrue(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("POST"); + verify(mMockConnection).setDoOutput(true); } - @Test public void connectionForGetRequest() throws Exception { + @Test + public void connectionForGetRequest() throws Exception { TestRequest.Get request = new TestRequest.Get(); assertEquals(request.getMethod(), Method.GET); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("GET", mMockConnection.getRequestMethod()); - assertFalse(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("GET"); + verify(mMockConnection, never()).setDoOutput(true); } - @Test public void connectionForPostRequest() throws Exception { + @Test + public void connectionForPostRequest() throws Exception { TestRequest.Post request = new TestRequest.Post(); assertEquals(request.getMethod(), Method.POST); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("POST", mMockConnection.getRequestMethod()); - assertFalse(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("POST"); + verify(mMockConnection, never()).setDoOutput(true); } - @Test public void connectionForPostWithBodyRequest() throws Exception { + @Test + public void connectionForPostWithBodyRequest() throws Exception { TestRequest.PostWithBody request = new TestRequest.PostWithBody(); assertEquals(request.getMethod(), Method.POST); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("POST", mMockConnection.getRequestMethod()); - assertTrue(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("POST"); + verify(mMockConnection).setDoOutput(true); } - @Test public void connectionForPutRequest() throws Exception { + @Test + public void connectionForPutRequest() throws Exception { TestRequest.Put request = new TestRequest.Put(); assertEquals(request.getMethod(), Method.PUT); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("PUT", mMockConnection.getRequestMethod()); - assertFalse(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("PUT"); + verify(mMockConnection, never()).setDoOutput(true); } - @Test public void connectionForPutWithBodyRequest() throws Exception { + @Test + public void connectionForPutWithBodyRequest() throws Exception { TestRequest.PutWithBody request = new TestRequest.PutWithBody(); assertEquals(request.getMethod(), Method.PUT); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("PUT", mMockConnection.getRequestMethod()); - assertTrue(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("PUT"); + verify(mMockConnection).setDoOutput(true); } - @Test public void connectionForDeleteRequest() throws Exception { + @Test + public void connectionForDeleteRequest() throws Exception { TestRequest.Delete request = new TestRequest.Delete(); assertEquals(request.getMethod(), Method.DELETE); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("DELETE", mMockConnection.getRequestMethod()); - assertFalse(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("DELETE"); + verify(mMockConnection, never()).setDoOutput(true); } - @Test public void connectionForHeadRequest() throws Exception { + @Test + public void connectionForHeadRequest() throws Exception { TestRequest.Head request = new TestRequest.Head(); assertEquals(request.getMethod(), Method.HEAD); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("HEAD", mMockConnection.getRequestMethod()); - assertFalse(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("HEAD"); + verify(mMockConnection, never()).setDoOutput(true); } - @Test public void connectionForOptionsRequest() throws Exception { + @Test + public void connectionForOptionsRequest() throws Exception { TestRequest.Options request = new TestRequest.Options(); assertEquals(request.getMethod(), Method.OPTIONS); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("OPTIONS", mMockConnection.getRequestMethod()); - assertFalse(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("OPTIONS"); + verify(mMockConnection, never()).setDoOutput(true); } - @Test public void connectionForTraceRequest() throws Exception { + @Test + public void connectionForTraceRequest() throws Exception { TestRequest.Trace request = new TestRequest.Trace(); assertEquals(request.getMethod(), Method.TRACE); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("TRACE", mMockConnection.getRequestMethod()); - assertFalse(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("TRACE"); + verify(mMockConnection, never()).setDoOutput(true); } - @Test public void connectionForPatchRequest() throws Exception { + @Test + public void connectionForPatchRequest() throws Exception { TestRequest.Patch request = new TestRequest.Patch(); assertEquals(request.getMethod(), Method.PATCH); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("PATCH", mMockConnection.getRequestMethod()); - assertFalse(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("PATCH"); + verify(mMockConnection, never()).setDoOutput(true); } - @Test public void connectionForPatchWithBodyRequest() throws Exception { + @Test + public void connectionForPatchWithBodyRequest() throws Exception { TestRequest.PatchWithBody request = new TestRequest.PatchWithBody(); assertEquals(request.getMethod(), Method.PATCH); HurlStack.setConnectionParametersForRequest(mMockConnection, request); - assertEquals("PATCH", mMockConnection.getRequestMethod()); - assertTrue(mMockConnection.getDoOutput()); + verify(mMockConnection).setRequestMethod("PATCH"); + verify(mMockConnection).setDoOutput(true); + } + + @Test + public void executeRequestClosesConnection_connectionError() throws Exception { + when(mMockConnection.getResponseCode()).thenThrow(new SocketTimeoutException()); + try { + mHurlStack.executeRequest( + new TestRequest.Get(), Collections.emptyMap()); + fail("Should have thrown exception"); + } catch (IOException e) { + verify(mMockConnection).disconnect(); + } + } + + @Test + public void executeRequestClosesConnection_invalidResponseCode() throws Exception { + when(mMockConnection.getResponseCode()).thenReturn(-1); + try { + mHurlStack.executeRequest( + new TestRequest.Get(), Collections.emptyMap()); + fail("Should have thrown exception"); + } catch (IOException e) { + verify(mMockConnection).disconnect(); + } + } + + @Test + public void executeRequestClosesConnection_noResponseBody() throws Exception { + when(mMockConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_NO_CONTENT); + mHurlStack.executeRequest(new TestRequest.Get(), Collections.emptyMap()); + verify(mMockConnection).disconnect(); + } + + @Test + public void executeRequestClosesConnection_hasResponseBody() throws Exception { + when(mMockConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK); + when(mMockConnection.getInputStream()) + .thenReturn(new ByteArrayInputStream("hello".getBytes(StandardCharsets.UTF_8))); + HttpResponse response = + mHurlStack.executeRequest( + new TestRequest.Get(), Collections.emptyMap()); + // Shouldn't be disconnected until the stream is consumed. + verify(mMockConnection, never()).disconnect(); + response.getContent().close(); + verify(mMockConnection).disconnect(); } - @Test public void convertHeaders() { + @Test + public void convertHeaders() { Map> headers = new HashMap<>(); headers.put(null, Collections.singletonList("Ignored")); headers.put("HeaderA", Collections.singletonList("ValueA")); diff --git a/src/test/java/com/android/volley/toolbox/ImageLoaderTest.java b/src/test/java/com/android/volley/toolbox/ImageLoaderTest.java index 8a19817..59a0b1b 100644 --- a/src/test/java/com/android/volley/toolbox/ImageLoaderTest.java +++ b/src/test/java/com/android/volley/toolbox/ImageLoaderTest.java @@ -16,6 +16,15 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.graphics.Bitmap; import android.widget.ImageView; import com.android.volley.Request; @@ -24,11 +33,9 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Mockito.*; - @RunWith(RobolectricTestRunner.class) public class ImageLoaderTest { private RequestQueue mRequestQueue; @@ -69,7 +76,7 @@ public class ImageLoaderTest { // Response callback should be called both times. verify(listener, times(2)).onResponse(any(ImageLoader.ImageContainer.class), eq(true)); // But request should be enqueued only once. - verify(mRequestQueue, times(1)).add(any(Request.class)); + verify(mRequestQueue, times(1)).add(Mockito.>any()); } @Test @@ -78,24 +85,37 @@ public class ImageLoaderTest { ImageLoader.getImageListener(null, -1, -1); mImageLoader.setBatchedResponseDelay(1000); - assertNotNull(ImageLoader.class.getConstructor(RequestQueue.class, - ImageLoader.ImageCache.class)); + assertNotNull( + ImageLoader.class.getConstructor(RequestQueue.class, ImageLoader.ImageCache.class)); - assertNotNull(ImageLoader.class.getMethod("getImageListener", ImageView.class, - int.class, int.class)); + assertNotNull( + ImageLoader.class.getMethod( + "getImageListener", ImageView.class, int.class, int.class)); assertNotNull(ImageLoader.class.getMethod("isCached", String.class, int.class, int.class)); - assertNotNull(ImageLoader.class.getMethod("isCached", String.class, int.class, int.class, - ImageView.ScaleType.class)); - assertNotNull(ImageLoader.class.getMethod("get", String.class, - ImageLoader.ImageListener.class)); - assertNotNull(ImageLoader.class.getMethod("get", String.class, - ImageLoader.ImageListener.class, int.class, int.class)); - assertNotNull(ImageLoader.class.getMethod("get", String.class, - ImageLoader.ImageListener.class, int.class, int.class, ImageView.ScaleType.class)); + assertNotNull( + ImageLoader.class.getMethod( + "isCached", String.class, int.class, int.class, ImageView.ScaleType.class)); + assertNotNull( + ImageLoader.class.getMethod("get", String.class, ImageLoader.ImageListener.class)); + assertNotNull( + ImageLoader.class.getMethod( + "get", + String.class, + ImageLoader.ImageListener.class, + int.class, + int.class)); + assertNotNull( + ImageLoader.class.getMethod( + "get", + String.class, + ImageLoader.ImageListener.class, + int.class, + int.class, + ImageView.ScaleType.class)); assertNotNull(ImageLoader.class.getMethod("setBatchedResponseDelay", int.class)); - assertNotNull(ImageLoader.ImageListener.class.getMethod("onResponse", - ImageLoader.ImageContainer.class, boolean.class)); + assertNotNull( + ImageLoader.ImageListener.class.getMethod( + "onResponse", ImageLoader.ImageContainer.class, boolean.class)); } } - diff --git a/src/test/java/com/android/volley/toolbox/ImageRequestTest.java b/src/test/java/com/android/volley/toolbox/ImageRequestTest.java index a99363e..6b50319 100644 --- a/src/test/java/com/android/volley/toolbox/ImageRequestTest.java +++ b/src/test/java/com/android/volley/toolbox/ImageRequestTest.java @@ -16,28 +16,30 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import com.android.volley.NetworkResponse; import com.android.volley.Response; - +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.shadows.ShadowBitmapFactory; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import static org.junit.Assert.*; - @RunWith(RobolectricTestRunner.class) public class ImageRequestTest { - @Test public void parseNetworkResponse_resizing() throws Exception { + @Test + public void parseNetworkResponse_resizing() throws Exception { // This is a horrible hack but Robolectric doesn't have a way to provide // width and height hints for decodeByteArray. It works because the byte array // "file:fake" is ASCII encodable and thus the name in Robolectric's fake @@ -45,7 +47,7 @@ public class ImageRequestTest { // "file:" + name in its lookaside map. I write all this because it will // probably break mysteriously at some point and I feel terrible about your // having to debug it. - byte[] jpegBytes = "file:fake".getBytes(); + byte[] jpegBytes = "file:fake".getBytes(StandardCharsets.UTF_8); ShadowBitmapFactory.provideWidthAndHeightHints("fake", 1024, 500); NetworkResponse jpeg = new NetworkResponse(jpegBytes); @@ -73,7 +75,6 @@ public class ImageRequestTest { // No resize verifyResize(jpeg, 0, 0, scalteType, 1024, 500); - // Scale the image uniformly (maintain the image's aspect ratio) so that // both dimensions (width and height) of the image will be equal to or // larger than the corresponding dimension of the view. @@ -98,7 +99,6 @@ public class ImageRequestTest { // No resize verifyResize(jpeg, 0, 0, scalteType, 1024, 500); - // Scale in X and Y independently, so that src matches dst exactly. This // may change the aspect ratio of the src. scalteType = ScaleType.FIT_XY; @@ -123,10 +123,15 @@ public class ImageRequestTest { verifyResize(jpeg, 0, 0, scalteType, 1024, 500); } - private void verifyResize(NetworkResponse networkResponse, int maxWidth, int maxHeight, - ScaleType scaleType, int expectedWidth, int expectedHeight) { - ImageRequest request = new ImageRequest("", null, maxWidth, maxHeight, scaleType, - Config.RGB_565, null); + private void verifyResize( + NetworkResponse networkResponse, + int maxWidth, + int maxHeight, + ScaleType scaleType, + int expectedWidth, + int expectedHeight) { + ImageRequest request = + new ImageRequest("", null, maxWidth, maxHeight, scaleType, Config.RGB_565, null); Response response = request.parseNetworkResponse(networkResponse); assertNotNull(response); assertTrue(response.isSuccess()); @@ -136,7 +141,8 @@ public class ImageRequestTest { assertEquals(expectedHeight, bitmap.getHeight()); } - @Test public void findBestSampleSize() { + @Test + public void findBestSampleSize() { // desired == actual == 1 assertEquals(1, ImageRequest.findBestSampleSize(100, 150, 100, 150)); @@ -164,11 +170,23 @@ public class ImageRequestTest { @Test public void publicMethods() throws Exception { // Catch-all test to find API-breaking changes. - assertNotNull(ImageRequest.class.getConstructor(String.class, Response.Listener.class, - int.class, int.class, Bitmap.Config.class, Response.ErrorListener.class)); - assertNotNull(ImageRequest.class.getConstructor(String.class, Response.Listener.class, - int.class, int.class, ImageView.ScaleType.class, Bitmap.Config.class, - Response.ErrorListener.class)); + assertNotNull( + ImageRequest.class.getConstructor( + String.class, + Response.Listener.class, + int.class, + int.class, + Bitmap.Config.class, + Response.ErrorListener.class)); + assertNotNull( + ImageRequest.class.getConstructor( + String.class, + Response.Listener.class, + int.class, + int.class, + ImageView.ScaleType.class, + Bitmap.Config.class, + Response.ErrorListener.class)); assertEquals(ImageRequest.DEFAULT_IMAGE_TIMEOUT_MS, 1000); assertEquals(ImageRequest.DEFAULT_IMAGE_MAX_RETRIES, 2); assertEquals(ImageRequest.DEFAULT_IMAGE_BACKOFF_MULT, 2f, 0); diff --git a/src/test/java/com/android/volley/toolbox/JsonRequestCharsetTest.java b/src/test/java/com/android/volley/toolbox/JsonRequestCharsetTest.java index db6f648..70bb2ea 100644 --- a/src/test/java/com/android/volley/toolbox/JsonRequestCharsetTest.java +++ b/src/test/java/com/android/volley/toolbox/JsonRequestCharsetTest.java @@ -16,44 +16,41 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import com.android.volley.NetworkResponse; import com.android.volley.Response; -import com.android.volley.toolbox.JsonArrayRequest; -import com.android.volley.toolbox.JsonObjectRequest; - +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; import org.json.JSONArray; import org.json.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import java.lang.Exception; -import java.lang.String; -import java.nio.charset.Charset; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.Assert.*; - @RunWith(RobolectricTestRunner.class) public class JsonRequestCharsetTest { - /** - * String in Czech - "Retezec v cestine." - */ + /** String in Czech - "Retezec v cestine." */ private static final String TEXT_VALUE = "\u0158et\u011bzec v \u010de\u0161tin\u011b."; + private static final String TEXT_NAME = "text"; private static final int TEXT_INDEX = 0; /** - * Copyright symbol has different encoding in utf-8 and ISO-8859-1, - * and it doesn't exists in ISO-8859-2 + * Copyright symbol has different encoding in utf-8 and ISO-8859-1, and it doesn't exists in + * ISO-8859-2 */ private static final String COPY_VALUE = "\u00a9"; + private static final String COPY_NAME = "copyright"; private static final int COPY_INDEX = 1; - @Test public void defaultCharsetJsonObject() throws Exception { + @Test + public void defaultCharsetJsonObject() throws Exception { // UTF-8 is default charset for JSON byte[] data = jsonObjectString().getBytes(Charset.forName("UTF-8")); NetworkResponse network = new NetworkResponse(data); @@ -66,7 +63,8 @@ public class JsonRequestCharsetTest { assertEquals(COPY_VALUE, objectResponse.result.getString(COPY_NAME)); } - @Test public void defaultCharsetJsonArray() throws Exception { + @Test + public void defaultCharsetJsonArray() throws Exception { // UTF-8 is default charset for JSON byte[] data = jsonArrayString().getBytes(Charset.forName("UTF-8")); NetworkResponse network = new NetworkResponse(data); @@ -79,7 +77,8 @@ public class JsonRequestCharsetTest { assertEquals(COPY_VALUE, arrayResponse.result.getString(COPY_INDEX)); } - @Test public void specifiedCharsetJsonObject() throws Exception { + @Test + public void specifiedCharsetJsonObject() throws Exception { byte[] data = jsonObjectString().getBytes(Charset.forName("ISO-8859-1")); Map headers = new HashMap(); headers.put("Content-Type", "application/json; charset=iso-8859-1"); @@ -89,11 +88,12 @@ public class JsonRequestCharsetTest { assertNotNull(objectResponse); assertTrue(objectResponse.isSuccess()); - //don't check the text in Czech, ISO-8859-1 doesn't support some Czech characters + // don't check the text in Czech, ISO-8859-1 doesn't support some Czech characters assertEquals(COPY_VALUE, objectResponse.result.getString(COPY_NAME)); } - @Test public void specifiedCharsetJsonArray() throws Exception { + @Test + public void specifiedCharsetJsonArray() throws Exception { byte[] data = jsonArrayString().getBytes(Charset.forName("ISO-8859-2")); Map headers = new HashMap(); headers.put("Content-Type", "application/json; charset=iso-8859-2"); diff --git a/src/test/java/com/android/volley/toolbox/JsonRequestTest.java b/src/test/java/com/android/volley/toolbox/JsonRequestTest.java index e39c8c8..44c0ad9 100644 --- a/src/test/java/com/android/volley/toolbox/JsonRequestTest.java +++ b/src/test/java/com/android/volley/toolbox/JsonRequestTest.java @@ -16,6 +16,8 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertNotNull; + import com.android.volley.Response; import org.json.JSONArray; import org.json.JSONObject; @@ -23,27 +25,49 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.assertNotNull; - @RunWith(RobolectricTestRunner.class) public class JsonRequestTest { @Test public void publicMethods() throws Exception { // Catch-all test to find API-breaking changes. - assertNotNull(JsonRequest.class.getConstructor(String.class, String.class, - Response.Listener.class, Response.ErrorListener.class)); - assertNotNull(JsonRequest.class.getConstructor(int.class, String.class, String.class, - Response.Listener.class, Response.ErrorListener.class)); + assertNotNull( + JsonRequest.class.getConstructor( + String.class, + String.class, + Response.Listener.class, + Response.ErrorListener.class)); + assertNotNull( + JsonRequest.class.getConstructor( + int.class, + String.class, + String.class, + Response.Listener.class, + Response.ErrorListener.class)); - assertNotNull(JsonArrayRequest.class.getConstructor(String.class, - Response.Listener.class, Response.ErrorListener.class)); - assertNotNull(JsonArrayRequest.class.getConstructor(int.class, String.class, JSONArray.class, - Response.Listener.class, Response.ErrorListener.class)); + assertNotNull( + JsonArrayRequest.class.getConstructor( + String.class, Response.Listener.class, Response.ErrorListener.class)); + assertNotNull( + JsonArrayRequest.class.getConstructor( + int.class, + String.class, + JSONArray.class, + Response.Listener.class, + Response.ErrorListener.class)); - assertNotNull(JsonObjectRequest.class.getConstructor(String.class, JSONObject.class, - Response.Listener.class, Response.ErrorListener.class)); - assertNotNull(JsonObjectRequest.class.getConstructor(int.class, String.class, - JSONObject.class, Response.Listener.class, Response.ErrorListener.class)); + assertNotNull( + JsonObjectRequest.class.getConstructor( + String.class, + JSONObject.class, + Response.Listener.class, + Response.ErrorListener.class)); + assertNotNull( + JsonObjectRequest.class.getConstructor( + int.class, + String.class, + JSONObject.class, + Response.Listener.class, + Response.ErrorListener.class)); } } diff --git a/src/test/java/com/android/volley/toolbox/NetworkImageViewTest.java b/src/test/java/com/android/volley/toolbox/NetworkImageViewTest.java index 055005f..af8fad9 100644 --- a/src/test/java/com/android/volley/toolbox/NetworkImageViewTest.java +++ b/src/test/java/com/android/volley/toolbox/NetworkImageViewTest.java @@ -16,31 +16,34 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + import android.content.Context; import android.util.AttributeSet; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView.ScaleType; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; import org.robolectric.RobolectricTestRunner; - -import static org.junit.Assert.*; +import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) public class NetworkImageViewTest { private NetworkImageView mNIV; private MockImageLoader mMockImageLoader; - @Before public void setUp() throws Exception { + @Before + public void setUp() throws Exception { mMockImageLoader = new MockImageLoader(); mNIV = new NetworkImageView(RuntimeEnvironment.application); } - @Test public void setImageUrl_requestsImage() { - mNIV.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); + @Test + public void setImageUrl_requestsImage() { + mNIV.setLayoutParams( + new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); mNIV.setImageUrl("http://foo", mMockImageLoader); assertEquals("http://foo", mMockImageLoader.lastRequestUrl); assertEquals(0, mMockImageLoader.lastMaxWidth); @@ -52,7 +55,7 @@ public class NetworkImageViewTest { // // instrumentation test. Write this test once it's figured out. // } - private class MockImageLoader extends ImageLoader { + private static class MockImageLoader extends ImageLoader { public MockImageLoader() { super(null, null); } @@ -61,8 +64,13 @@ public class NetworkImageViewTest { public int lastMaxWidth; public int lastMaxHeight; - public ImageContainer get(String requestUrl, ImageListener imageListener, int maxWidth, - int maxHeight, ScaleType scaleType) { + @Override + public ImageContainer get( + String requestUrl, + ImageListener imageListener, + int maxWidth, + int maxHeight, + ScaleType scaleType) { lastRequestUrl = requestUrl; lastMaxWidth = maxWidth; lastMaxHeight = maxHeight; @@ -75,10 +83,12 @@ public class NetworkImageViewTest { // Catch-all test to find API-breaking changes. assertNotNull(NetworkImageView.class.getConstructor(Context.class)); assertNotNull(NetworkImageView.class.getConstructor(Context.class, AttributeSet.class)); - assertNotNull(NetworkImageView.class.getConstructor(Context.class, AttributeSet.class, - int.class)); + assertNotNull( + NetworkImageView.class.getConstructor( + Context.class, AttributeSet.class, int.class)); - assertNotNull(NetworkImageView.class.getMethod("setImageUrl", String.class, ImageLoader.class)); + assertNotNull( + NetworkImageView.class.getMethod("setImageUrl", String.class, ImageLoader.class)); assertNotNull(NetworkImageView.class.getMethod("setDefaultImageResId", int.class)); assertNotNull(NetworkImageView.class.getMethod("setErrorImageResId", int.class)); } diff --git a/src/test/java/com/android/volley/toolbox/PoolingByteArrayOutputStreamTest.java b/src/test/java/com/android/volley/toolbox/PoolingByteArrayOutputStreamTest.java index c3bfac7..266edcd 100644 --- a/src/test/java/com/android/volley/toolbox/PoolingByteArrayOutputStreamTest.java +++ b/src/test/java/com/android/volley/toolbox/PoolingByteArrayOutputStreamTest.java @@ -16,36 +16,39 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertTrue; + import java.io.IOException; import java.util.Arrays; - import org.junit.Test; -import static org.junit.Assert.*; - public class PoolingByteArrayOutputStreamTest { - @Test public void pooledOneBuffer() throws IOException { + @Test + public void pooledOneBuffer() throws IOException { ByteArrayPool pool = new ByteArrayPool(32768); writeOneBuffer(pool); writeOneBuffer(pool); writeOneBuffer(pool); } - @Test public void pooledIndividualWrites() throws IOException { + @Test + public void pooledIndividualWrites() throws IOException { ByteArrayPool pool = new ByteArrayPool(32768); writeBytesIndividually(pool); writeBytesIndividually(pool); writeBytesIndividually(pool); } - @Test public void unpooled() throws IOException { + @Test + public void unpooled() throws IOException { ByteArrayPool pool = new ByteArrayPool(0); writeOneBuffer(pool); writeOneBuffer(pool); writeOneBuffer(pool); } - @Test public void unpooledIndividualWrites() throws IOException { + @Test + public void unpooledIndividualWrites() throws IOException { ByteArrayPool pool = new ByteArrayPool(0); writeBytesIndividually(pool); writeBytesIndividually(pool); diff --git a/src/test/java/com/android/volley/toolbox/RequestFutureTest.java b/src/test/java/com/android/volley/toolbox/RequestFutureTest.java index c8e23e7..5b5c975 100644 --- a/src/test/java/com/android/volley/toolbox/RequestFutureTest.java +++ b/src/test/java/com/android/volley/toolbox/RequestFutureTest.java @@ -16,13 +16,13 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertNotNull; + import com.android.volley.Request; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.assertNotNull; - @RunWith(RobolectricTestRunner.class) public class RequestFutureTest { diff --git a/src/test/java/com/android/volley/toolbox/RequestQueueTest.java b/src/test/java/com/android/volley/toolbox/RequestQueueTest.java index 1e4b82e..1899b71 100644 --- a/src/test/java/com/android/volley/toolbox/RequestQueueTest.java +++ b/src/test/java/com/android/volley/toolbox/RequestQueueTest.java @@ -16,21 +16,26 @@ package com.android.volley.toolbox; -import com.android.volley.*; +import static org.junit.Assert.assertNotNull; + +import com.android.volley.Cache; +import com.android.volley.Network; +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.ResponseDelivery; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.assertNotNull; - @RunWith(RobolectricTestRunner.class) public class RequestQueueTest { @Test public void publicMethods() throws Exception { // Catch-all test to find API-breaking changes. - assertNotNull(RequestQueue.class.getConstructor(Cache.class, Network.class, int.class, - ResponseDelivery.class)); + assertNotNull( + RequestQueue.class.getConstructor( + Cache.class, Network.class, int.class, ResponseDelivery.class)); assertNotNull(RequestQueue.class.getConstructor(Cache.class, Network.class, int.class)); assertNotNull(RequestQueue.class.getConstructor(Cache.class, Network.class)); diff --git a/src/test/java/com/android/volley/toolbox/RequestTest.java b/src/test/java/com/android/volley/toolbox/RequestTest.java index 22d2ef2..0911ad6 100644 --- a/src/test/java/com/android/volley/toolbox/RequestTest.java +++ b/src/test/java/com/android/volley/toolbox/RequestTest.java @@ -16,21 +16,28 @@ package com.android.volley.toolbox; -import com.android.volley.*; +import static org.junit.Assert.assertNotNull; + +import com.android.volley.Cache; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.RetryPolicy; +import com.android.volley.VolleyError; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.assertNotNull; - @RunWith(RobolectricTestRunner.class) public class RequestTest { @Test public void publicMethods() throws Exception { // Catch-all test to find API-breaking changes. - assertNotNull(Request.class.getConstructor(int.class, String.class, - Response.ErrorListener.class)); + assertNotNull( + Request.class.getConstructor( + int.class, String.class, Response.ErrorListener.class)); assertNotNull(Request.class.getMethod("getMethod")); assertNotNull(Request.class.getMethod("setTag", Object.class)); @@ -61,7 +68,8 @@ public class RequestTest { assertNotNull(Request.class.getMethod("getRetryPolicy")); assertNotNull(Request.class.getMethod("markDelivered")); assertNotNull(Request.class.getMethod("hasHadResponseDelivered")); - assertNotNull(Request.class.getDeclaredMethod("parseNetworkResponse", NetworkResponse.class)); + assertNotNull( + Request.class.getDeclaredMethod("parseNetworkResponse", NetworkResponse.class)); assertNotNull(Request.class.getDeclaredMethod("parseNetworkError", VolleyError.class)); assertNotNull(Request.class.getDeclaredMethod("deliverResponse", Object.class)); assertNotNull(Request.class.getMethod("deliverError", VolleyError.class)); diff --git a/src/test/java/com/android/volley/toolbox/ResponseTest.java b/src/test/java/com/android/volley/toolbox/ResponseTest.java index e830eb5..44438fa 100644 --- a/src/test/java/com/android/volley/toolbox/ResponseTest.java +++ b/src/test/java/com/android/volley/toolbox/ResponseTest.java @@ -16,18 +16,17 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertNotNull; + import com.android.volley.Cache; import com.android.volley.NetworkResponse; import com.android.volley.Response; import com.android.volley.VolleyError; +import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import java.util.Map; - -import static org.junit.Assert.assertNotNull; - @RunWith(RobolectricTestRunner.class) public class ResponseTest { @@ -40,13 +39,16 @@ public class ResponseTest { assertNotNull(Response.Listener.class.getDeclaredMethod("onResponse", Object.class)); - assertNotNull(Response.ErrorListener.class.getDeclaredMethod("onErrorResponse", - VolleyError.class)); + assertNotNull( + Response.ErrorListener.class.getDeclaredMethod( + "onErrorResponse", VolleyError.class)); - assertNotNull(NetworkResponse.class.getConstructor(int.class, byte[].class, Map.class, - boolean.class, long.class)); - assertNotNull(NetworkResponse.class.getConstructor(int.class, byte[].class, Map.class, - boolean.class)); + assertNotNull( + NetworkResponse.class.getConstructor( + int.class, byte[].class, Map.class, boolean.class, long.class)); + assertNotNull( + NetworkResponse.class.getConstructor( + int.class, byte[].class, Map.class, boolean.class)); assertNotNull(NetworkResponse.class.getConstructor(byte[].class)); assertNotNull(NetworkResponse.class.getConstructor(byte[].class, Map.class)); } diff --git a/src/test/java/com/android/volley/toolbox/StringRequestTest.java b/src/test/java/com/android/volley/toolbox/StringRequestTest.java index eadd73f..0ecb06b 100644 --- a/src/test/java/com/android/volley/toolbox/StringRequestTest.java +++ b/src/test/java/com/android/volley/toolbox/StringRequestTest.java @@ -16,22 +16,27 @@ package com.android.volley.toolbox; +import static org.junit.Assert.assertNotNull; + import com.android.volley.Response; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import static org.junit.Assert.assertNotNull; - @RunWith(RobolectricTestRunner.class) public class StringRequestTest { @Test public void publicMethods() throws Exception { // Catch-all test to find API-breaking changes. - assertNotNull(StringRequest.class.getConstructor(String.class, Response.Listener.class, - Response.ErrorListener.class)); - assertNotNull(StringRequest.class.getConstructor(int.class, String.class, - Response.Listener.class, Response.ErrorListener.class)); + assertNotNull( + StringRequest.class.getConstructor( + String.class, Response.Listener.class, Response.ErrorListener.class)); + assertNotNull( + StringRequest.class.getConstructor( + int.class, + String.class, + Response.Listener.class, + Response.ErrorListener.class)); } } diff --git a/src/test/java/com/android/volley/utils/CacheTestUtils.java b/src/test/java/com/android/volley/utils/CacheTestUtils.java index 03a2909..49ab996 100644 --- a/src/test/java/com/android/volley/utils/CacheTestUtils.java +++ b/src/test/java/com/android/volley/utils/CacheTestUtils.java @@ -17,13 +17,13 @@ package com.android.volley.utils; import com.android.volley.Cache; - import java.util.Random; public class CacheTestUtils { /** * Makes a random cache entry. + * * @param data Data to use, or null to use random data * @param isExpired Whether the TTLs should be set such that this entry is expired * @param needsRefresh Whether the TTLs should be set such that this entry needs refresh @@ -45,8 +45,8 @@ public class CacheTestUtils { } /** - * Like {@link #makeRandomCacheEntry(byte[], boolean, boolean)} but - * defaults to an unexpired entry. + * Like {@link #makeRandomCacheEntry(byte[], boolean, boolean)} but defaults to an unexpired + * entry. */ public static Cache.Entry makeRandomCacheEntry(byte[] data) { return makeRandomCacheEntry(data, false, false); diff --git a/src/test/java/com/android/volley/utils/ImmediateResponseDelivery.java b/src/test/java/com/android/volley/utils/ImmediateResponseDelivery.java index 235716d..67e5923 100644 --- a/src/test/java/com/android/volley/utils/ImmediateResponseDelivery.java +++ b/src/test/java/com/android/volley/utils/ImmediateResponseDelivery.java @@ -17,21 +17,21 @@ package com.android.volley.utils; import com.android.volley.ExecutorDelivery; - import java.util.concurrent.Executor; /** - * A ResponseDelivery for testing that immediately delivers responses - * instead of posting back to the main thread. + * A ResponseDelivery for testing that immediately delivers responses instead of posting back to the + * main thread. */ public class ImmediateResponseDelivery extends ExecutorDelivery { public ImmediateResponseDelivery() { - super(new Executor() { - @Override - public void execute(Runnable command) { - command.run(); - } - }); + super( + new Executor() { + @Override + public void execute(Runnable command) { + command.run(); + } + }); } } -- cgit v1.2.3