OSDN Git Service

original
[gb-231r1-is01/GB_2.3_IS01.git] / cts / tests / tests / widget / src / android / widget / cts / ImageViewTest.java
diff --git a/cts/tests/tests/widget/src/android/widget/cts/ImageViewTest.java b/cts/tests/tests/widget/src/android/widget/cts/ImageViewTest.java
new file mode 100644 (file)
index 0000000..0777259
--- /dev/null
@@ -0,0 +1,750 @@
+/*
+ * Copyright (C) 2008 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 android.widget.cts;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.xmlpull.v1.XmlPullParser;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.Matrix;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.PaintDrawable;
+import android.net.Uri;
+import android.test.ActivityInstrumentationTestCase;
+import android.test.UiThreadTest;
+import android.util.AttributeSet;
+import android.util.StateSet;
+import android.util.Xml;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+
+import com.android.cts.stub.R;
+
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.ToBeFixed;
+
+/**
+ * Test {@link ImageView}.
+ */
+@TestTargetClass(ImageView.class)
+public class ImageViewTest extends ActivityInstrumentationTestCase<ImageViewStubActivity> {
+    private ImageView mImageView;
+    private Activity mActivity;
+
+    public ImageViewTest() {
+        super("com.android.cts.stub", ImageViewStubActivity.class);
+    }
+
+    /**
+     * Find the ImageView specified by id.
+     *
+     * @param id the id
+     * @return the ImageView
+     */
+    private ImageView findImageViewById(int id) {
+        return (ImageView) mActivity.findViewById(id);
+    }
+
+    private void createSampleImage(File imagefile, int resid) {
+        InputStream source = null;
+        OutputStream target = null;
+
+        try {
+            source = mActivity.getResources().openRawResource(resid);
+            target = new FileOutputStream(imagefile);
+
+            byte[] buffer = new byte[1024];
+            for (int len = source.read(buffer); len > 0; len = source.read(buffer)) {
+                target.write(buffer, 0, len);
+            }
+        } catch (IOException e) {
+            fail(e.getMessage());
+        } finally {
+            try {
+                if (source != null) {
+                    source.close();
+                }
+                if (target != null) {
+                    target.close();
+                }
+            } catch (IOException _) {
+                // Ignore the IOException.
+            }
+        }
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mImageView = null;
+        mActivity = getActivity();
+    }
+
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "Test constructor(s) of {@link ImageView}",
+            method = "ImageView",
+            args = {android.content.Context.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "Test constructor(s) of {@link ImageView}",
+            method = "ImageView",
+            args = {android.content.Context.class, android.util.AttributeSet.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "Test constructor(s) of {@link ImageView}",
+            method = "ImageView",
+            args = {android.content.Context.class, android.util.AttributeSet.class, int.class}
+        )
+    })
+    @ToBeFixed(bug = "1417734", explanation = "ImageView#ImageView(Context, AttributeSet) and " +
+            "ImageView#ImageView(Context, AttributeSet, int)" +
+            " should check whether the input Context is null")
+    public void testConstructor() {
+        new ImageView(mActivity);
+
+        new ImageView(mActivity, null);
+
+        new ImageView(mActivity, null, 0);
+
+        XmlPullParser parser = mActivity.getResources().getXml(R.layout.imageview_layout);
+        AttributeSet attrs = Xml.asAttributeSet(parser);
+        new ImageView(mActivity, attrs);
+        new ImageView(mActivity, attrs, 0);
+
+        try {
+            new ImageView(null, null);
+            fail("should throw NullPointerException.");
+        } catch (NullPointerException e) {
+        }
+
+        try {
+            new ImageView(null, null, 0);
+            fail("should throw NullPointerException.");
+        } catch (NullPointerException e) {
+        }
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#invalidateDrawable(Drawable)}",
+        method = "invalidateDrawable",
+        args = {android.graphics.drawable.Drawable.class}
+    )
+    @ToBeFixed(bug="1400249", explanation="It will be tested by functional test.")
+    public void testInvalidateDrawable() {
+        ImageView imageView = new ImageView(mActivity);
+        imageView.invalidateDrawable(null);
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setAdjustViewBounds(boolean)}",
+        method = "setAdjustViewBounds",
+        args = {boolean.class}
+    )
+    public void testSetAdjustViewBounds() {
+        ImageView imageView = new ImageView(mActivity);
+        imageView.setScaleType(ScaleType.FIT_XY);
+
+        imageView.setAdjustViewBounds(false);
+        assertEquals(ScaleType.FIT_XY, imageView.getScaleType());
+
+        imageView.setAdjustViewBounds(true);
+        assertEquals(ScaleType.FIT_CENTER, imageView.getScaleType());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setMaxWidth(int)}",
+        method = "setMaxWidth",
+        args = {int.class}
+    )
+    @ToBeFixed(bug="1400249", explanation="It will be tested by functional test.")
+    public void testSetMaxWidth() {
+        ImageView imageView = new ImageView(mActivity);
+        imageView.setMaxWidth(120);
+        imageView.setMaxWidth(-1);
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setMaxHeight(int)}",
+        method = "setMaxHeight",
+        args = {int.class}
+    )
+    @ToBeFixed(bug="1400249", explanation="It will be tested by functional test.")
+    public void testSetMaxHeight() {
+        ImageView imageView = new ImageView(mActivity);
+        imageView.setMaxHeight(120);
+        imageView.setMaxHeight(-1);
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#getDrawable()}",
+        method = "getDrawable",
+        args = {}
+    )
+    public void testGetDrawable() {
+        final ImageView imageView = new ImageView(mActivity);
+        final PaintDrawable drawable1 = new PaintDrawable();
+        final PaintDrawable drawable2 = new PaintDrawable();
+
+        assertNull(imageView.getDrawable());
+
+        imageView.setImageDrawable(drawable1);
+        assertEquals(drawable1, imageView.getDrawable());
+        assertNotSame(drawable2, imageView.getDrawable());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setImageResource(int)}",
+        method = "setImageResource",
+        args = {int.class}
+    )
+    @UiThreadTest
+    public void testSetImageResource() {
+        mImageView = findImageViewById(R.id.imageview);
+        mImageView.setImageResource(-1);
+        assertNull(mImageView.getDrawable());
+
+        mImageView.setImageResource(R.drawable.testimage);
+        assertTrue(mImageView.isLayoutRequested());
+        assertNotNull(mImageView.getDrawable());
+        Drawable drawable = mActivity.getResources().getDrawable(R.drawable.testimage);
+        BitmapDrawable testimageBitmap = (BitmapDrawable) drawable;
+        Drawable imageViewDrawable = mImageView.getDrawable();
+        BitmapDrawable imageViewBitmap = (BitmapDrawable) imageViewDrawable;
+        WidgetTestUtils.assertEquals(testimageBitmap.getBitmap(), imageViewBitmap.getBitmap());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setImageURI(Uri)}",
+        method = "setImageURI",
+        args = {android.net.Uri.class}
+    )
+    @UiThreadTest
+    public void testSetImageURI() {
+        mImageView = findImageViewById(R.id.imageview);
+        mImageView.setImageURI(null);
+        assertNull(mImageView.getDrawable());
+
+        File dbDir = getInstrumentation().getTargetContext().getDir("tests",
+                Context.MODE_PRIVATE);
+        File imagefile = new File(dbDir, "tempimage.jpg");
+        if (imagefile.exists()) {
+            imagefile.delete();
+        }
+        createSampleImage(imagefile, R.raw.testimage);
+        final String path = imagefile.getPath();
+        mImageView.setImageURI(Uri.parse(path));
+        assertTrue(mImageView.isLayoutRequested());
+        assertNotNull(mImageView.getDrawable());
+
+        Drawable imageViewDrawable = mImageView.getDrawable();
+        BitmapDrawable imageViewBitmap = (BitmapDrawable) imageViewDrawable;
+        Bitmap.Config viewConfig = imageViewBitmap.getBitmap().getConfig();
+        Bitmap testimageBitmap = WidgetTestUtils.getUnscaledAndDitheredBitmap(
+                mActivity.getResources(), R.raw.testimage, viewConfig);
+
+        WidgetTestUtils.assertEquals(testimageBitmap, imageViewBitmap.getBitmap());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setImageDrawable(Drawable)}",
+        method = "setImageDrawable",
+        args = {android.graphics.drawable.Drawable.class}
+    )
+    @UiThreadTest
+    public void testSetImageDrawable() {
+        mImageView = findImageViewById(R.id.imageview);
+
+        mImageView.setImageDrawable(null);
+        assertNull(mImageView.getDrawable());
+
+        final Drawable drawable = mActivity.getResources().getDrawable(R.drawable.testimage);
+        mImageView.setImageDrawable(drawable);
+        assertTrue(mImageView.isLayoutRequested());
+        assertNotNull(mImageView.getDrawable());
+        BitmapDrawable testimageBitmap = (BitmapDrawable) drawable;
+        Drawable imageViewDrawable = mImageView.getDrawable();
+        BitmapDrawable imageViewBitmap = (BitmapDrawable) imageViewDrawable;
+        WidgetTestUtils.assertEquals(testimageBitmap.getBitmap(), imageViewBitmap.getBitmap());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setImageBitmap(Bitmap)}",
+        method = "setImageBitmap",
+        args = {android.graphics.Bitmap.class}
+    )
+    @UiThreadTest
+    public void testSetImageBitmap() {
+        mImageView = findImageViewById(R.id.imageview);
+
+        mImageView.setImageBitmap(null);
+        // A BitmapDrawable is always created for the ImageView.
+        assertNotNull(mImageView.getDrawable());
+
+        final Bitmap bitmap =
+            BitmapFactory.decodeResource(mActivity.getResources(), R.drawable.testimage);
+        mImageView.setImageBitmap(bitmap);
+        assertTrue(mImageView.isLayoutRequested());
+        assertNotNull(mImageView.getDrawable());
+        Drawable imageViewDrawable = mImageView.getDrawable();
+        BitmapDrawable imageViewBitmap = (BitmapDrawable) imageViewDrawable;
+        WidgetTestUtils.assertEquals(bitmap, imageViewBitmap.getBitmap());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setImageState(int[], boolean)}",
+        method = "setImageState",
+        args = {int[].class, boolean.class}
+    )
+    public void testSetImageState() {
+        mImageView = new ImageView(mActivity);
+        int[] state = new int[8];
+        mImageView.setImageState(state, false);
+        assertSame(state, mImageView.onCreateDrawableState(0));
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setSelected(boolean)}",
+        method = "setSelected",
+        args = {boolean.class}
+    )
+    public void testSetSelected() {
+        mImageView = new ImageView(mActivity);
+        assertFalse(mImageView.isSelected());
+
+        mImageView.setSelected(true);
+        assertTrue(mImageView.isSelected());
+
+        mImageView.setSelected(false);
+        assertFalse(mImageView.isSelected());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setImageLevel(int)}",
+        method = "setImageLevel",
+        args = {int.class}
+    )
+    public void testSetImageLevel() {
+        PaintDrawable drawable = new PaintDrawable();
+        drawable.setLevel(0);
+
+        ImageView imageView = new ImageView(mActivity);
+        imageView.setImageDrawable(drawable);
+        imageView.setImageLevel(1);
+        assertEquals(1, drawable.getLevel());
+    }
+
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "setScaleType",
+            args = {android.widget.ImageView.ScaleType.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getScaleType",
+            args = {}
+        )
+    })
+    public void testAccessScaleType() {
+        final ImageView imageView = new ImageView(mActivity);
+
+        try {
+            imageView.setScaleType(null);
+            fail("should throw NullPointerException.");
+        } catch (NullPointerException e) {
+        }
+        assertNotNull(imageView.getScaleType());
+
+        imageView.setScaleType(ImageView.ScaleType.CENTER);
+        assertEquals(ImageView.ScaleType.CENTER, imageView.getScaleType());
+
+        imageView.setScaleType(ImageView.ScaleType.MATRIX);
+        assertEquals(ImageView.ScaleType.MATRIX, imageView.getScaleType());
+
+        imageView.setScaleType(ImageView.ScaleType.FIT_START);
+        assertEquals(ImageView.ScaleType.FIT_START, imageView.getScaleType());
+
+        imageView.setScaleType(ImageView.ScaleType.FIT_END);
+        assertEquals(ImageView.ScaleType.FIT_END, imageView.getScaleType());
+
+        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
+        assertEquals(ImageView.ScaleType.CENTER_CROP, imageView.getScaleType());
+
+        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+        assertEquals(ImageView.ScaleType.CENTER_INSIDE, imageView.getScaleType());
+    }
+
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "setImageMatrix",
+            args = {android.graphics.Matrix.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getImageMatrix",
+            args = {}
+        )
+    })
+    public void testAccessImageMatrix() {
+        final ImageView imageView = new ImageView(mActivity);
+
+        imageView.setImageMatrix(null);
+        assertNotNull(imageView.getImageMatrix());
+
+        final Matrix matrix = new Matrix();
+        imageView.setImageMatrix(matrix);
+        assertEquals(matrix, imageView.getImageMatrix());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#getBaseline()}",
+        method = "getBaseline",
+        args = {}
+    )
+    public void testGetBaseline() {
+        final ImageView imageView = new ImageView(mActivity);
+        assertEquals(-1, imageView.getBaseline());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setColorFilter(int, Mode)}",
+        method = "setColorFilter",
+        args = {int.class, android.graphics.PorterDuff.Mode.class}
+    )
+    public void testSetColorFilter1() {
+        MockDrawable drawable = new MockDrawable();
+
+        ImageView imageView = new ImageView(mActivity);
+        imageView.setImageDrawable(drawable);
+        imageView.setColorFilter(null);
+        assertNull(drawable.getColorFilter());
+
+        imageView.setColorFilter(0, PorterDuff.Mode.CLEAR);
+        assertNotNull(drawable.getColorFilter());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#clearColorFilter()}",
+        method = "clearColorFilter",
+        args = {}
+    )
+    public void testClearColorFilter() {
+        MockDrawable drawable = new MockDrawable();
+        ColorFilter cf = new ColorFilter();
+
+        ImageView imageView = new ImageView(mActivity);
+        imageView.setImageDrawable(drawable);
+        imageView.setColorFilter(cf);
+
+        imageView.clearColorFilter();
+        assertNull(drawable.getColorFilter());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setColorFilter(ColorFilter)}",
+        method = "setColorFilter",
+        args = {android.graphics.ColorFilter.class}
+    )
+    public void testSetColorFilter2() {
+        MockDrawable drawable = new MockDrawable();
+
+        ImageView imageView = new ImageView(mActivity);
+        imageView.setImageDrawable(drawable);
+        imageView.setColorFilter(null);
+        assertNull(drawable.getColorFilter());
+
+        ColorFilter cf = new ColorFilter();
+        imageView.setColorFilter(cf);
+        assertSame(cf, drawable.getColorFilter());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setAlpha(int)}",
+        method = "setAlpha",
+        args = {int.class}
+    )
+    public void testSetAlpha() {
+        MockDrawable drawable = new MockDrawable();
+
+        ImageView imageView = new ImageView(mActivity);
+        imageView.setImageDrawable(drawable);
+        imageView.setAlpha(0);
+        assertEquals(0, drawable.getAlpha());
+
+        imageView.setAlpha(255);
+        assertEquals(255, drawable.getAlpha());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#drawableStateChanged()}",
+        method = "drawableStateChanged",
+        args = {}
+    )
+    public void testDrawableStateChanged() {
+        MockImageView mockImageView = new MockImageView(mActivity);
+        MockDrawable drawable = new MockDrawable();
+
+        assertSame(StateSet.WILD_CARD, drawable.getState());
+        mockImageView.setImageDrawable(drawable);
+        mockImageView.drawableStateChanged();
+        assertSame(mockImageView.getDrawableState(), drawable.getState());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#onCreateDrawableState(int)}",
+        method = "onCreateDrawableState",
+        args = {int.class}
+    )
+    @ToBeFixed(bug = "1417734", explanation = "IndexOutOfBoundsException is not expected.")
+    public void testOnCreateDrawableState() {
+        MockImageView mockImageView = new MockImageView(mActivity);
+
+        assertEquals(MockImageView.getEnabledStateSet(), mockImageView.onCreateDrawableState(0));
+
+        int[] expected = new int[]{1, 2, 3};
+        mockImageView.setImageState(expected, false);
+        assertSame(expected, mockImageView.onCreateDrawableState(1));
+
+        mockImageView.setImageState(expected, true);
+        try {
+            mockImageView.onCreateDrawableState(-1);
+            fail("should throw IndexOutOfBoundsException");
+        } catch (IndexOutOfBoundsException e) {
+        }
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#onDraw(Canvas)}",
+        method = "onDraw",
+        args = {android.graphics.Canvas.class}
+    )
+    public void testOnDraw() {
+        MockImageView mockImageView = new MockImageView(mActivity);
+        MockDrawable drawable = new MockDrawable();
+        mockImageView.setImageDrawable(drawable);
+        mockImageView.onDraw(new Canvas());
+        assertTrue(drawable.hasDrawCalled());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#onMeasure(int, int)}",
+        method = "onMeasure",
+        args = {int.class, int.class}
+    )
+    public void testOnMeasure() {
+        mImageView = findImageViewById(R.id.imageview);
+        mImageView.measure(200, 150);
+        assertTrue(mImageView.getMeasuredWidth() <= 200);
+        assertTrue(mImageView.getMeasuredHeight() <= 150);
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#onSetAlpha(int)}",
+        method = "onSetAlpha",
+        args = {int.class}
+    )
+    public void testOnSetAlpha() {
+        MockImageView mockImageView = new MockImageView(mActivity);
+        assertTrue(mockImageView.onSetAlpha(0));
+        MockDrawable drawable = new MockDrawable();
+        mockImageView.setBackgroundDrawable(drawable);
+        assertFalse(mockImageView.onSetAlpha(0));
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#setFrame(int, int, int, int)}",
+        method = "setFrame",
+        args = {int.class, int.class, int.class, int.class}
+    )
+    public void testSetFrame() {
+        MockImageView mockImageView = new MockImageView(mActivity);
+        assertFalse(mockImageView.hasOnSizeChangedCalled());
+        assertTrue(mockImageView.setFrame(5, 10, 100, 200));
+        assertEquals(5, mockImageView.getLeft());
+        assertEquals(10, mockImageView.getTop());
+        assertEquals(100, mockImageView.getRight());
+        assertEquals(200, mockImageView.getBottom());
+        assertTrue(mockImageView.hasOnSizeChangedCalled());
+
+        mockImageView.reset();
+        assertFalse(mockImageView.setFrame(5, 10, 100, 200));
+        assertFalse(mockImageView.hasOnSizeChangedCalled());
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test {@link ImageView#verifyDrawable(Drawable)}",
+        method = "verifyDrawable",
+        args = {android.graphics.drawable.Drawable.class}
+    )
+    public void testVerifyDrawable() {
+        MockImageView mockImageView = new MockImageView(mActivity);
+        MockDrawable drawable = new MockDrawable();
+        mockImageView.setImageDrawable(drawable);
+        MockDrawable bgdrawable = new MockDrawable();
+        mockImageView.setBackgroundDrawable(bgdrawable);
+        assertFalse(mockImageView.verifyDrawable(null));
+        assertFalse(mockImageView.verifyDrawable(new MockDrawable()));
+        assertTrue(mockImageView.verifyDrawable(drawable));
+        assertTrue(mockImageView.verifyDrawable(bgdrawable));
+    }
+
+    private static class MockImageView extends ImageView {
+        private boolean mOnSizeChangedCalled = false;
+
+        public boolean hasOnSizeChangedCalled() {
+            return mOnSizeChangedCalled;
+        }
+
+        public void reset() {
+            mOnSizeChangedCalled = false;
+        }
+
+        public MockImageView(Context context) {
+            super(context);
+        }
+
+        public MockImageView(Context context, AttributeSet attrs) {
+            super(context, attrs);
+        }
+
+        public MockImageView(Context context, AttributeSet attrs, int defStyle) {
+            super(context, attrs, defStyle);
+        }
+
+        public static int[] getEnabledStateSet() {
+            return ENABLED_STATE_SET;
+        }
+
+        public static int[] getPressedEnabledStateSet() {
+            return PRESSED_ENABLED_STATE_SET;
+        }
+        @Override
+        protected void drawableStateChanged() {
+            super.drawableStateChanged();
+        }
+        @Override
+        protected void onDraw(Canvas canvas) {
+            super.onDraw(canvas);
+        }
+        @Override
+        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        }
+        @Override
+        protected boolean onSetAlpha(int alpha) {
+            return super.onSetAlpha(alpha);
+        }
+        @Override
+        protected boolean setFrame(int l, int t, int r, int b) {
+            return super.setFrame(l, t, r, b);
+        }
+        @Override
+        protected boolean verifyDrawable(Drawable dr) {
+            return super.verifyDrawable(dr);
+        }
+
+        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+            mOnSizeChangedCalled = true;
+        }
+    }
+
+    private class MockDrawable extends Drawable {
+        private ColorFilter mColorFilter;
+        private boolean mDrawCalled = false;
+        private int mAlpha;
+
+        public boolean hasDrawCalled() {
+            return mDrawCalled;
+        }
+
+        public ColorFilter getColorFilter() {
+            return mColorFilter;
+        }
+
+        @Override
+        public void draw(Canvas canvas) {
+            mDrawCalled = true;
+        }
+
+        @Override
+        public void setAlpha(int alpha) {
+            mAlpha = alpha;
+        }
+
+        public int getAlpha() {
+            return mAlpha;
+        }
+
+        @Override
+        public void setColorFilter(ColorFilter cf) {
+            mColorFilter = cf;
+        }
+
+        @Override
+        public int getOpacity() {
+            return 0;
+        }
+
+        public boolean isStateful() {
+            return true;
+        }
+    }
+}