DrawableCompatTest.java revision 4da36b0dfa8436b197314094337fa3102fcca1bc
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
2689d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banespublic class DrawableCompatTest extends AndroidTestCase {
2789d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes
2889d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes    @SmallTest
2989d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes    public void testDrawableUnwrap() {
3089d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes        final Drawable original = new GradientDrawable();
3189d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes        final Drawable wrappedDrawable = DrawableCompat.wrap(original);
3289d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes        assertSame(original, DrawableCompat.unwrap(wrappedDrawable));
3389d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes    }
3489d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes
3589d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes    @SmallTest
3689d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes    public void testDrawableChangeBoundsCopy() {
3789d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes        final Rect bounds = new Rect(0, 0, 10, 10);
3889d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes
39be61247c92b085602d3f671be6f506e9813aba19Chris Banes        final Drawable drawable = new GradientDrawable();
40be61247c92b085602d3f671be6f506e9813aba19Chris Banes
41be61247c92b085602d3f671be6f506e9813aba19Chris Banes        final Drawable wrapper = DrawableCompat.wrap(drawable);
42be61247c92b085602d3f671be6f506e9813aba19Chris Banes        wrapper.setBounds(bounds);
4389d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes
44be61247c92b085602d3f671be6f506e9813aba19Chris Banes        // Assert that the bounds were given to the original drawable
45be61247c92b085602d3f671be6f506e9813aba19Chris Banes        assertEquals(bounds, drawable.getBounds());
4689d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes    }
4789d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes
4889d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes    @SmallTest
4989d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes    public void testDrawableWrapOnlyWrapsOnce() {
5089d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes        final Drawable wrappedDrawable = DrawableCompat.wrap(new GradientDrawable());
5189d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes        assertSame(wrappedDrawable, DrawableCompat.wrap(wrappedDrawable));
5289d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes    }
5389d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes
544da36b0dfa8436b197314094337fa3102fcca1bcChris Banes    @SmallTest
554da36b0dfa8436b197314094337fa3102fcca1bcChris Banes    public void testWrapMutatedDrawableHasConstantState() {
564da36b0dfa8436b197314094337fa3102fcca1bcChris Banes        // First create a Drawable, and mutated it so that it has a constant state
574da36b0dfa8436b197314094337fa3102fcca1bcChris Banes        Drawable drawable = new GradientDrawable();
584da36b0dfa8436b197314094337fa3102fcca1bcChris Banes        drawable = drawable.mutate();
594da36b0dfa8436b197314094337fa3102fcca1bcChris Banes        assertNotNull(drawable.getConstantState());
604da36b0dfa8436b197314094337fa3102fcca1bcChris Banes
614da36b0dfa8436b197314094337fa3102fcca1bcChris Banes        // Now wrap and assert that the wrapper also returns a constant state
624da36b0dfa8436b197314094337fa3102fcca1bcChris Banes        final Drawable wrapper = DrawableCompat.wrap(drawable);
634da36b0dfa8436b197314094337fa3102fcca1bcChris Banes        assertNotNull(wrapper.getConstantState());
644da36b0dfa8436b197314094337fa3102fcca1bcChris Banes    }
654da36b0dfa8436b197314094337fa3102fcca1bcChris Banes
6689d63e9cbc1daf9e04ba6261cfd141e6dd68ec63Chris Banes}