16c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick/*
26c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * Copyright (C) 2015 The Android Open Source Project
36c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick *
46c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * Licensed under the Apache License, Version 2.0 (the "License");
56c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * you may not use this file except in compliance with the License.
66c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * You may obtain a copy of the License at
76c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick *
86c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick *      http://www.apache.org/licenses/LICENSE-2.0
96c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick *
106c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * Unless required by applicable law or agreed to in writing, software
116c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * distributed under the License is distributed on an "AS IS" BASIS,
126c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * See the License for the specific language governing permissions and
146c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * limitations under the License.
156c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick */
166c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick
176c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickpackage com.android.volley.toolbox;
186c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick
196c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport android.graphics.Bitmap;
20e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmannimport android.widget.ImageView;
216c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport com.android.volley.Request;
226c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport com.android.volley.RequestQueue;
236c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.junit.Assert;
246c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.junit.Before;
256c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.junit.Test;
266c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.junit.runner.RunWith;
276c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.robolectric.RobolectricTestRunner;
286c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick
29e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmannimport static org.junit.Assert.assertNotNull;
306c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport static org.mockito.Mockito.*;
316c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick
326c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick@RunWith(RobolectricTestRunner.class)
336c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickpublic class ImageLoaderTest {
346c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    private RequestQueue mRequestQueue;
356c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    private ImageLoader.ImageCache mImageCache;
366c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    private ImageLoader mImageLoader;
376c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick
386c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    @Before
396c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    public void setUp() {
406c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        mRequestQueue = mock(RequestQueue.class);
416c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        mImageCache = mock(ImageLoader.ImageCache.class);
426c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        mImageLoader = new ImageLoader(mRequestQueue, mImageCache);
436c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    }
446c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick
456c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    @Test
466c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    public void isCachedChecksCache() throws Exception {
476c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        when(mImageCache.getBitmap(anyString())).thenReturn(null);
486c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        Assert.assertFalse(mImageLoader.isCached("http://foo", 0, 0));
496c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    }
506c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick
516c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    @Test
526c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    public void getWithCacheHit() throws Exception {
536c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        Bitmap bitmap = Bitmap.createBitmap(1, 1, null);
546c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        ImageLoader.ImageListener listener = mock(ImageLoader.ImageListener.class);
556c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        when(mImageCache.getBitmap(anyString())).thenReturn(bitmap);
566c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        ImageLoader.ImageContainer ic = mImageLoader.get("http://foo", listener);
576c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        Assert.assertSame(bitmap, ic.getBitmap());
586c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        verify(listener).onResponse(ic, true);
596c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    }
606c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick
616c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    @Test
626c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    public void getWithCacheMiss() throws Exception {
636c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        when(mImageCache.getBitmap(anyString())).thenReturn(null);
646c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        ImageLoader.ImageListener listener = mock(ImageLoader.ImageListener.class);
656c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        // Ask for the image to be loaded.
666c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        mImageLoader.get("http://foo", listener);
676c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        // Second pass to test deduping logic.
686c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        mImageLoader.get("http://foo", listener);
696c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        // Response callback should be called both times.
706c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        verify(listener, times(2)).onResponse(any(ImageLoader.ImageContainer.class), eq(true));
716c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        // But request should be enqueued only once.
726c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        verify(mRequestQueue, times(1)).add(any(Request.class));
736c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    }
746c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick
756c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    @Test
766c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    public void publicMethods() throws Exception {
776c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        // Catch API breaking changes.
786c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        ImageLoader.getImageListener(null, -1, -1);
796c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick        mImageLoader.setBatchedResponseDelay(1000);
80e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann
81e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann        assertNotNull(ImageLoader.class.getConstructor(RequestQueue.class,
82e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann                ImageLoader.ImageCache.class));
83e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann
84e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann        assertNotNull(ImageLoader.class.getMethod("getImageListener", ImageView.class,
85e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann                int.class, int.class));
86e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann        assertNotNull(ImageLoader.class.getMethod("isCached", String.class, int.class, int.class));
87d95219cb1c414de049f90c97fccad638b11bdc85Ralph Bergmann        assertNotNull(ImageLoader.class.getMethod("isCached", String.class, int.class, int.class,
88d95219cb1c414de049f90c97fccad638b11bdc85Ralph Bergmann                ImageView.ScaleType.class));
89e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann        assertNotNull(ImageLoader.class.getMethod("get", String.class,
90e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann                ImageLoader.ImageListener.class));
91e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann        assertNotNull(ImageLoader.class.getMethod("get", String.class,
92e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann                ImageLoader.ImageListener.class, int.class, int.class));
93e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann        assertNotNull(ImageLoader.class.getMethod("get", String.class,
94e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann                ImageLoader.ImageListener.class, int.class, int.class, ImageView.ScaleType.class));
95e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann        assertNotNull(ImageLoader.class.getMethod("setBatchedResponseDelay", int.class));
96e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann
97e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann        assertNotNull(ImageLoader.ImageListener.class.getMethod("onResponse",
98e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann                ImageLoader.ImageContainer.class, boolean.class));
996c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick    }
1006c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick}
1016c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick
102