| /* |
| * Copyright (C) 2010 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.gallery3d.ui; |
| |
| import android.graphics.Bitmap; |
| import android.graphics.Bitmap.Config; |
| import android.test.suitebuilder.annotation.SmallTest; |
| |
| import junit.framework.TestCase; |
| |
| import javax.microedition.khronos.opengles.GL11; |
| |
| @SmallTest |
| public class TextureTest extends TestCase { |
| @SuppressWarnings("unused") |
| private static final String TAG = "TextureTest"; |
| |
| class MyBasicTexture extends BasicTexture { |
| int mOnBindCalled; |
| int mOpaqueCalled; |
| |
| MyBasicTexture(GLCanvas canvas, int id) { |
| super(canvas, id, 0); |
| } |
| |
| @Override |
| protected boolean onBind(GLCanvas canvas) { |
| mOnBindCalled++; |
| return true; |
| } |
| |
| @Override |
| protected int getTarget() { |
| return GL11.GL_TEXTURE_2D; |
| } |
| |
| public boolean isOpaque() { |
| mOpaqueCalled++; |
| return true; |
| } |
| |
| void upload() { |
| mState = STATE_LOADED; |
| } |
| } |
| |
| @SmallTest |
| public void testBasicTexture() { |
| GL11 glStub = new GLStub(); |
| GLCanvas canvas = new GLCanvasImpl(glStub); |
| MyBasicTexture texture = new MyBasicTexture(canvas, 47); |
| |
| assertEquals(47, texture.getId()); |
| texture.setSize(1, 1); |
| assertEquals(1, texture.getWidth()); |
| assertEquals(1, texture.getHeight()); |
| assertEquals(1, texture.getTextureWidth()); |
| assertEquals(1, texture.getTextureHeight()); |
| texture.setSize(3, 5); |
| assertEquals(3, texture.getWidth()); |
| assertEquals(5, texture.getHeight()); |
| assertEquals(4, texture.getTextureWidth()); |
| assertEquals(8, texture.getTextureHeight()); |
| |
| assertFalse(texture.isLoaded()); |
| texture.upload(); |
| assertTrue(texture.isLoaded()); |
| |
| // For a different GL, it's not loaded. |
| GLCanvas canvas2 = new GLCanvasImpl(new GLStub()); |
| assertFalse(texture.isLoaded()); |
| |
| assertEquals(0, texture.mOnBindCalled); |
| assertEquals(0, texture.mOpaqueCalled); |
| texture.draw(canvas, 100, 200, 1, 1); |
| assertEquals(1, texture.mOnBindCalled); |
| assertEquals(1, texture.mOpaqueCalled); |
| texture.draw(canvas, 0, 0); |
| assertEquals(2, texture.mOnBindCalled); |
| assertEquals(2, texture.mOpaqueCalled); |
| } |
| |
| @SmallTest |
| public void testColorTexture() { |
| GLCanvasMock canvas = new GLCanvasMock(); |
| ColorTexture texture = new ColorTexture(0x12345678); |
| |
| texture.setSize(42, 47); |
| assertEquals(texture.getWidth(), 42); |
| assertEquals(texture.getHeight(), 47); |
| assertEquals(0, canvas.mFillRectCalled); |
| texture.draw(canvas, 0, 0); |
| assertEquals(1, canvas.mFillRectCalled); |
| assertEquals(0x12345678, canvas.mFillRectColor); |
| assertEquals(42f, canvas.mFillRectWidth); |
| assertEquals(47f, canvas.mFillRectHeight); |
| assertFalse(texture.isOpaque()); |
| assertTrue(new ColorTexture(0xFF000000).isOpaque()); |
| } |
| |
| private class MyUploadedTexture extends UploadedTexture { |
| int mGetCalled; |
| int mFreeCalled; |
| Bitmap mBitmap; |
| @Override |
| protected Bitmap onGetBitmap() { |
| mGetCalled++; |
| Config config = Config.ARGB_8888; |
| mBitmap = Bitmap.createBitmap(47, 42, config); |
| return mBitmap; |
| } |
| @Override |
| protected void onFreeBitmap(Bitmap bitmap) { |
| mFreeCalled++; |
| assertSame(mBitmap, bitmap); |
| mBitmap.recycle(); |
| mBitmap = null; |
| } |
| } |
| |
| @SmallTest |
| public void testUploadedTexture() { |
| GL11 glStub = new GLStub(); |
| GLCanvas canvas = new GLCanvasImpl(glStub); |
| MyUploadedTexture texture = new MyUploadedTexture(); |
| |
| // draw it and the bitmap should be fetched. |
| assertEquals(0, texture.mFreeCalled); |
| assertEquals(0, texture.mGetCalled); |
| texture.draw(canvas, 0, 0); |
| assertEquals(1, texture.mGetCalled); |
| assertTrue(texture.isLoaded()); |
| assertTrue(texture.isContentValid()); |
| |
| // invalidate content and it should be freed. |
| texture.invalidateContent(); |
| assertFalse(texture.isContentValid()); |
| assertEquals(1, texture.mFreeCalled); |
| assertTrue(texture.isLoaded()); // But it's still loaded |
| |
| // draw it again and the bitmap should be fetched again. |
| texture.draw(canvas, 0, 0); |
| assertEquals(2, texture.mGetCalled); |
| assertTrue(texture.isLoaded()); |
| assertTrue(texture.isContentValid()); |
| |
| // recycle the texture and it should be freed again. |
| texture.recycle(); |
| assertEquals(2, texture.mFreeCalled); |
| // TODO: these two are broken and waiting for fix. |
| //assertFalse(texture.isLoaded(canvas)); |
| //assertFalse(texture.isContentValid(canvas)); |
| } |
| |
| class MyTextureForMixed extends BasicTexture { |
| MyTextureForMixed(GLCanvas canvas, int id) { |
| super(canvas, id, 0); |
| } |
| |
| @Override |
| protected boolean onBind(GLCanvas canvas) { |
| return true; |
| } |
| |
| @Override |
| protected int getTarget() { |
| return GL11.GL_TEXTURE_2D; |
| } |
| |
| public boolean isOpaque() { |
| return true; |
| } |
| } |
| |
| @SmallTest |
| public void testBitmapTexture() { |
| Config config = Config.ARGB_8888; |
| Bitmap bitmap = Bitmap.createBitmap(47, 42, config); |
| assertFalse(bitmap.isRecycled()); |
| BitmapTexture texture = new BitmapTexture(bitmap); |
| texture.recycle(); |
| assertFalse(bitmap.isRecycled()); |
| bitmap.recycle(); |
| assertTrue(bitmap.isRecycled()); |
| } |
| } |