1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.camera; 18 19 import com.android.camera.gallery.IImage; 20 import com.android.camera.gallery.IImageList; 21 22 import android.content.Context; 23 import android.graphics.Bitmap; 24 import android.test.AndroidTestCase; 25 26 /** 27 * BitmapManager's unit tests. 28 */ 29 public class BitmapManagerUnitTests extends AndroidTestCase { 30 IImageList mImageList; 31 IImage mImage; 32 BitmapManager mBitmapManager; 33 Context mContext; 34 35 private class DecodeThread extends Thread { 36 Bitmap bitmap; 37 DecodeThread()38 public DecodeThread() { 39 } 40 41 @Override run()42 public void run() { 43 bitmap = mImage.thumbBitmap(IImage.ROTATE_AS_NEEDED); 44 } 45 getBitmap()46 public Bitmap getBitmap() { 47 return bitmap; 48 } 49 } 50 51 @Override setUp()52 public void setUp() { 53 mContext = getContext(); 54 mBitmapManager = BitmapManager.instance(); 55 mImageList = ImageManager.makeImageList( 56 mContext.getContentResolver(), 57 ImageManager.DataLocation.ALL, 58 ImageManager.INCLUDE_IMAGES, 59 ImageManager.SORT_DESCENDING, 60 null); 61 mImage = mImageList.getImageAt(0); 62 } 63 testSingleton()64 public void testSingleton() { 65 BitmapManager manager = BitmapManager.instance(); 66 assertNotNull(manager); 67 assertNotNull(mBitmapManager); 68 assertSame(manager, mBitmapManager); 69 } 70 testCanThreadDecoding()71 public void testCanThreadDecoding() { 72 Thread t = new DecodeThread(); 73 74 // By default all threads can decode. 75 assertTrue(mBitmapManager.canThreadDecoding(t)); 76 77 // Disallow thread t to decode. 78 mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver()); 79 assertFalse(mBitmapManager.canThreadDecoding(t)); 80 81 // Allow thread t to decode again. 82 mBitmapManager.allowThreadDecoding(t); 83 assertTrue(mBitmapManager.canThreadDecoding(t)); 84 } 85 testDefaultAllowDecoding()86 public void testDefaultAllowDecoding() { 87 DecodeThread t = new DecodeThread(); 88 try { 89 t.start(); 90 t.join(); 91 } catch (InterruptedException ex) { 92 } finally { 93 assertNotNull(t.getBitmap()); 94 } 95 } 96 testCancelDecoding()97 public void testCancelDecoding() { 98 DecodeThread t = new DecodeThread(); 99 mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver()); 100 try { 101 t.start(); 102 t.join(); 103 } catch (InterruptedException ex) { 104 } finally { 105 assertNull(t.getBitmap()); 106 } 107 } 108 testAllowDecoding()109 public void testAllowDecoding() { 110 DecodeThread t = new DecodeThread(); 111 mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver()); 112 mBitmapManager.allowThreadDecoding(t); 113 try { 114 t.start(); 115 t.join(); 116 } catch (InterruptedException ex) { 117 } finally { 118 assertNotNull(t.getBitmap()); 119 } 120 } 121 testThreadDecoding()122 public void testThreadDecoding() { 123 DecodeThread t1 = new DecodeThread(); 124 DecodeThread t2 = new DecodeThread(); 125 mBitmapManager.allowThreadDecoding(t1); 126 mBitmapManager.cancelThreadDecoding(t2, mContext.getContentResolver()); 127 t1.start(); 128 t2.start(); 129 130 try { 131 t1.join(); 132 t2.join(); 133 } catch (InterruptedException ex) { 134 } finally { 135 assertTrue(mBitmapManager.canThreadDecoding(t1)); 136 assertNotNull(t1.getBitmap()); 137 assertFalse(mBitmapManager.canThreadDecoding(t2)); 138 assertNull(t2.getBitmap()); 139 } 140 } 141 142 @Override toString()143 public String toString() { 144 return "BitmapManagerUnitTest"; 145 } 146 } 147