171eb6908f2689bd17000237eb645896c36da0138George Mount/*
271eb6908f2689bd17000237eb645896c36da0138George Mount * Copyright (C) 2015 The Android Open Source Project
371eb6908f2689bd17000237eb645896c36da0138George Mount *
471eb6908f2689bd17000237eb645896c36da0138George Mount * Licensed under the Apache License, Version 2.0 (the "License");
571eb6908f2689bd17000237eb645896c36da0138George Mount * you may not use this file except in compliance with the License.
671eb6908f2689bd17000237eb645896c36da0138George Mount * You may obtain a copy of the License at
771eb6908f2689bd17000237eb645896c36da0138George Mount *
871eb6908f2689bd17000237eb645896c36da0138George Mount *      http://www.apache.org/licenses/LICENSE-2.0
971eb6908f2689bd17000237eb645896c36da0138George Mount *
1071eb6908f2689bd17000237eb645896c36da0138George Mount * Unless required by applicable law or agreed to in writing, software
1171eb6908f2689bd17000237eb645896c36da0138George Mount * distributed under the License is distributed on an "AS IS" BASIS,
1271eb6908f2689bd17000237eb645896c36da0138George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1371eb6908f2689bd17000237eb645896c36da0138George Mount * See the License for the specific language governing permissions and
1471eb6908f2689bd17000237eb645896c36da0138George Mount * limitations under the License.
1571eb6908f2689bd17000237eb645896c36da0138George Mount */
16fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.testapp;
1771eb6908f2689bd17000237eb645896c36da0138George Mount
182e2043d30f95585de2069e1cbb23e022ab0e71c4George Mountimport android.databinding.testapp.databinding.TextViewAdapterTestBinding;
19fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.testapp.vo.TextViewBindingObject;
2071eb6908f2689bd17000237eb645896c36da0138George Mount
2171eb6908f2689bd17000237eb645896c36da0138George Mountimport android.annotation.TargetApi;
22fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.adapters.TextViewBindingAdapter;
2371eb6908f2689bd17000237eb645896c36da0138George Mountimport android.graphics.drawable.ColorDrawable;
2471eb6908f2689bd17000237eb645896c36da0138George Mountimport android.os.Build;
25d0bb3f1e1a94747bb3dd8bd2fee315d8816f0f5dGeorge Mountimport android.test.UiThreadTest;
2671eb6908f2689bd17000237eb645896c36da0138George Mountimport android.text.Editable;
2771eb6908f2689bd17000237eb645896c36da0138George Mountimport android.text.InputFilter;
2871eb6908f2689bd17000237eb645896c36da0138George Mountimport android.text.InputType;
2971eb6908f2689bd17000237eb645896c36da0138George Mountimport android.text.Spannable;
3071eb6908f2689bd17000237eb645896c36da0138George Mountimport android.text.method.DialerKeyListener;
3171eb6908f2689bd17000237eb645896c36da0138George Mountimport android.text.method.DigitsKeyListener;
3271eb6908f2689bd17000237eb645896c36da0138George Mountimport android.text.method.KeyListener;
3371eb6908f2689bd17000237eb645896c36da0138George Mountimport android.text.method.TextKeyListener;
3471eb6908f2689bd17000237eb645896c36da0138George Mountimport android.widget.TextView;
3571eb6908f2689bd17000237eb645896c36da0138George Mount
3671eb6908f2689bd17000237eb645896c36da0138George Mountpublic class TextViewBindingAdapterTest
374c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount        extends BindingAdapterTestBase<TextViewAdapterTestBinding, TextViewBindingObject> {
3871eb6908f2689bd17000237eb645896c36da0138George Mount
3971eb6908f2689bd17000237eb645896c36da0138George Mount    public TextViewBindingAdapterTest() {
404c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount        super(TextViewAdapterTestBinding.class, TextViewBindingObject.class,
4171eb6908f2689bd17000237eb645896c36da0138George Mount                R.layout.text_view_adapter_test);
4271eb6908f2689bd17000237eb645896c36da0138George Mount    }
4371eb6908f2689bd17000237eb645896c36da0138George Mount
4471eb6908f2689bd17000237eb645896c36da0138George Mount    public void testNumeric() throws Throwable {
4534a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount        TextView view = mBinder.numericText;
4671eb6908f2689bd17000237eb645896c36da0138George Mount        assertTrue(view.getKeyListener() instanceof DigitsKeyListener);
4771eb6908f2689bd17000237eb645896c36da0138George Mount        DigitsKeyListener listener = (DigitsKeyListener) view.getKeyListener();
4871eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(getExpectedNumericType(), listener.getInputType());
4971eb6908f2689bd17000237eb645896c36da0138George Mount
5071eb6908f2689bd17000237eb645896c36da0138George Mount        changeValues();
5171eb6908f2689bd17000237eb645896c36da0138George Mount
5271eb6908f2689bd17000237eb645896c36da0138George Mount        assertTrue(view.getKeyListener() instanceof DigitsKeyListener);
5371eb6908f2689bd17000237eb645896c36da0138George Mount        listener = (DigitsKeyListener) view.getKeyListener();
5471eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(getExpectedNumericType(), listener.getInputType());
5571eb6908f2689bd17000237eb645896c36da0138George Mount    }
5671eb6908f2689bd17000237eb645896c36da0138George Mount
5771eb6908f2689bd17000237eb645896c36da0138George Mount    private int getExpectedNumericType() {
5871eb6908f2689bd17000237eb645896c36da0138George Mount        int expectedType = InputType.TYPE_CLASS_NUMBER;
5971eb6908f2689bd17000237eb645896c36da0138George Mount        if ((mBindingObject.getNumeric() & TextViewBindingAdapter.SIGNED) != 0) {
6071eb6908f2689bd17000237eb645896c36da0138George Mount            expectedType |= InputType.TYPE_NUMBER_FLAG_SIGNED;
6171eb6908f2689bd17000237eb645896c36da0138George Mount        }
6271eb6908f2689bd17000237eb645896c36da0138George Mount        if ((mBindingObject.getNumeric() & TextViewBindingAdapter.DECIMAL) != 0) {
6371eb6908f2689bd17000237eb645896c36da0138George Mount            expectedType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
6471eb6908f2689bd17000237eb645896c36da0138George Mount        }
6571eb6908f2689bd17000237eb645896c36da0138George Mount        return expectedType;
6671eb6908f2689bd17000237eb645896c36da0138George Mount    }
6771eb6908f2689bd17000237eb645896c36da0138George Mount
6871eb6908f2689bd17000237eb645896c36da0138George Mount    public void testDrawables() throws Throwable {
6971eb6908f2689bd17000237eb645896c36da0138George Mount        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
7034a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount            TextView view = mBinder.textDrawableNormal;
7171eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableLeft(),
7271eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawables()[0]).getColor());
7371eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableTop(),
7471eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawables()[1]).getColor());
7571eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableRight(),
7671eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawables()[2]).getColor());
7771eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableBottom(),
7871eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawables()[3]).getColor());
7971eb6908f2689bd17000237eb645896c36da0138George Mount
8071eb6908f2689bd17000237eb645896c36da0138George Mount            changeValues();
8171eb6908f2689bd17000237eb645896c36da0138George Mount
8271eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableLeft(),
8371eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawables()[0]).getColor());
8471eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableTop(),
8571eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawables()[1]).getColor());
8671eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableRight(),
8771eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawables()[2]).getColor());
8871eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableBottom(),
8971eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawables()[3]).getColor());
9071eb6908f2689bd17000237eb645896c36da0138George Mount        }
9171eb6908f2689bd17000237eb645896c36da0138George Mount    }
9271eb6908f2689bd17000237eb645896c36da0138George Mount
9371eb6908f2689bd17000237eb645896c36da0138George Mount    public void testDrawableStartEnd() throws Throwable {
9471eb6908f2689bd17000237eb645896c36da0138George Mount        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
9534a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount            TextView view = mBinder.textDrawableStartEnd;
9671eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableStart(),
9771eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawablesRelative()[0]).getColor());
9871eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableEnd(),
9971eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawablesRelative()[2]).getColor());
10071eb6908f2689bd17000237eb645896c36da0138George Mount
10171eb6908f2689bd17000237eb645896c36da0138George Mount            changeValues();
10271eb6908f2689bd17000237eb645896c36da0138George Mount
10371eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableStart(),
10471eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawablesRelative()[0]).getColor());
10571eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getDrawableEnd(),
10671eb6908f2689bd17000237eb645896c36da0138George Mount                    ((ColorDrawable) view.getCompoundDrawablesRelative()[2]).getColor());
10771eb6908f2689bd17000237eb645896c36da0138George Mount        }
10871eb6908f2689bd17000237eb645896c36da0138George Mount    }
10971eb6908f2689bd17000237eb645896c36da0138George Mount
11071eb6908f2689bd17000237eb645896c36da0138George Mount    public void testSimpleProperties() throws Throwable {
11134a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount        TextView view = mBinder.textView;
11271eb6908f2689bd17000237eb645896c36da0138George Mount
11371eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getAutoLink(), view.getAutoLinkMask());
11471eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getDrawablePadding(), view.getCompoundDrawablePadding());
11571eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getTextSize(), view.getTextSize());
11671eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getTextColorHint(), view.getHintTextColors().getDefaultColor());
11771eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getTextColorLink(), view.getLinkTextColors().getDefaultColor());
11871eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.isAutoText(), isAutoTextEnabled(view));
11971eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getCapitalize(), getCapitalization(view));
12071eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getImeActionLabel(), view.getImeActionLabel());
12171eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getImeActionId(), view.getImeActionId());
12271eb6908f2689bd17000237eb645896c36da0138George Mount        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
12371eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getTextColorHighlight(), view.getHighlightColor());
12471eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getLineSpacingExtra(), view.getLineSpacingExtra());
12571eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getLineSpacingMultiplier(),
12671eb6908f2689bd17000237eb645896c36da0138George Mount                    view.getLineSpacingMultiplier());
12771eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getShadowColor(), view.getShadowColor());
12871eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getShadowDx(), view.getShadowDx());
12971eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getShadowDy(), view.getShadowDy());
13071eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getShadowRadius(), view.getShadowRadius());
13171eb6908f2689bd17000237eb645896c36da0138George Mount            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
13271eb6908f2689bd17000237eb645896c36da0138George Mount                assertEquals(mBindingObject.getMaxLength(), getMaxLength(view));
13371eb6908f2689bd17000237eb645896c36da0138George Mount            }
13471eb6908f2689bd17000237eb645896c36da0138George Mount        }
13571eb6908f2689bd17000237eb645896c36da0138George Mount
13671eb6908f2689bd17000237eb645896c36da0138George Mount        changeValues();
13771eb6908f2689bd17000237eb645896c36da0138George Mount
13871eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getAutoLink(), view.getAutoLinkMask());
13971eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getDrawablePadding(), view.getCompoundDrawablePadding());
14071eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getTextSize(), view.getTextSize());
14171eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getTextColorHint(), view.getHintTextColors().getDefaultColor());
14271eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getTextColorLink(), view.getLinkTextColors().getDefaultColor());
14371eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.isAutoText(), isAutoTextEnabled(view));
14471eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getCapitalize(), getCapitalization(view));
14571eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getImeActionLabel(), view.getImeActionLabel());
14671eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getImeActionId(), view.getImeActionId());
14771eb6908f2689bd17000237eb645896c36da0138George Mount        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
14871eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getTextColorHighlight(), view.getHighlightColor());
14971eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getLineSpacingExtra(), view.getLineSpacingExtra());
15071eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getLineSpacingMultiplier(),
15171eb6908f2689bd17000237eb645896c36da0138George Mount                    view.getLineSpacingMultiplier());
15271eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getShadowColor(), view.getShadowColor());
15371eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getShadowDx(), view.getShadowDx());
15471eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getShadowDy(), view.getShadowDy());
15571eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals(mBindingObject.getShadowRadius(), view.getShadowRadius());
15671eb6908f2689bd17000237eb645896c36da0138George Mount            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
15771eb6908f2689bd17000237eb645896c36da0138George Mount                assertEquals(mBindingObject.getMaxLength(), getMaxLength(view));
15871eb6908f2689bd17000237eb645896c36da0138George Mount            }
15971eb6908f2689bd17000237eb645896c36da0138George Mount        }
16071eb6908f2689bd17000237eb645896c36da0138George Mount
16171eb6908f2689bd17000237eb645896c36da0138George Mount        runTestOnUiThread(new Runnable() {
16271eb6908f2689bd17000237eb645896c36da0138George Mount            @Override
16371eb6908f2689bd17000237eb645896c36da0138George Mount            public void run() {
16471eb6908f2689bd17000237eb645896c36da0138George Mount                mBindingObject.setCapitalize(TextKeyListener.Capitalize.CHARACTERS);
1654c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount                mBinder.executePendingBindings();
16671eb6908f2689bd17000237eb645896c36da0138George Mount            }
16771eb6908f2689bd17000237eb645896c36da0138George Mount        });
16871eb6908f2689bd17000237eb645896c36da0138George Mount
16971eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getCapitalize(), getCapitalization(view));
17071eb6908f2689bd17000237eb645896c36da0138George Mount
17171eb6908f2689bd17000237eb645896c36da0138George Mount        runTestOnUiThread(new Runnable() {
17271eb6908f2689bd17000237eb645896c36da0138George Mount            @Override
17371eb6908f2689bd17000237eb645896c36da0138George Mount            public void run() {
17471eb6908f2689bd17000237eb645896c36da0138George Mount                mBindingObject.setCapitalize(TextKeyListener.Capitalize.WORDS);
1754c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount                mBinder.executePendingBindings();
17671eb6908f2689bd17000237eb645896c36da0138George Mount            }
17771eb6908f2689bd17000237eb645896c36da0138George Mount        });
17871eb6908f2689bd17000237eb645896c36da0138George Mount
17971eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getCapitalize(), getCapitalization(view));
18071eb6908f2689bd17000237eb645896c36da0138George Mount    }
18171eb6908f2689bd17000237eb645896c36da0138George Mount
18271eb6908f2689bd17000237eb645896c36da0138George Mount    private static boolean isAutoTextEnabled(TextView view) {
18371eb6908f2689bd17000237eb645896c36da0138George Mount        KeyListener keyListener = view.getKeyListener();
18471eb6908f2689bd17000237eb645896c36da0138George Mount        if (keyListener == null) {
18571eb6908f2689bd17000237eb645896c36da0138George Mount            return false;
18671eb6908f2689bd17000237eb645896c36da0138George Mount        }
18771eb6908f2689bd17000237eb645896c36da0138George Mount        if (!(keyListener instanceof TextKeyListener)) {
18871eb6908f2689bd17000237eb645896c36da0138George Mount            return false;
18971eb6908f2689bd17000237eb645896c36da0138George Mount        }
19071eb6908f2689bd17000237eb645896c36da0138George Mount        TextKeyListener textKeyListener = (TextKeyListener) keyListener;
19171eb6908f2689bd17000237eb645896c36da0138George Mount        return ((textKeyListener.getInputType() & InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0);
19271eb6908f2689bd17000237eb645896c36da0138George Mount    }
19371eb6908f2689bd17000237eb645896c36da0138George Mount
19471eb6908f2689bd17000237eb645896c36da0138George Mount    private static TextKeyListener.Capitalize getCapitalization(TextView view) {
19571eb6908f2689bd17000237eb645896c36da0138George Mount        KeyListener keyListener = view.getKeyListener();
19671eb6908f2689bd17000237eb645896c36da0138George Mount        if (keyListener == null) {
19771eb6908f2689bd17000237eb645896c36da0138George Mount            return TextKeyListener.Capitalize.NONE;
19871eb6908f2689bd17000237eb645896c36da0138George Mount        }
19971eb6908f2689bd17000237eb645896c36da0138George Mount        int inputType = keyListener.getInputType();
20071eb6908f2689bd17000237eb645896c36da0138George Mount        if ((inputType & InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS) != 0) {
20171eb6908f2689bd17000237eb645896c36da0138George Mount            return TextKeyListener.Capitalize.CHARACTERS;
20271eb6908f2689bd17000237eb645896c36da0138George Mount        } else if ((inputType & InputType.TYPE_TEXT_FLAG_CAP_WORDS) != 0) {
20371eb6908f2689bd17000237eb645896c36da0138George Mount            return TextKeyListener.Capitalize.WORDS;
20471eb6908f2689bd17000237eb645896c36da0138George Mount        } else if ((inputType & InputType.TYPE_TEXT_FLAG_CAP_SENTENCES) != 0) {
20571eb6908f2689bd17000237eb645896c36da0138George Mount            return TextKeyListener.Capitalize.SENTENCES;
20671eb6908f2689bd17000237eb645896c36da0138George Mount        } else {
20771eb6908f2689bd17000237eb645896c36da0138George Mount            return TextKeyListener.Capitalize.NONE;
20871eb6908f2689bd17000237eb645896c36da0138George Mount        }
20971eb6908f2689bd17000237eb645896c36da0138George Mount    }
21071eb6908f2689bd17000237eb645896c36da0138George Mount
21171eb6908f2689bd17000237eb645896c36da0138George Mount    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
21271eb6908f2689bd17000237eb645896c36da0138George Mount    private static int getMaxLength(TextView view) {
21371eb6908f2689bd17000237eb645896c36da0138George Mount        InputFilter[] filters = view.getFilters();
21471eb6908f2689bd17000237eb645896c36da0138George Mount        for (InputFilter filter : filters) {
21571eb6908f2689bd17000237eb645896c36da0138George Mount            if (filter instanceof InputFilter.LengthFilter) {
21671eb6908f2689bd17000237eb645896c36da0138George Mount                InputFilter.LengthFilter lengthFilter = (InputFilter.LengthFilter) filter;
21771eb6908f2689bd17000237eb645896c36da0138George Mount                return lengthFilter.getMax();
21871eb6908f2689bd17000237eb645896c36da0138George Mount            }
21971eb6908f2689bd17000237eb645896c36da0138George Mount        }
22071eb6908f2689bd17000237eb645896c36da0138George Mount        return -1;
22171eb6908f2689bd17000237eb645896c36da0138George Mount    }
22271eb6908f2689bd17000237eb645896c36da0138George Mount
22371eb6908f2689bd17000237eb645896c36da0138George Mount    public void testAllCaps() throws Throwable {
22434a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount        TextView view = mBinder.textAllCaps;
22571eb6908f2689bd17000237eb645896c36da0138George Mount
22671eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.isTextAllCaps(), view.getTransformationMethod() != null);
22771eb6908f2689bd17000237eb645896c36da0138George Mount        if (view.getTransformationMethod() != null) {
22871eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals("ALL CAPS",
22971eb6908f2689bd17000237eb645896c36da0138George Mount                    view.getTransformationMethod().getTransformation("all caps", view));
23071eb6908f2689bd17000237eb645896c36da0138George Mount        }
23171eb6908f2689bd17000237eb645896c36da0138George Mount
23271eb6908f2689bd17000237eb645896c36da0138George Mount        changeValues();
23371eb6908f2689bd17000237eb645896c36da0138George Mount
23471eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.isTextAllCaps(), view.getTransformationMethod() != null);
23571eb6908f2689bd17000237eb645896c36da0138George Mount        if (view.getTransformationMethod() != null) {
23671eb6908f2689bd17000237eb645896c36da0138George Mount            assertEquals("ALL CAPS",
23771eb6908f2689bd17000237eb645896c36da0138George Mount                    view.getTransformationMethod().getTransformation("all caps", view));
23871eb6908f2689bd17000237eb645896c36da0138George Mount        }
23971eb6908f2689bd17000237eb645896c36da0138George Mount    }
24071eb6908f2689bd17000237eb645896c36da0138George Mount
24171eb6908f2689bd17000237eb645896c36da0138George Mount    public void testBufferType() throws Throwable {
24234a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount        TextView view = mBinder.textBufferType;
24371eb6908f2689bd17000237eb645896c36da0138George Mount
24471eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getBufferType(), getBufferType(view));
24571eb6908f2689bd17000237eb645896c36da0138George Mount        changeValues();
24671eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getBufferType(), getBufferType(view));
24771eb6908f2689bd17000237eb645896c36da0138George Mount    }
24871eb6908f2689bd17000237eb645896c36da0138George Mount
24971eb6908f2689bd17000237eb645896c36da0138George Mount    private static TextView.BufferType getBufferType(TextView view) {
25071eb6908f2689bd17000237eb645896c36da0138George Mount        CharSequence text = view.getText();
25171eb6908f2689bd17000237eb645896c36da0138George Mount        if (text instanceof Editable) {
25271eb6908f2689bd17000237eb645896c36da0138George Mount            return TextView.BufferType.EDITABLE;
25371eb6908f2689bd17000237eb645896c36da0138George Mount        }
25471eb6908f2689bd17000237eb645896c36da0138George Mount        if (text instanceof Spannable) {
25571eb6908f2689bd17000237eb645896c36da0138George Mount            return TextView.BufferType.SPANNABLE;
25671eb6908f2689bd17000237eb645896c36da0138George Mount        }
25771eb6908f2689bd17000237eb645896c36da0138George Mount        return TextView.BufferType.NORMAL;
25871eb6908f2689bd17000237eb645896c36da0138George Mount    }
25971eb6908f2689bd17000237eb645896c36da0138George Mount
26071eb6908f2689bd17000237eb645896c36da0138George Mount    public void testInputType() throws Throwable {
26134a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount        TextView view = mBinder.textInputType;
26271eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getInputType(), view.getInputType());
26371eb6908f2689bd17000237eb645896c36da0138George Mount        changeValues();
26471eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getInputType(), view.getInputType());
26571eb6908f2689bd17000237eb645896c36da0138George Mount    }
26671eb6908f2689bd17000237eb645896c36da0138George Mount
26771eb6908f2689bd17000237eb645896c36da0138George Mount    public void testDigits() throws Throwable {
26834a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount        TextView view = mBinder.textDigits;
26971eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getDigits(), getDigits(view));
27071eb6908f2689bd17000237eb645896c36da0138George Mount        changeValues();
27171eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.getDigits(), getDigits(view));
27271eb6908f2689bd17000237eb645896c36da0138George Mount    }
27371eb6908f2689bd17000237eb645896c36da0138George Mount
27471eb6908f2689bd17000237eb645896c36da0138George Mount    private static String getDigits(TextView textView) {
27571eb6908f2689bd17000237eb645896c36da0138George Mount        KeyListener keyListener = textView.getKeyListener();
27671eb6908f2689bd17000237eb645896c36da0138George Mount        if (!(keyListener instanceof DigitsKeyListener)) {
27771eb6908f2689bd17000237eb645896c36da0138George Mount            return null;
27871eb6908f2689bd17000237eb645896c36da0138George Mount        }
27971eb6908f2689bd17000237eb645896c36da0138George Mount        DigitsKeyListener digitsKeyListener = (DigitsKeyListener) keyListener;
28071eb6908f2689bd17000237eb645896c36da0138George Mount        String input = "abcdefghijklmnopqrstuvwxyz";
28171eb6908f2689bd17000237eb645896c36da0138George Mount        Spannable spannable = Spannable.Factory.getInstance().newSpannable(input);
28271eb6908f2689bd17000237eb645896c36da0138George Mount        return digitsKeyListener.filter(input, 0, input.length(), spannable, 0, input.length())
28371eb6908f2689bd17000237eb645896c36da0138George Mount                .toString();
28471eb6908f2689bd17000237eb645896c36da0138George Mount    }
28571eb6908f2689bd17000237eb645896c36da0138George Mount
28671eb6908f2689bd17000237eb645896c36da0138George Mount    public void testPhoneNumber() throws Throwable {
28734a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount        TextView textView = mBinder.textPhoneNumber;
28871eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.isPhoneNumber(), isPhoneNumber(textView));
28971eb6908f2689bd17000237eb645896c36da0138George Mount        changeValues();
29071eb6908f2689bd17000237eb645896c36da0138George Mount        assertEquals(mBindingObject.isPhoneNumber(), isPhoneNumber(textView));
29171eb6908f2689bd17000237eb645896c36da0138George Mount    }
29271eb6908f2689bd17000237eb645896c36da0138George Mount
29371eb6908f2689bd17000237eb645896c36da0138George Mount    private static boolean isPhoneNumber(TextView view) {
29471eb6908f2689bd17000237eb645896c36da0138George Mount        KeyListener keyListener = view.getKeyListener();
29571eb6908f2689bd17000237eb645896c36da0138George Mount        return (keyListener instanceof DialerKeyListener);
29671eb6908f2689bd17000237eb645896c36da0138George Mount    }
29771eb6908f2689bd17000237eb645896c36da0138George Mount
29871eb6908f2689bd17000237eb645896c36da0138George Mount    public void testInputMethod() throws Throwable {
29934a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount        TextView textView = mBinder.textInputMethod;
30071eb6908f2689bd17000237eb645896c36da0138George Mount        assertTrue(TextViewBindingObject.KeyListener1.class.isInstance(textView.getKeyListener()));
30171eb6908f2689bd17000237eb645896c36da0138George Mount        changeValues();
30271eb6908f2689bd17000237eb645896c36da0138George Mount        assertTrue(TextViewBindingObject.KeyListener2.class.isInstance(textView.getKeyListener()));
30371eb6908f2689bd17000237eb645896c36da0138George Mount    }
30471eb6908f2689bd17000237eb645896c36da0138George Mount
305d0bb3f1e1a94747bb3dd8bd2fee315d8816f0f5dGeorge Mount    @UiThreadTest
306d0bb3f1e1a94747bb3dd8bd2fee315d8816f0f5dGeorge Mount    public void testTextWithTheme() throws Throwable {
307d0bb3f1e1a94747bb3dd8bd2fee315d8816f0f5dGeorge Mount        TextView textView = mBinder.textWithTheme;
308d0bb3f1e1a94747bb3dd8bd2fee315d8816f0f5dGeorge Mount        assertNotNull(textView.getTextColors());
309d0bb3f1e1a94747bb3dd8bd2fee315d8816f0f5dGeorge Mount    }
310d0bb3f1e1a94747bb3dd8bd2fee315d8816f0f5dGeorge Mount
31199d74030fe5856572bd4b569bc04d2a11258f202George Mount    @UiThreadTest
31299d74030fe5856572bd4b569bc04d2a11258f202George Mount    public void testTextWithColor() throws Throwable {
31399d74030fe5856572bd4b569bc04d2a11258f202George Mount        TextView textView = mBinder.textWithColor;
31499d74030fe5856572bd4b569bc04d2a11258f202George Mount        int expectedColor = mBinder.getRoot().getResources().getColor(
31599d74030fe5856572bd4b569bc04d2a11258f202George Mount                android.R.color.holo_blue_bright);
31699d74030fe5856572bd4b569bc04d2a11258f202George Mount        assertEquals(expectedColor, textView.getCurrentTextColor());
31799d74030fe5856572bd4b569bc04d2a11258f202George Mount    }
31871eb6908f2689bd17000237eb645896c36da0138George Mount}
319