/* * Copyright (C) 2009 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.camera; import com.android.camera.gallery.IImage; import com.android.camera.gallery.IImageList; import android.content.Context; import android.graphics.Bitmap; import android.test.AndroidTestCase; /** * BitmapManager's unit tests. */ public class BitmapManagerUnitTests extends AndroidTestCase { IImageList mImageList; IImage mImage; BitmapManager mBitmapManager; Context mContext; private class DecodeThread extends Thread { Bitmap bitmap; public DecodeThread() { } @Override public void run() { bitmap = mImage.thumbBitmap(IImage.ROTATE_AS_NEEDED); } public Bitmap getBitmap() { return bitmap; } } @Override public void setUp() { mContext = getContext(); mBitmapManager = BitmapManager.instance(); mImageList = ImageManager.makeImageList( mContext.getContentResolver(), ImageManager.DataLocation.ALL, ImageManager.INCLUDE_IMAGES, ImageManager.SORT_DESCENDING, null); mImage = mImageList.getImageAt(0); } public void testSingleton() { BitmapManager manager = BitmapManager.instance(); assertNotNull(manager); assertNotNull(mBitmapManager); assertSame(manager, mBitmapManager); } public void testCanThreadDecoding() { Thread t = new DecodeThread(); // By default all threads can decode. assertTrue(mBitmapManager.canThreadDecoding(t)); // Disallow thread t to decode. mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver()); assertFalse(mBitmapManager.canThreadDecoding(t)); // Allow thread t to decode again. mBitmapManager.allowThreadDecoding(t); assertTrue(mBitmapManager.canThreadDecoding(t)); } public void testDefaultAllowDecoding() { DecodeThread t = new DecodeThread(); try { t.start(); t.join(); } catch (InterruptedException ex) { } finally { assertNotNull(t.getBitmap()); } } public void testCancelDecoding() { DecodeThread t = new DecodeThread(); mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver()); try { t.start(); t.join(); } catch (InterruptedException ex) { } finally { assertNull(t.getBitmap()); } } public void testAllowDecoding() { DecodeThread t = new DecodeThread(); mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver()); mBitmapManager.allowThreadDecoding(t); try { t.start(); t.join(); } catch (InterruptedException ex) { } finally { assertNotNull(t.getBitmap()); } } public void testThreadDecoding() { DecodeThread t1 = new DecodeThread(); DecodeThread t2 = new DecodeThread(); mBitmapManager.allowThreadDecoding(t1); mBitmapManager.cancelThreadDecoding(t2, mContext.getContentResolver()); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException ex) { } finally { assertTrue(mBitmapManager.canThreadDecoding(t1)); assertNotNull(t1.getBitmap()); assertFalse(mBitmapManager.canThreadDecoding(t2)); assertNull(t2.getBitmap()); } } @Override public String toString() { return "BitmapManagerUnitTest"; } }