package com.mixpanel.android.viewcrawler; import android.content.Context; import android.graphics.Bitmap; import android.test.AndroidTestCase; import android.util.Base64; import com.mixpanel.android.util.ImageStore; import com.mixpanel.android.util.OfflineMode; import com.mixpanel.android.util.RemoteService; import java.io.IOException; import java.util.Map; import javax.net.ssl.SSLSocketFactory; public class ImageStoreTest extends AndroidTestCase { public void setUp() { mService = new PretendService(); mService.online = true; mImageStore = new ImageStore(getContext(), "TEST_DIRECTORY", mService); mImageStore.clearStorage(); } public void testFreshImageLoaded() throws ImageStore.CantGetImageException { final Bitmap image = mImageStore.getImage("HELLO"); int[] pixels = new int[100]; image.getPixels(pixels, 0, 10, 0, 0, 10, 10); for (int i = 25; i < pixels.length; i++) { assertEquals("Pixel " + i, 0xFF00FF00, pixels[i]); } } public void testWriteWhenRead() throws ImageStore.CantGetImageException { final Bitmap image1 = mImageStore.getImage("HELLO_TWO"); assertEquals(1, mService.queries); final Bitmap image2 = mImageStore.getImage("HELLO_TWO"); assertEquals(1, mService.queries); } public void testNoResponse() { final byte[] goodResponse = mService.response; mService.response = null; try { final Bitmap image1 = mImageStore.getImage("HELLO_NO_CACHE"); fail("Expected exception to be thrown"); } catch (ImageStore.CantGetImageException e) { ; // OK } assertEquals(1, mService.queries); mService.response = goodResponse; try { final Bitmap image2 = mImageStore.getImage("HELLO"); } catch (ImageStore.CantGetImageException e) { fail("Unexpected exception thrown"); } assertEquals(2, mService.queries); } private static class PretendService implements RemoteService { public PretendService() { response = Base64.decode(IMAGE_BASE64_10x10_GREEN.getBytes(), 0); online = true; queries = 0; } @Override public boolean isOnline(final Context context, OfflineMode offlineMode) { return online; } @Override public void checkIsMixpanelBlocked() { } @Override public byte[] performRequest(final String endpointUrl, final Map<String, Object> params, SSLSocketFactory socketFactory) throws ServiceUnavailableException, IOException { queries++; return response; } public byte[] response; public boolean online; public int queries; } private ImageStore mImageStore; private PretendService mService; private String mTestName; private static final String IMAGE_BASE64_10x10_GREEN = "R0lGODlhCgAKALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD//////ywAAAAACgAKAAAEClDJSau9OOvNe44AOw=="; }