DrawableCompatTest.java revision c3b9589f61cbfda8c60344a47f8f87c0ded98554
189d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes/* 289d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * Copyright (C) 2016 The Android Open Source Project 389d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * 489d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 589d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * you may not use this file except in compliance with the License. 689d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * You may obtain a copy of the License at 789d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * 889d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * http://www.apache.org/licenses/LICENSE-2.0 989d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * 1089d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * Unless required by applicable law or agreed to in writing, software 1189d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * distributed under the License is distributed on an "AS IS" BASIS, 1289d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1389d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * See the License for the specific language governing permissions and 1489d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes * limitations under the License. 1589d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes */ 1689d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes 1789d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banespackage android.support.v4.graphics; 1889d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes 1989d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banesimport android.graphics.Rect; 2089d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banesimport android.graphics.drawable.Drawable; 2189d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banesimport android.graphics.drawable.GradientDrawable; 2289d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banesimport android.support.v4.graphics.drawable.DrawableCompat; 2389d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banesimport android.test.AndroidTestCase; 2489d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banesimport android.test.suitebuilder.annotation.SmallTest; 2589d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes 26c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banesimport static org.mockito.Mockito.*; 27c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes 2889d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banespublic class DrawableCompatTest extends AndroidTestCase { 2989d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes 3089d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes @SmallTest 3189d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes public void testDrawableUnwrap() { 3289d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes final Drawable original = new GradientDrawable(); 3389d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes final Drawable wrappedDrawable = DrawableCompat.wrap(original); 3489d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes assertSame(original, DrawableCompat.unwrap(wrappedDrawable)); 3589d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes } 3689d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes 3789d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes @SmallTest 3889d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes public void testDrawableChangeBoundsCopy() { 3989d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes final Rect bounds = new Rect(0, 0, 10, 10); 4089d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes 41be61247c92b085602d3f671be6f506e9813aba19Chris Banes final Drawable drawable = new GradientDrawable(); 42be61247c92b085602d3f671be6f506e9813aba19Chris Banes 43be61247c92b085602d3f671be6f506e9813aba19Chris Banes final Drawable wrapper = DrawableCompat.wrap(drawable); 44be61247c92b085602d3f671be6f506e9813aba19Chris Banes wrapper.setBounds(bounds); 4589d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes 46be61247c92b085602d3f671be6f506e9813aba19Chris Banes // Assert that the bounds were given to the original drawable 47be61247c92b085602d3f671be6f506e9813aba19Chris Banes assertEquals(bounds, drawable.getBounds()); 4889d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes } 4989d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes 5089d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes @SmallTest 5189d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes public void testDrawableWrapOnlyWrapsOnce() { 5289d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes final Drawable wrappedDrawable = DrawableCompat.wrap(new GradientDrawable()); 5389d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes assertSame(wrappedDrawable, DrawableCompat.wrap(wrappedDrawable)); 5489d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes } 5589d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes 564da36b0dfa8436b197314094337fa3102fcca1bcChris Banes @SmallTest 574da36b0dfa8436b197314094337fa3102fcca1bcChris Banes public void testWrapMutatedDrawableHasConstantState() { 584da36b0dfa8436b197314094337fa3102fcca1bcChris Banes // First create a Drawable, and mutated it so that it has a constant state 594da36b0dfa8436b197314094337fa3102fcca1bcChris Banes Drawable drawable = new GradientDrawable(); 604da36b0dfa8436b197314094337fa3102fcca1bcChris Banes drawable = drawable.mutate(); 614da36b0dfa8436b197314094337fa3102fcca1bcChris Banes assertNotNull(drawable.getConstantState()); 624da36b0dfa8436b197314094337fa3102fcca1bcChris Banes 634da36b0dfa8436b197314094337fa3102fcca1bcChris Banes // Now wrap and assert that the wrapper also returns a constant state 644da36b0dfa8436b197314094337fa3102fcca1bcChris Banes final Drawable wrapper = DrawableCompat.wrap(drawable); 654da36b0dfa8436b197314094337fa3102fcca1bcChris Banes assertNotNull(wrapper.getConstantState()); 664da36b0dfa8436b197314094337fa3102fcca1bcChris Banes } 674da36b0dfa8436b197314094337fa3102fcca1bcChris Banes 68c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes @SmallTest 69c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes public void testWrappedDrawableHasCallbackSet() { 70c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes // First create a Drawable 71c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes final Drawable drawable = new GradientDrawable(); 72c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes 73c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes // Now wrap it and set a mock as the wrapper's callback 74c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes final Drawable wrapper = DrawableCompat.wrap(drawable); 75c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes final Drawable.Callback mockCallback = mock(Drawable.Callback.class); 76c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes wrapper.setCallback(mockCallback); 77c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes 78c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes // Now make the wrapped drawable invalidate itself 79c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes drawable.invalidateSelf(); 80c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes 81c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes // ...and verify that the wrapper calls to be invalidated 82c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes verify(mockCallback, times(1)).invalidateDrawable(wrapper); 83c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes } 84c3b9589f61cbfda8c60344a47f8f87c0ded98554Chris Banes 8589d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes}