1d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov/*
2d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov * Copyright (C) 2015 The Android Open Source Project
3d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov *
4d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov * Licensed under the Apache License, Version 2.0 (the "License");
5d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov * you may not use this file except in compliance with the License.
6d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov * You may obtain a copy of the License at
7d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov *
8d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov *      http://www.apache.org/licenses/LICENSE-2.0
9d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov *
10d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov * Unless required by applicable law or agreed to in writing, software
11d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov * distributed under the License is distributed on an "AS IS" BASIS,
12d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov * See the License for the specific language governing permissions and
14d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov * limitations under the License.
15d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov */
16d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov
17d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikovpackage android.support.v4.widget;
18d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov
19754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static android.support.test.espresso.Espresso.onView;
20754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static android.support.test.espresso.matcher.ViewMatchers.withId;
21754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static android.support.v4.testutils.LayoutDirectionActions.setLayoutDirection;
22754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static android.support.v4.testutils.TextViewActions.setCompoundDrawablesRelative;
234bb57b2c7c5e8fa607119bd5089535d5862cb979Aurimas Liutikasimport static android.support.v4.testutils.TextViewActions
244bb57b2c7c5e8fa607119bd5089535d5862cb979Aurimas Liutikas        .setCompoundDrawablesRelativeWithIntrinsicBounds;
25754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static android.support.v4.testutils.TextViewActions.setMaxLines;
26754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static android.support.v4.testutils.TextViewActions.setMinLines;
27754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static android.support.v4.testutils.TextViewActions.setText;
28754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static android.support.v4.testutils.TextViewActions.setTextAppearance;
29754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas
30754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static org.junit.Assert.assertEquals;
31754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static org.junit.Assert.assertNull;
32754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static org.junit.Assert.assertTrue;
33754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas
3492ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikovimport android.content.res.Resources;
35156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikovimport android.graphics.drawable.ColorDrawable;
3639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.graphics.drawable.Drawable;
374d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikovimport android.support.annotation.ColorInt;
38f5ec4487510a0e7226636704860a884f4c1d0ab6Kirill Grouchnikovimport android.support.compat.test.R;
39754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.filters.SmallTest;
4039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.support.v4.BaseInstrumentationTestCase;
414d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikovimport android.support.v4.testutils.TestUtils;
4239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.support.v4.view.ViewCompat;
43d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikovimport android.widget.TextView;
44754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas
4539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport org.junit.Before;
4639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport org.junit.Test;
47d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov
484bb57b2c7c5e8fa607119bd5089535d5862cb979Aurimas Liutikas@SmallTest
4939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovpublic class TextViewCompatTest extends BaseInstrumentationTestCase<TextViewTestActivity> {
5092ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov    private static final String TAG = "TextViewCompatTest";
51d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov
5292ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov    private TextView mTextView;
53d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov
544d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov    private class TestDrawable extends ColorDrawable {
554d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        private int mWidth;
564d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        private int mHeight;
574d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
584d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        public TestDrawable(@ColorInt int color, int width, int height) {
594d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov            super(color);
604d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov            mWidth = width;
614d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov            mHeight = height;
624d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        }
634d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
644d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        @Override
654d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        public int getIntrinsicWidth() {
664d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov            return mWidth;
674d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        }
684d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
694d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        @Override
704d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        public int getIntrinsicHeight() {
714d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov            return mHeight;
724d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        }
734d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov    }
744d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
75d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov    public TextViewCompatTest() {
7639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        super(TextViewTestActivity.class);
77d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov    }
78d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov
7939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    @Before
8039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    public void setUp() {
8139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        mTextView = (TextView) mActivityTestRule.getActivity().findViewById(R.id.text_view);
82d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov    }
83d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov
8439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    @Test
85d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov    public void testMaxLines() throws Throwable {
8692ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        final int maxLinesCount = 4;
8739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setMaxLines(maxLinesCount));
8892ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov
8992ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        assertEquals("Empty view: Max lines must match", TextViewCompat.getMaxLines(mTextView),
9092ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov                maxLinesCount);
9192ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov
9239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_short));
9392ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        assertEquals("Short text: Max lines must match", TextViewCompat.getMaxLines(mTextView),
9492ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov                maxLinesCount);
9592ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov
9639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_medium));
9792ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        assertEquals("Medium text: Max lines must match", TextViewCompat.getMaxLines(mTextView),
9892ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov                maxLinesCount);
9992ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov
10039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_long));
10192ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        assertEquals("Long text: Max lines must match", TextViewCompat.getMaxLines(mTextView),
10292ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov                maxLinesCount);
10392ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov    }
10492ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov
10539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    @Test
10692ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov    public void testMinLines() throws Throwable {
10792ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        final int minLinesCount = 3;
10839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setMinLines(minLinesCount));
10992ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov
11092ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        assertEquals("Empty view: Min lines must match", TextViewCompat.getMinLines(mTextView),
11192ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov                minLinesCount);
11292ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov
11339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_short));
11492ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        assertEquals("Short text: Min lines must match", TextViewCompat.getMinLines(mTextView),
11592ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov                minLinesCount);
11692ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov
11739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_medium));
11892ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        assertEquals("Medium text: Min lines must match", TextViewCompat.getMinLines(mTextView),
11992ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov                minLinesCount);
12092ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov
12139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_long));
12292ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        assertEquals("Long text: Min lines must match", TextViewCompat.getMinLines(mTextView),
12392ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov                minLinesCount);
12492ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov    }
12592ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov
12639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    @Test
12792ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov    public void testStyle() throws Throwable {
12839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setTextAppearance(R.style.TextMediumStyle));
129d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov
13039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        final Resources res = mActivityTestRule.getActivity().getResources();
1319176979f5317552e473fff0cf1ea9e87bf59d7d3Kirill Grouchnikov        assertTrue("Styled text view: style",
1329176979f5317552e473fff0cf1ea9e87bf59d7d3Kirill Grouchnikov                mTextView.getTypeface().isItalic() || (mTextView.getPaint().getTextSkewX() < 0));
13392ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        assertEquals("Styled text view: color", mTextView.getTextColors().getDefaultColor(),
13492ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov                res.getColor(R.color.text_color));
13592ad16973b68f0586c585da428946d851a7611bbKirill Grouchnikov        assertEquals("Styled text view: size", mTextView.getTextSize(),
13639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                (float) res.getDimensionPixelSize(R.dimen.text_medium_size), 1.0f);
137d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov    }
138156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov
13939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    @Test
140156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov    public void testCompoundDrawablesRelative() throws Throwable {
141156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov        final Drawable drawableStart = new ColorDrawable(0xFFFF0000);
142156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov        drawableStart.setBounds(0, 0, 20, 20);
143156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov        final Drawable drawableTop = new ColorDrawable(0xFF00FF00);
1444d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        drawableTop.setBounds(0, 0, 30, 25);
145156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov        final Drawable drawableEnd = new ColorDrawable(0xFF0000FF);
1464d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        drawableEnd.setBounds(0, 0, 25, 20);
147156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov
14839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_medium));
14939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setCompoundDrawablesRelative(drawableStart,
15039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                drawableTop, drawableEnd, null));
151156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov
152156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov        final Drawable[] drawablesAbsolute = mTextView.getCompoundDrawables();
1534d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
154156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov        assertEquals("Compound drawable: left", drawablesAbsolute[0], drawableStart);
1554d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left width",
1564d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().width(), 20);
1574d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left height",
1584d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().height(), 20);
1594d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
160156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov        assertEquals("Compound drawable: top", drawablesAbsolute[1], drawableTop);
1614d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: top width",
1624d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[1].getBounds().width(), 30);
1634d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: top height",
1644d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[1].getBounds().height(), 25);
1654d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
166156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov        assertEquals("Compound drawable: right", drawablesAbsolute[2], drawableEnd);
1674d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right width",
1684d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().width(), 25);
1694d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right height",
1704d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().height(), 20);
1714d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
172156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov        assertNull("Compound drawable: bottom", drawablesAbsolute[3]);
173156b807bb159a532412685e6b7cfd4f0a61d1b5eKirill Grouchnikov    }
174c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov
17539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    @Test
176c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov    public void testCompoundDrawablesRelativeRtl() throws Throwable {
17739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
178c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov
179c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        final Drawable drawableStart = new ColorDrawable(0xFFFF0000);
180c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        drawableStart.setBounds(0, 0, 20, 20);
181c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        final Drawable drawableTop = new ColorDrawable(0xFF00FF00);
1824d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        drawableTop.setBounds(0, 0, 30, 25);
183c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        final Drawable drawableEnd = new ColorDrawable(0xFF0000FF);
1844d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        drawableEnd.setBounds(0, 0, 25, 20);
185c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov
18639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_medium));
18739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setCompoundDrawablesRelative(drawableStart,
18839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                drawableTop, drawableEnd, null));
189c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov
190c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        // Check to see whether our text view is under RTL mode
191c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        if (ViewCompat.getLayoutDirection(mTextView) != ViewCompat.LAYOUT_DIRECTION_RTL) {
192c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov            // This will happen on v17- devices
193c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov            return;
194c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        }
195c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov
196c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        final Drawable[] drawablesAbsolute = mTextView.getCompoundDrawables();
1974d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
198c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        // End drawable should be returned as left
199c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        assertEquals("Compound drawable: left", drawablesAbsolute[0], drawableEnd);
2004d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left width",
2014d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().width(), 25);
2024d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left height",
2034d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().height(), 20);
2044d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
205c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        assertEquals("Compound drawable: top", drawablesAbsolute[1], drawableTop);
2064d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left width",
2074d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[1].getBounds().width(), 30);
2084d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left height",
2094d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[1].getBounds().height(), 25);
2104d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
211c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        // Start drawable should be returned as right
212c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        assertEquals("Compound drawable: right", drawablesAbsolute[2], drawableStart);
2134d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left width",
2144d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().width(), 20);
2154d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left height",
2164d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().height(), 20);
2174d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
218c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov        assertNull("Compound drawable: bottom", drawablesAbsolute[3]);
219c5b4d17e3c2877bd2888cd5314d0a624fff9b49dKirill Grouchnikov    }
2204d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
22139e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    @Test
2224d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov    public void testCompoundDrawablesRelativeWithIntrinsicBounds() throws Throwable {
2234d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        final Drawable drawableStart = new TestDrawable(0xFFFF0000, 30, 20);
2244d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        final Drawable drawableEnd = new TestDrawable(0xFF0000FF, 25, 45);
2254d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        final Drawable drawableBottom = new TestDrawable(0xFF00FF00, 15, 35);
2264d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
22739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_long));
22839e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setCompoundDrawablesRelativeWithIntrinsicBounds(
22939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                drawableStart, null, drawableEnd, drawableBottom));
2304d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2314d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        final Drawable[] drawablesAbsolute = mTextView.getCompoundDrawables();
2324d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2334d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left", drawablesAbsolute[0], drawableStart);
2344d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left width",
2354d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().width(), 30);
2364d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left height",
2374d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().height(), 20);
2384d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2394d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertNull("Compound drawable: top", drawablesAbsolute[1]);
2404d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2414d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right", drawablesAbsolute[2], drawableEnd);
2424d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right width",
2434d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().width(), 25);
2444d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right height",
2454d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().height(), 45);
2464d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2474d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: bottom", drawablesAbsolute[3], drawableBottom);
2484d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: bottom width",
2494d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[3].getBounds().width(), 15);
2504d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: bottom height",
2514d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[3].getBounds().height(), 35);
2524d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov    }
2534d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
25439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    @Test
2554d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov    public void testCompoundDrawablesRelativeWithIntrinsicBoundsRtl() throws Throwable {
25639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
2574d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2584d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        final Drawable drawableStart = new TestDrawable(0xFFFF0000, 30, 20);
2594d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        final Drawable drawableEnd = new TestDrawable(0xFF0000FF, 25, 45);
2604d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        final Drawable drawableBottom = new TestDrawable(0xFF00FF00, 15, 35);
2614d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
26239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_long));
26339e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setCompoundDrawablesRelativeWithIntrinsicBounds(
26439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                drawableStart, null, drawableEnd, drawableBottom));
2654d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2664d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        // Check to see whether our text view is under RTL mode
2674d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        if (ViewCompat.getLayoutDirection(mTextView) != ViewCompat.LAYOUT_DIRECTION_RTL) {
2684d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov            // This will happen on v17- devices
2694d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov            return;
2704d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        }
2714d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2724d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        final Drawable[] drawablesAbsolute = mTextView.getCompoundDrawables();
2734d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2744d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        // End drawable should be returned as left
2754d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left", drawablesAbsolute[0], drawableEnd);
2764d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left width",
2774d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().width(), 25);
2784d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left height",
2794d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().height(), 45);
2804d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2814d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertNull("Compound drawable: top", drawablesAbsolute[1]);
2824d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2834d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        // Start drawable should be returned as right
2844d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right", drawablesAbsolute[2], drawableStart);
2854d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right width",
2864d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().width(), 30);
2874d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right height",
2884d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().height(), 20);
2894d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
2904d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: bottom", drawablesAbsolute[3], drawableBottom);
2914d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: bottom width",
2924d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[3].getBounds().width(), 15);
2934d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: bottom height",
2944d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[3].getBounds().height(), 35);
2954d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov    }
2964d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
29739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    @Test
2984d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov    public void testCompoundDrawablesRelativeWithIntrinsicBoundsById() throws Throwable {
29939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_long));
30039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setCompoundDrawablesRelativeWithIntrinsicBounds(
3014d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                R.drawable.test_drawable_red, 0,
30239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                R.drawable.test_drawable_green, R.drawable.test_drawable_blue));
3034d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3044d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        final Drawable[] drawablesAbsolute = mTextView.getCompoundDrawables();
30539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        final Resources res = mActivityTestRule.getActivity().getResources();
3064d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3074d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        // The entire left drawable should be the specific red color
308bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov        TestUtils.assertAllPixelsOfColor("Compound drawable: left color",
309bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov                drawablesAbsolute[0], res.getColor(R.color.test_red));
3104d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left width",
3114d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().width(),
3124d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_small_size));
3134d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left height",
3144d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().height(),
3154d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_medium_size));
3164d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3174d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertNull("Compound drawable: top", drawablesAbsolute[1]);
3184d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3194d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        // The entire right drawable should be the specific green color
320bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov        TestUtils.assertAllPixelsOfColor("Compound drawable: right color",
321bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov                drawablesAbsolute[2], res.getColor(R.color.test_green));
3224d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right width",
3234d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().width(),
3244d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_medium_size));
3254d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right height",
3264d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().height(),
3274d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_large_size));
3284d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3294d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        // The entire bottom drawable should be the specific blue color
330bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov        TestUtils.assertAllPixelsOfColor("Compound drawable: bottom color",
331bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov                drawablesAbsolute[3], res.getColor(R.color.test_blue));
3324d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: bottom width",
3334d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[3].getBounds().width(),
3344d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_large_size));
3354d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: bottom height",
3364d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[3].getBounds().height(),
3374d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_small_size));
3384d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov    }
3394d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
34039e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov    @Test
3414d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov    public void testCompoundDrawablesRelativeWithIntrinsicBoundsByIdRtl() throws Throwable {
34239e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
3434d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
34439e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setText(R.string.test_text_long));
34539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        onView(withId(R.id.text_view)).perform(setCompoundDrawablesRelativeWithIntrinsicBounds(
3464d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                R.drawable.test_drawable_red, 0,
34739e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov                R.drawable.test_drawable_green, R.drawable.test_drawable_blue));
3484d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3494d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        // Check to see whether our text view is under RTL mode
3504d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        if (ViewCompat.getLayoutDirection(mTextView) != ViewCompat.LAYOUT_DIRECTION_RTL) {
3514d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov            // This will happen on v17- devices
3524d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov            return;
3534d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        }
3544d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3554d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        final Drawable[] drawablesAbsolute = mTextView.getCompoundDrawables();
35639e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikov        final Resources res = mActivityTestRule.getActivity().getResources();
3574d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3584d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        // The entire left / end drawable should be the specific green color
359bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov        TestUtils.assertAllPixelsOfColor("Compound drawable: left color",
360bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov                drawablesAbsolute[0], res.getColor(R.color.test_green));
3614d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left width",
3624d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().width(),
3634d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_medium_size));
3644d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: left height",
3654d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[0].getBounds().height(),
3664d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_large_size));
3674d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3684d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertNull("Compound drawable: top", drawablesAbsolute[1]);
3694d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3704d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        // The entire right drawable should be the specific red color
371bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov        TestUtils.assertAllPixelsOfColor("Compound drawable: right color",
372bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov                drawablesAbsolute[2], res.getColor(R.color.test_red));
3734d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right width",
3744d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().width(),
3754d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_small_size));
3764d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: right height",
3774d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[2].getBounds().height(),
3784d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_medium_size));
3794d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov
3804d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        // The entire bottom drawable should be the specific blue color
381bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov        TestUtils.assertAllPixelsOfColor("Compound drawable: bottom color",
382bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov                drawablesAbsolute[3], res.getColor(R.color.test_blue));
3834d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: bottom width",
3844d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[3].getBounds().width(),
3854d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_large_size));
3864d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov        assertEquals("Compound drawable: bottom height",
3874d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                drawablesAbsolute[3].getBounds().height(),
3884d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov                res.getDimensionPixelSize(R.dimen.drawable_small_size));
3894d83305f6b84175b5167d16e64cee01c4d3e1176Kirill Grouchnikov    }
390bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu
391bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu    @Test
392bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu    public void testCompoundDrawablesRelativeGetterAndSetter() {
393bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        final Drawable drawableStart = new TestDrawable(0xFFFF0000, 20, 20);
394bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        final Drawable drawableTop = new TestDrawable(0xFFFFFF00, 20, 20);
395bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        final Drawable drawableEnd = new TestDrawable(0xFF0000FF, 20, 20);
396bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        final Drawable drawableBottom = new TestDrawable(0xFF00FF00, 20, 20);
397bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu
398bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        onView(withId(R.id.text_view)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
399bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        onView(withId(R.id.text_view)).perform(setCompoundDrawablesRelative(drawableStart,
400bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu                drawableTop, drawableEnd, drawableBottom));
401bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu
402bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        // Check to see whether our text view is under RTL mode
403bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        if (ViewCompat.getLayoutDirection(mTextView) != ViewCompat.LAYOUT_DIRECTION_RTL) {
404bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu            // This will happen on v17- devices
405bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu            return;
406bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        }
407bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu
408bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        final Drawable[] drawablesRelative = TextViewCompat.getCompoundDrawablesRelative(mTextView);
409bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        assertEquals(drawableStart, drawablesRelative[0]);
410bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        assertEquals(drawableTop, drawablesRelative[1]);
411bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        assertEquals(drawableEnd, drawablesRelative[2]);
412bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu        assertEquals(drawableBottom, drawablesRelative[3]);
413bf14265885d1cb7ecd6db9b0109a8b033181747bAndrei Stingaceanu    }
414d9d9aec0e671cf0db89a8b58a81b1980834f1dc2Kirill Grouchnikov}
415