TextViewTest.java revision 277fd69e9d1f08b601cd6f12ff5f13e200a6b63a
1fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su/* 2fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * Copyright (C) 2008 The Android Open Source Project 3fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 4fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * Licensed under the Apache License, Version 2.0 (the "License"); 5fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * you may not use this file except in compliance with the License. 6fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * You may obtain a copy of the License at 7fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 8fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * http://www.apache.org/licenses/LICENSE-2.0 9fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 10fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * Unless required by applicable law or agreed to in writing, software 11fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * distributed under the License is distributed on an "AS IS" BASIS, 12fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * See the License for the specific language governing permissions and 14fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * limitations under the License. 15fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 16fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 17fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Supackage android.widget.cts; 18fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 194ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luoimport com.android.cts.widget.R; 20fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport com.android.internal.util.FastMath; 21fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 22fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport org.xmlpull.v1.XmlPullParserException; 23fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 24fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.app.Activity; 25fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.app.Instrumentation; 26fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.app.Instrumentation.ActivityMonitor; 27fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.content.Intent; 28fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.content.res.ColorStateList; 29fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.content.res.Resources.NotFoundException; 300162547f44173f0604d8a80143c128d9892460a1Kristian Monsenimport android.cts.util.PollingCheck; 31d82745ff4a8b174f7be1258fd329dedc52ce58bbChenjie Luoimport android.cts.util.WidgetTestUtils; 32fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.Bitmap; 33fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.Color; 34fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.Paint; 35afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.graphics.Path; 36fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.Rect; 37afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.graphics.RectF; 38fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.Typeface; 39fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.drawable.BitmapDrawable; 40fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.drawable.Drawable; 41fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.net.Uri; 42fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.os.Bundle; 435b51f77b99861d48fec1c327252416f726b3b01aJames Cookimport android.os.Parcelable; 44fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.test.ActivityInstrumentationTestCase2; 4572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.test.TouchUtils; 46fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.test.UiThreadTest; 47fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.Editable; 48fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.InputFilter; 49fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.InputType; 50fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.Layout; 51fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.Selection; 52fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.Spannable; 53fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.SpannableString; 54fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.TextPaint; 55fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.TextUtils; 56fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.TextUtils.TruncateAt; 57afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.text.TextWatcher; 58fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.ArrowKeyMovementMethod; 59fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.DateKeyListener; 60fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.DateTimeKeyListener; 61fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.DialerKeyListener; 62fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.DigitsKeyListener; 63fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.KeyListener; 64fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.LinkMovementMethod; 65fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.MovementMethod; 66fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.PasswordTransformationMethod; 67fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.QwertyKeyListener; 68fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.SingleLineTransformationMethod; 69fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.TextKeyListener; 70afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.text.method.TextKeyListener.Capitalize; 71fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.TimeKeyListener; 72fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.TransformationMethod; 73fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.style.URLSpan; 74fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.util.Linkify; 75fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.util.DisplayMetrics; 76fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.util.TypedValue; 77fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.ContextMenu; 78afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.view.ContextMenu.ContextMenuInfo; 79fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.Gravity; 80fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.KeyEvent; 81fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.View; 82fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.View.OnCreateContextMenuListener; 83fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.View.OnLongClickListener; 84afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.view.ViewGroup; 8572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.view.inputmethod.BaseInputConnection; 8672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.view.inputmethod.EditorInfo; 8772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.view.inputmethod.ExtractedText; 8872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.view.inputmethod.ExtractedTextRequest; 89c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunneimport android.widget.EditText; 90bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsuimport android.widget.FrameLayout; 9162808562ee0218f6ea3c07d333f7a65fc57c122fBrian Muramatsuimport android.widget.LinearLayout; 92fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.widget.Scroller; 93fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.widget.TextView; 94fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.widget.TextView.BufferType; 9572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.widget.TextView.OnEditorActionListener; 96fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 97fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport java.io.IOException; 98fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 99fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su/** 100fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * Test {@link TextView}. 101fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 1024ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luopublic class TextViewTest extends ActivityInstrumentationTestCase2<TextViewCtsActivity> { 103fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 104fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView mTextView; 105fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Activity mActivity; 106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Instrumentation mInstrumentation; 107fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static final String LONG_TEXT = "This is a really long string which exceeds " 1087375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "the width of the view. New devices have a much larger screen which " 1097375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "actually enables long strings to be displayed with no fading. " 1107375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "I have made this string longer to fix this case. If you are correcting " 1117375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "this text, I would love to see the kind of devices you guys now use!"; 112fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static final long TIMEOUT = 5000; 11322d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root private CharSequence mTransformedText; 114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 115fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public TextViewTest() { 1164ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luo super("com.android.cts.widget", TextViewCtsActivity.class); 117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 118fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected void setUp() throws Exception { 121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su super.setUp(); 122fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity = getActivity(); 1234594468cc37000395ee2a000da08651e73e78508keunyoung new PollingCheck() { 1244594468cc37000395ee2a000da08651e73e78508keunyoung @Override 1254594468cc37000395ee2a000da08651e73e78508keunyoung protected boolean check() { 1264594468cc37000395ee2a000da08651e73e78508keunyoung return mActivity.hasWindowFocus(); 1274594468cc37000395ee2a000da08651e73e78508keunyoung } 1284594468cc37000395ee2a000da08651e73e78508keunyoung }.run(); 129fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation = getInstrumentation(); 130fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 13228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook /** 13328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook * Promotes the TextView to editable and places focus in it to allow simulated typing. 13428715a6877392e4e63cb2b0170c1592fb50079dcJames Cook */ 13528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook private void initTextViewForTyping() { 13628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mActivity.runOnUiThread(new Runnable() { 13728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook public void run() { 13828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView = findTextView(R.id.textview_text); 13928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView.setKeyListener(QwertyKeyListener.getInstance(false, Capitalize.NONE)); 14028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView.setText("", BufferType.EDITABLE); 14128715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView.requestFocus(); 14228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook } 14328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook }); 14428715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mInstrumentation.waitForIdleSync(); 14528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook } 14628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 147fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testConstructor() { 148fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new TextView(mActivity); 149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new TextView(mActivity, null); 151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new TextView(mActivity, null, 0); 153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 156fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessText() { 157fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 158fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 159fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String expected = mActivity.getResources().getString(R.string.text_view_hello); 160fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(expected); 161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, tv.getText().toString()); 162fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 163fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(null); 164fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 165fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 166fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 167fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLineHeight() { 168fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 169fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineHeight() > 0); 170fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 171fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLineSpacing(1.2f, 1.5f); 172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineHeight() > 0); 173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 174fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 175fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLayout() { 176fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 177fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 178fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER); 180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView.getLayout()); 184fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TestLayoutRunnable runnable = new TestLayoutRunnable(mTextView) { 186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the text of TextView. 188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Hello, Android!"); 189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveLayout(); 190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }; 192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(runnable); 193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(runnable.getLayout()); 195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView.getLayout()); 196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessKeyListener() { 199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 202fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 203fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 204fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 205fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 206fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getKeyListener()); 207fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 208fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final KeyListener digitsKeyListener = DigitsKeyListener.getInstance(); 209fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 210fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 211fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 212fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(digitsKeyListener); 213fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 214fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 215fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 216fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(digitsKeyListener, mTextView.getKeyListener()); 217fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 218fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final QwertyKeyListener qwertyKeyListener 219fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su = QwertyKeyListener.getInstance(false, Capitalize.NONE); 220fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 221fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 222fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(qwertyKeyListener); 223fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 224fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 225fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 226fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(qwertyKeyListener, mTextView.getKeyListener()); 227fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 228fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 229fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessMovementMethod() { 230fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence LONG_TEXT = "Scrolls the specified widget to the specified " 231fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + "coordinates, except constrains the X scrolling position to the horizontal " 232fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + "regions of the text that will be visible after scrolling to " 233fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + "the specified Y position."; 234fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int selectionStart = 10; 235fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int selectionEnd = LONG_TEXT.length(); 236fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final MovementMethod movementMethod = ArrowKeyMovementMethod.getInstance(); 237fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 239fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 240fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMovementMethod(movementMethod); 241fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(LONG_TEXT, BufferType.EDITABLE); 242fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Editable) mTextView.getText(), 243fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su selectionStart, selectionEnd); 244fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 245fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 246fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 247fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 248fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 249fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(movementMethod, mTextView.getMovementMethod()); 250fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 251fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, Selection.getSelectionEnd(mTextView.getText())); 252fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_ALT_LEFT, 253fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su KeyEvent.KEYCODE_DPAD_UP); 254fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the selection has been removed. 255fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 256fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionEnd(mTextView.getText())); 257fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 258fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 259fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 260fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMovementMethod(null); 261fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Editable) mTextView.getText(), 262fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su selectionStart, selectionEnd); 263fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 264fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 265fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 266fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 267fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 268fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getMovementMethod()); 269fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 270fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, Selection.getSelectionEnd(mTextView.getText())); 271fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_ALT_LEFT, 272fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su KeyEvent.KEYCODE_DPAD_UP); 273fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the selection will not be changed. 274fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 275fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, Selection.getSelectionEnd(mTextView.getText())); 276fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 277fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 278fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 279fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testLength() { 280fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 281fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 282fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String content = "This is content"; 283fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(content); 284fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(content.length(), mTextView.length()); 285fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 286fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(""); 287fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.length()); 288fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 289fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(null); 290fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.length()); 291fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 292fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 293fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 294fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessGravity() { 295fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_gravity); 296fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 297fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_default); 2984bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.TOP | Gravity.START, mTextView.getGravity()); 299fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 300fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_bottom); 3014bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.BOTTOM | Gravity.START, mTextView.getGravity()); 302fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 303fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_right); 304fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.TOP | Gravity.RIGHT, mTextView.getGravity()); 305fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 306fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_center); 307fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.CENTER, mTextView.getGravity()); 308fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 309fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_fill); 310fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.FILL, mTextView.getGravity()); 311fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 312fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_center_vertical_right); 313fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.CENTER_VERTICAL | Gravity.RIGHT, mTextView.getGravity()); 314fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 315fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); 316fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, mTextView.getGravity()); 317fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.FILL); 318fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.FILL, mTextView.getGravity()); 319fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER); 320fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.CENTER, mTextView.getGravity()); 321fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 322fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.NO_GRAVITY); 3234bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.TOP | Gravity.START, mTextView.getGravity()); 324fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 325fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.RIGHT); 326fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.TOP | Gravity.RIGHT, mTextView.getGravity()); 327fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 328fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.FILL_VERTICAL); 3294bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.FILL_VERTICAL | Gravity.START, mTextView.getGravity()); 330fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 331fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //test negative input value. 332fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(-1); 333fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getGravity()); 334fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 335fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 336fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessAutoLinkMask() { 337fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 338fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text1 = 339fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new SpannableString("URL: http://www.google.com. mailto: account@gmail.com"); 340fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 341fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 342fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setAutoLinkMask(Linkify.ALL); 343fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text1, BufferType.EDITABLE); 344fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 345fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 346fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 347fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.ALL, mTextView.getAutoLinkMask()); 348fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 349fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Spannable spanString = (Spannable) mTextView.getText(); 350fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su URLSpan[] spans = spanString.getSpans(0, spanString.length(), URLSpan.class); 351fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(spans); 352fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, spans.length); 353fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("http://www.google.com", spans[0].getURL()); 354fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("mailto:account@gmail.com", spans[1].getURL()); 355fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 356fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text2 = 357fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new SpannableString("name: Jack. tel: +41 44 800 8999"); 358fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 359fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 360fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setAutoLinkMask(Linkify.PHONE_NUMBERS); 361fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text2, BufferType.EDITABLE); 362fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 363fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 364fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 365fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.PHONE_NUMBERS, mTextView.getAutoLinkMask()); 366fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 367fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spanString = (Spannable) mTextView.getText(); 368fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = spanString.getSpans(0, spanString.length(), URLSpan.class); 369fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(spans); 370fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, spans.length); 371fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("tel:+41448008999", spans[0].getURL()); 372fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 373fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(R.layout.textview_autolink); 374fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 1 for web, 2 for email, 4 for phone, 7 for all(web|email|phone) 375fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, getAutoLinkMask(R.id.autolink_default)); 376fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.WEB_URLS, getAutoLinkMask(R.id.autolink_web)); 377fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.EMAIL_ADDRESSES, getAutoLinkMask(R.id.autolink_email)); 378fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.PHONE_NUMBERS, getAutoLinkMask(R.id.autolink_phone)); 379fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.ALL, getAutoLinkMask(R.id.autolink_all)); 380fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.WEB_URLS | Linkify.EMAIL_ADDRESSES, 381fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound1)); 382fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.WEB_URLS | Linkify.PHONE_NUMBERS, 383fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound2)); 384fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS, 385fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound3)); 386fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.PHONE_NUMBERS | Linkify.ALL, 387fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound4)); 388fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 389fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 390fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessTextSize() { 391fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su DisplayMetrics metrics = mActivity.getResources().getDisplayMetrics(); 392fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 393fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 394fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20f); 395fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20f, metrics), 396fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 397fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 398fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20f); 399fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20f, metrics), 400fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 401fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 402fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f); 403fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, metrics), 404fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 405fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 406fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // setTextSize by default unit "sp" 407fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(20f); 408fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, metrics), 409fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 410fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 411fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(200f); 412fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 200f, metrics), 413fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 414fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 415fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 416fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessTextColor() { 417fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 418fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 419fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(Color.GREEN); 420fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.GREEN, mTextView.getCurrentTextColor()); 421fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.GREEN), mTextView.getTextColors()); 422fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 423fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(Color.BLACK); 424fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getCurrentTextColor()); 425fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.BLACK), mTextView.getTextColors()); 426fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 427fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(Color.RED); 428fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.RED, mTextView.getCurrentTextColor()); 429fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.RED), mTextView.getTextColors()); 430fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 431fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using ColorStateList 432fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 433fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ColorStateList colors = new ColorStateList(new int[][] { 434fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { android.R.attr.state_focused}, new int[0] }, 435fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { Color.rgb(0, 255, 0), Color.BLACK }); 436fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(colors); 437fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(colors, mTextView.getTextColors()); 438fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getCurrentTextColor()); 439fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 440fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // exceptional 441fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 442fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(null); 443fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should thrown exception if the colors is null"); 444fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e){ 445fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 446fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 447fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 448325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette public void testGetTextColor() { 449325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette // TODO: How to get a suitable TypedArray to test this method. 450325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette 451325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette try { 452325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette TextView.getTextColor(mActivity, null, -1); 453325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette fail("There should be a NullPointerException thrown out."); 454325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette } catch (NullPointerException e) { 455325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette } 456325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette } 457325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette 458fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetHighlightColor() { 459fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 460fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 461fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHighlightColor(0x00ff00ff); 462fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 463fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 464fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetShadowLayer() { 465fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 466fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 467fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // shadow is placed to the left and below the text 468fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setShadowLayer(1.0f, 0.3f, 0.3f, Color.CYAN); 469fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.isPaddingOffsetRequired()); 470fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getLeftPaddingOffset()); 471fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getTopPaddingOffset()); 472fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, textView.getRightPaddingOffset()); 473fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, textView.getBottomPaddingOffset()); 474fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 475fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // shadow is placed to the right and above the text 476fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setShadowLayer(1.0f, -0.8f, -0.8f, Color.CYAN); 477fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.isPaddingOffsetRequired()); 478fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getLeftPaddingOffset()); 479fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getTopPaddingOffset()); 480fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getRightPaddingOffset()); 481fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getBottomPaddingOffset()); 482fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 483fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // no shadow 484fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setShadowLayer(0.0f, 0.0f, 0.0f, Color.CYAN); 485fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(textView.isPaddingOffsetRequired()); 486fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getLeftPaddingOffset()); 487fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getTopPaddingOffset()); 488fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getRightPaddingOffset()); 489fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getBottomPaddingOffset()); 490fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 491fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 492fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 493fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetSelectAllOnFocus() { 494fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_selectallonfocus); 495fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String content = "This is the content"; 496fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String blank = ""; 497fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.selectAllOnFocus_default); 498fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(blank, BufferType.SPANNABLE); 499fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 500fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 501fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 502fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 503fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 504fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 505fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 506fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 507fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 508fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(content, BufferType.SPANNABLE); 509fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(true); 510fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 511fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 512fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 513fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 514fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 515fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 516fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 517fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(content.length(), mTextView.getSelectionEnd()); 518fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 519fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 0); 520fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(false); 521fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 522fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 523fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 524fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 525fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 526fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 527fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 528fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionEnd()); 529fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 530fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(blank, BufferType.SPANNABLE); 531fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(true); 532fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 533fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 534fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 535fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 536fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 537fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 538fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 539fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(blank.length(), mTextView.getSelectionEnd()); 540fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 541fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 0); 542fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(false); 543fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 544fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 545fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 546fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 547fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 548fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 549fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 550fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionEnd()); 551fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 552fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 553fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetPaint() { 554fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 555fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextPaint tp = mTextView.getPaint(); 556fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(tp); 557fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 558fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaintFlags(), tp.getFlags()); 559fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 560fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 561fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 562fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessLinksClickable() { 563fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_hint_linksclickable_freezestext); 564fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 565fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_linksClickable_freezesText_default); 566fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLinksClickable()); 567fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 568fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.linksClickable_true); 569fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLinksClickable()); 570fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 571fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.linksClickable_false); 572fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getLinksClickable()); 573fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 574fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinksClickable(false); 575fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getLinksClickable()); 576fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 577fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinksClickable(true); 578fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLinksClickable()); 579fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 580fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getMovementMethod()); 581fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 582fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text = new SpannableString("name: Jack. tel: +41 44 800 8999"); 583fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 584fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setAutoLinkMask(Linkify.PHONE_NUMBERS); 585fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 586fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 587fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Movement method will be automatically set to LinkMovementMethod 588fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getMovementMethod() instanceof LinkMovementMethod); 589fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 590fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 591fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessHintTextColor() { 592fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 593fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using int values 594fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 595fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(Color.GREEN); 596fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.GREEN, mTextView.getCurrentHintTextColor()); 597fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.GREEN), mTextView.getHintTextColors()); 598fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 599fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(Color.BLUE); 600fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.BLUE), mTextView.getHintTextColors()); 601fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLUE, mTextView.getCurrentHintTextColor()); 602fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 603fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(Color.RED); 604fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.RED), mTextView.getHintTextColors()); 605fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.RED, mTextView.getCurrentHintTextColor()); 606fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 607fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using ColorStateList 608fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 609fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ColorStateList colors = new ColorStateList(new int[][] { 610fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { android.R.attr.state_focused}, new int[0] }, 611fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { Color.rgb(0, 255, 0), Color.BLACK }); 612fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(colors); 613fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(colors, mTextView.getHintTextColors()); 614fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getCurrentHintTextColor()); 615fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 616fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // exceptional 617fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(null); 618fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getHintTextColors()); 619fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCurrentTextColor(), mTextView.getCurrentHintTextColor()); 620fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 621fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 622fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessLinkTextColor() { 623fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 624fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 625fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(Color.GRAY); 626fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.GRAY), mTextView.getLinkTextColors()); 627fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.GRAY, mTextView.getPaint().linkColor); 628fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 629fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(Color.YELLOW); 630fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.YELLOW), mTextView.getLinkTextColors()); 631fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.YELLOW, mTextView.getPaint().linkColor); 632fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 633fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(Color.WHITE); 634fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.WHITE), mTextView.getLinkTextColors()); 635fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.WHITE, mTextView.getPaint().linkColor); 636fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 637fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ColorStateList colors = new ColorStateList(new int[][] { 638fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { android.R.attr.state_expanded}, new int[0] }, 639fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { Color.rgb(0, 255, 0), Color.BLACK }); 640fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(colors); 641fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(colors, mTextView.getLinkTextColors()); 642fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getPaint().linkColor); 643fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 644fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(null); 645fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getLinkTextColors()); 646fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getPaint().linkColor); 647fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 648fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 649fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessPaintFlags() { 650fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 65153959f211c113aa7b2a2ebaf80e10b79ddcccef1Victoria Lease assertEquals(Paint.DEV_KERN_TEXT_FLAG | Paint.EMBEDDED_BITMAP_TEXT_FLAG 65253959f211c113aa7b2a2ebaf80e10b79ddcccef1Victoria Lease | Paint.ANTI_ALIAS_FLAG, mTextView.getPaintFlags()); 653fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 654fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG | Paint.FAKE_BOLD_TEXT_FLAG); 655fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Paint.UNDERLINE_TEXT_FLAG | Paint.FAKE_BOLD_TEXT_FLAG, 656fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getPaintFlags()); 657fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 658fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.LINEAR_TEXT_FLAG); 659fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Paint.STRIKE_THRU_TEXT_FLAG | Paint.LINEAR_TEXT_FLAG, 660fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getPaintFlags()); 661fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 662fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 663fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testHeightAndWidth() { 664fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 665fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 666fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 3); 667fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalHeight = mTextView.getHeight(); 668fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 669fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(originalHeight + 1); 670fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 671fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 672fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(originalHeight - 1); 673fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight - 1, mTextView.getHeight()); 674fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 675fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(-1); 676fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getHeight()); 677fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 678fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(Integer.MAX_VALUE); 679fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 680fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 681fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(originalHeight + 1); 682fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight + 1, mTextView.getHeight()); 683fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 684fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(originalHeight - 1); 685fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 686fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 687fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(-1); 688fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 689fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 690fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(0); 691fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(Integer.MAX_VALUE); 692fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 693fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(originalHeight + 1); 694fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight + 1, mTextView.getHeight()); 695fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 696fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(originalHeight - 1); 697fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight - 1, mTextView.getHeight()); 698fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 699fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(-1); 700fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getHeight()); 701fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 702fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(originalHeight); 703fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 704fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 705fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth >> 3, mTextView.getWidth()); 706fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 707fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Min Width 708fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinWidth(originalWidth + 1); 709fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 710fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth + 1, mTextView.getWidth()); 711fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 712fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinWidth(originalWidth - 1); 7139c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu assertEquals(2, mTextView.getLineCount()); 7149c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu assertEquals(originalWidth - 1, mTextView.getWidth()); 715fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 716fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Width 717fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(originalWidth + 1); 718fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 719fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth + 1, mTextView.getWidth()); 720fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 721fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(originalWidth - 1); 7229c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu assertEquals(2, mTextView.getLineCount()); 723fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth - 1, mTextView.getWidth()); 724fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 725fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 726fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMinEms() { 727fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 728fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 7299c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu 730fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 731fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalEms = originalWidth / mTextView.getLineHeight(); 732fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 733fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinEms(originalEms + 1); 734fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms + 1) * mTextView.getLineHeight(), mTextView.getWidth()); 735fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 736fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinEms(originalEms - 1); 737fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth, mTextView.getWidth()); 738fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 739fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 740fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMaxEms() { 741fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 742fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 743fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 744fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalEms = originalWidth / mTextView.getLineHeight(); 745fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 746fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxEms(originalEms + 1); 747fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 748fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth, mTextView.getWidth()); 749fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 750fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxEms(originalEms - 1); 751fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(1 < mTextView.getLineCount()); 752fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms - 1) * mTextView.getLineHeight(), 753fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getWidth()); 754fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 755fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 756fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetEms() { 757fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 758fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("check height", 1, mTextView.getLineCount()); 759fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 760fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalEms = originalWidth / mTextView.getLineHeight(); 761fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 762fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setEms(originalEms + 1); 763fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 764fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms + 1) * mTextView.getLineHeight(), 765fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getWidth()); 766fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 767fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setEms(originalEms - 1); 768fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((1 < mTextView.getLineCount())); 769fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms - 1) * mTextView.getLineHeight(), 770fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getWidth()); 771fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 772fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 773fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetLineSpacing() { 774fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 775fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalLineHeight = mTextView.getLineHeight(); 776fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 777fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 778fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float add = 1.2f; 779fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float mult = 1.4f; 780fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 781fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 782fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = 0.0f; 783fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = 1.4f; 784fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 785fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 786fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 787fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // abnormal 788fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = -1.2f; 789fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = 1.4f; 790fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 791fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 792fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = -1.2f; 793fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = -1.4f; 794fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 795fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 796fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = 1.2f; 797fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = 0.0f; 798fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 799fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 800fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 801fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // edge 802fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = Float.MIN_VALUE; 803fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = Float.MIN_VALUE; 804fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 805fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float expected = originalLineHeight * mult + add; 806fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(expected), mTextView.getLineHeight()); 807fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = Float.MAX_VALUE; 808fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = Float.MAX_VALUE; 809fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 810fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su expected = originalLineHeight * mult + add; 811fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(expected), mTextView.getLineHeight()); 812fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 813fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 814fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testInstanceState() { 815fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 816fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 817fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 818fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessFreezesText() throws Throwable { 819fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(R.layout.textview_hint_linksclickable_freezestext); 820fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 821fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_linksClickable_freezesText_default); 822fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getFreezesText()); 823fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 824fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_true); 825fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getFreezesText()); 826fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 827fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_false); 828fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getFreezesText()); 829fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 830fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFreezesText(false); 831fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getFreezesText()); 832fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 833fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text = "Hello, TextView."; 834fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 835fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 836fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 837fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 838fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 839fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 840fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 841fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final URLSpan urlSpan = new URLSpan("ctstest://TextView/test"); 84272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // TODO: How to simulate the TextView in frozen icicles. 843fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Instrumentation instrumentation = getInstrumentation(); 844fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ActivityMonitor am = instrumentation.addMonitor(MockURLSpanTestActivity.class.getName(), 845fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su null, false); 846fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 847fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 848fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 849fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Uri uri = Uri.parse(urlSpan.getURL()); 850fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Intent intent = new Intent(Intent.ACTION_VIEW, uri); 851fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.startActivity(intent); 852fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 853fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 854fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 855fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Activity newActivity = am.waitForActivityWithTimeout(TIMEOUT); 856fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(newActivity); 857fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su newActivity.finish(); 85872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach instrumentation.removeMonitor(am); 859fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text of TextView is removed. 860fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_false); 86172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 86272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(text.toString(), mTextView.getText().toString()); 863fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 864fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFreezesText(true); 865fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getFreezesText()); 866fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 867fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 868fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 869fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 870fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 871fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 872fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 87372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // TODO: How to simulate the TextView in frozen icicles. 874fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su am = instrumentation.addMonitor(MockURLSpanTestActivity.class.getName(), 875fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su null, false); 876fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 877fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 878fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 879fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Uri uri = Uri.parse(urlSpan.getURL()); 880fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Intent intent = new Intent(Intent.ACTION_VIEW, uri); 881fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.startActivity(intent); 882fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 883fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 884fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 88507b9d3406e116f2f6b92932925783eed79503de0Mist Liao Activity oldActivity = newActivity; 88607b9d3406e116f2f6b92932925783eed79503de0Mist Liao while (true) { 88707b9d3406e116f2f6b92932925783eed79503de0Mist Liao newActivity = am.waitForActivityWithTimeout(TIMEOUT); 88807b9d3406e116f2f6b92932925783eed79503de0Mist Liao assertNotNull(newActivity); 88907b9d3406e116f2f6b92932925783eed79503de0Mist Liao if (newActivity != oldActivity) { 89007b9d3406e116f2f6b92932925783eed79503de0Mist Liao break; 89107b9d3406e116f2f6b92932925783eed79503de0Mist Liao } 89207b9d3406e116f2f6b92932925783eed79503de0Mist Liao } 893fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su newActivity.finish(); 89472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach instrumentation.removeMonitor(am); 895fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text of TextView is still there. 896fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_false); 897fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text.toString(), mTextView.getText().toString()); 898fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 899fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 900fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetEditableFactory() { 901fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 902fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "sample"; 903fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockEditableFactory factory = new MockEditableFactory(); 904fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEditableFactory(factory); 905fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 906fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 907fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 908fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(factory.hasCalledNewEditable()); 909fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 910fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 911fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.SPANNABLE); 912fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(factory.hasCalledNewEditable()); 913fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 914fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 915fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.NORMAL); 916fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(factory.hasCalledNewEditable()); 917fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 918fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 919fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 920fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(factory.hasCalledNewEditable()); 921fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 922fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 923fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(DigitsKeyListener.getInstance()); 924fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 925fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 926fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(factory.hasCalledNewEditable()); 927fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 928fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 929fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 930fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEditableFactory(null); 931fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("The factory can not set to null!"); 932fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 933fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 934fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 935fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 936fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetSpannableFactory() { 937fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 938fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "sample"; 939fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockSpannableFactory factory = new MockSpannableFactory(); 940fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSpannableFactory(factory); 941fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 942fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 943fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 944e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertFalse(factory.hasCalledNewSpannable()); 945fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 946fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 947fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 948e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertFalse(factory.hasCalledNewSpannable()); 949fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 950fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 951fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.NORMAL); 952e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertFalse(factory.hasCalledNewSpannable()); 953fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 954fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 955fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.SPANNABLE); 956e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertTrue(factory.hasCalledNewSpannable()); 957fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 958fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 959fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMovementMethod(LinkMovementMethod.getInstance()); 960fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 961fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.NORMAL); 962e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertTrue(factory.hasCalledNewSpannable()); 963fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 964fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 965fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 966fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSpannableFactory(null); 967fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("The factory can not set to null!"); 968fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 969fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 970fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 971fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 972fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testTextChangedListener() { 973fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 974fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextWatcher watcher0 = new MockTextWatcher(); 975fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextWatcher watcher1 = new MockTextWatcher(); 976fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 977fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.addTextChangedListener(watcher0); 978fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.addTextChangedListener(watcher1); 979fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 980fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 981fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 982fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Changed"); 983fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 984fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 985fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 986fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledBeforeTextChanged()); 987fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledOnTextChanged()); 988fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledAfterTextChanged()); 989fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 990fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 991fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 992fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // BeforeTextChanged and OnTextChanged are called though the strings are same 993fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Changed"); 994fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 995fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 996fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 997fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledBeforeTextChanged()); 998fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledOnTextChanged()); 999fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledAfterTextChanged()); 1000fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1001fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 1002fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 1003fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // BeforeTextChanged and OnTextChanged are called twice (The text is not 1004fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Editable, so in Append() it calls setText() first) 1005fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("and appended"); 1006fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 1007fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 1008fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 1009fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledBeforeTextChanged()); 1010fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledOnTextChanged()); 1011fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledAfterTextChanged()); 1012fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1013fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 1014fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 1015fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Methods are not called if the string does not change 1016fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append(""); 1017fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher0.hasCalledBeforeTextChanged()); 1018fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher0.hasCalledOnTextChanged()); 1019fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher0.hasCalledAfterTextChanged()); 1020fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledBeforeTextChanged()); 1021fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledOnTextChanged()); 1022fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledAfterTextChanged()); 1023fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1024fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 1025fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 1026fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.removeTextChangedListener(watcher1); 1027fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(null); 1028fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 1029fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 1030fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 1031fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledBeforeTextChanged()); 1032fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledOnTextChanged()); 1033fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledAfterTextChanged()); 1034fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1035fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1036fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetTextKeepState1() { 1037fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1038fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1039fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String longString = "very long content"; 1040fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String shortString = "short"; 1041fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1042fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is inside the short string 1043fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString, BufferType.SPANNABLE); 1044fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 3); 1045fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1046fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1047fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionStart()); 1048fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionEnd()); 1049fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1050fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is outside the short string 1051fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1052fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), shortString.length() + 1); 1053fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1054fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1055fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1056fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1057fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1058fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which is inside the short string 1059fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1060fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1, 4); 1061fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1062fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1063fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getSelectionStart()); 1064fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(4, mTextView.getSelectionEnd()); 1065fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1066fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which ends outside the short string 1067fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1068fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 2, shortString.length() + 1); 1069fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1070fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1071fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, mTextView.getSelectionStart()); 1072fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1073fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1074fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which is outside the short string 1075fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1076fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1077fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su shortString.length() + 1, shortString.length() + 3); 1078fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1079fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1080fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1081fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1082fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1083fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1084fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1085fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetEditableText() { 1086fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1087fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1088fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "Hello"; 1089fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(text, BufferType.EDITABLE); 1090fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, tv.getText().toString()); 1091fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Editable); 1092fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, tv.getEditableText().toString()); 1093fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1094fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(text, BufferType.SPANNABLE); 1095fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, tv.getText().toString()); 1096fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Spannable); 1097fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(tv.getEditableText()); 1098fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1099fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(null, BufferType.EDITABLE); 1100fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 1101fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Editable); 1102fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getEditableText().toString()); 1103fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1104fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(null, BufferType.SPANNABLE); 1105fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 1106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Spannable); 1107fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(tv.getEditableText()); 1108fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1109fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1110fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1111fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText2() { 1112fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String string = "This is a test for setting text content by char array"; 1113fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su char[] input = string.toCharArray(); 1114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1115fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1116fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 0, input.length); 1117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(string, tv.getText().toString()); 1118fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 0, 5); 1120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(string.substring(0, 5), tv.getText().toString()); 1121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1122fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1123fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, -1, input.length); 1124fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if the start position is negative!"); 1125fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IndexOutOfBoundsException exception) { 1126fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1127fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1128fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1129fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 0, -1); 1130fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if the length is negative!"); 1131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IndexOutOfBoundsException exception) { 1132fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1133fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1134fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1135fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 1, input.length); 1136fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if the end position is out of index!"); 1137fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IndexOutOfBoundsException exception) { 1138fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1139fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1140fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 1, 0); 1141fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 1142fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1143fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1144fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1145fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText1() { 1146fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1147fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1148fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String longString = "very long content"; 1149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String shortString = "short"; 1150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is inside the short string 1152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString, BufferType.SPANNABLE); 1153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 3); 1154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1156fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1157fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1158fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionStart()); 1159fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionEnd()); 1160fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1162fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1163fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1164fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1165fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1166fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1167fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1168fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1169fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is outside the short string 1170fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1171fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), longString.length()); 1172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1174fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1175fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1176fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1177fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1178fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1184fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which is inside the short string 1188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1, shortString.length() - 1); 1190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getSelectionStart()); 1195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length() - 1, mTextView.getSelectionEnd()); 1196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1202fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1203fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1204fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1205fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which ends outside the short string 1206fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1207fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 2, longString.length()); 1208fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1209fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1210fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1211fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1212fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, mTextView.getSelectionStart()); 1213fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1214fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1215fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1216fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1217fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1218fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1219fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1220fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1221fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1222fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1223fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which is outside the short string 1224fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1225fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1226fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su shortString.length() + 1, shortString.length() + 3); 1227fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1228fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1229fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1230fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1231fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1232fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1233fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1234fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1235fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1236fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1237fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1239fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1240fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1241fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1242fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1243fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1244fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText3() { 1245fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1246fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1247fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int resId = R.string.text_view_hint; 1248fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String result = mActivity.getResources().getString(resId); 1249fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1250fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(resId); 1251fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(result, tv.getText().toString()); 1252fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1253fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1254fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(-1); 1255fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception with illegal id"); 1256fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NotFoundException e) { 1257fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1258fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1259fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 12605b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void testUndoRedo() { 126128715a6877392e4e63cb2b0170c1592fb50079dcJames Cook initTextViewForTyping(); 12625b51f77b99861d48fec1c327252416f726b3b01aJames Cook 12635b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Type some text. 12645b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.sendStringSync("abc"); 12655b51f77b99861d48fec1c327252416f726b3b01aJames Cook mActivity.runOnUiThread(new Runnable() { 12665b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void run() { 126728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Precondition: The cursor is at the end of the text. 126828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(3, mTextView.getSelectionStart()); 12695b51f77b99861d48fec1c327252416f726b3b01aJames Cook 12705b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Undo removes the typed string in one step. 12715b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 12725b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 127328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(0, mTextView.getSelectionStart()); 12745b51f77b99861d48fec1c327252416f726b3b01aJames Cook 127528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Redo restores the text and cursor position. 12765b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.redo); 12775b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("abc", mTextView.getText().toString()); 127828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(3, mTextView.getSelectionStart()); 12795b51f77b99861d48fec1c327252416f726b3b01aJames Cook 12805b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Undoing the redo clears the text again. 12815b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 12825b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 12835b51f77b99861d48fec1c327252416f726b3b01aJames Cook 12845b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Undo when the undo stack is empty does nothing. 12855b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 12865b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 12875b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 12885b51f77b99861d48fec1c327252416f726b3b01aJames Cook }); 12895b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.waitForIdleSync(); 129028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook } 12915b51f77b99861d48fec1c327252416f726b3b01aJames Cook 129228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook public void testUndoDelete() { 129328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook initTextViewForTyping(); 12945b51f77b99861d48fec1c327252416f726b3b01aJames Cook 129528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Simulate deleting text and undoing it. 129628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mInstrumentation.sendStringSync("xyz"); 129728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook sendKeys(KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DEL); 12985b51f77b99861d48fec1c327252416f726b3b01aJames Cook mActivity.runOnUiThread(new Runnable() { 12995b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void run() { 130028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Precondition: The text was actually deleted. 130128715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals("", mTextView.getText().toString()); 130228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(0, mTextView.getSelectionStart()); 130328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 130428715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Undo restores the typed string and cursor position in one step. 13055b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 130628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals("xyz", mTextView.getText().toString()); 130728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(3, mTextView.getSelectionStart()); 13085b51f77b99861d48fec1c327252416f726b3b01aJames Cook 130928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Redo removes the text in one step. 131028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView.onTextContextMenuItem(android.R.id.redo); 131128715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals("", mTextView.getText().toString()); 131228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(0, mTextView.getSelectionStart()); 13135b51f77b99861d48fec1c327252416f726b3b01aJames Cook 131428715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Undoing the redo restores the text again. 131528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 131628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals("xyz", mTextView.getText().toString()); 131728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(3, mTextView.getSelectionStart()); 131828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 131928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Undoing again undoes the original typing. 13205b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 13215b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 132228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(0, mTextView.getSelectionStart()); 13235b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 13245b51f77b99861d48fec1c327252416f726b3b01aJames Cook }); 13255b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.waitForIdleSync(); 132628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook } 13275b51f77b99861d48fec1c327252416f726b3b01aJames Cook 132828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook public void testUndoSetText() { 1329277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook initTextViewForTyping(); 133028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 1331277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Type some text. This creates an undo entry. 1332277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.sendStringSync("abc"); 1333277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mActivity.runOnUiThread(new Runnable() { 1334277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void run() { 1335277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Calling setText() clears the undo stack, so undo doesn't happen. 1336277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.setText("Hello", BufferType.EDITABLE); 1337277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1338277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("Hello", mTextView.getText().toString()); 133928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 1340277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Clearing text programmatically does not undo either. 1341277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.setText("", BufferType.EDITABLE); 1342277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1343277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("", mTextView.getText().toString()); 1344277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1345277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook }); 1346277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.waitForIdleSync(); 1347277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 134828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 1349277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void testRedoSetText() { 1350277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook initTextViewForTyping(); 1351277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1352277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Type some text. This creates an undo entry. 1353277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.sendStringSync("abc"); 1354277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mActivity.runOnUiThread(new Runnable() { 1355277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void run() { 1356277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Undo the typing to create a redo entry. 1357277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1358277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1359277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Calling setText() clears the redo stack, so redo doesn't happen. 1360277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.setText("Hello", BufferType.EDITABLE); 1361277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.redo); 1362277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("Hello", mTextView.getText().toString()); 1363277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1364277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook }); 1365277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.waitForIdleSync(); 1366277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1367277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1368277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void testUndoDirectAppend() { 1369277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook initTextViewForTyping(); 137028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 1371277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Type some text. 1372277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.sendStringSync("abc"); 1373277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mActivity.runOnUiThread(new Runnable() { 1374277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void run() { 1375277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Programmatically append some text. 1376277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.append("def"); 1377277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("abcdef", mTextView.getText().toString()); 1378277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1379277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Undo removes the append as a separate step. 1380277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1381277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("abc", mTextView.getText().toString()); 1382277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1383277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Another undo removes the original typing. 1384277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1385277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("", mTextView.getText().toString()); 1386277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1387277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook }); 1388277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.waitForIdleSync(); 1389277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1390277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1391277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void testUndoDirectInsert() { 1392277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook initTextViewForTyping(); 1393277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1394277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Type some text. 1395277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.sendStringSync("abc"); 1396277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mActivity.runOnUiThread(new Runnable() { 1397277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void run() { 1398277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Directly modify the underlying Editable to insert some text. 1399277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // NOTE: This is a violation of the API of getText() which specifies that the 1400277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // returned object should not be modified. However, some apps do this anyway and 1401277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // the framework needs to handle it. 1402277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook Editable text = (Editable) mTextView.getText(); 1403277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook text.insert(0, "def"); 1404277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("defabc", mTextView.getText().toString()); 1405277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1406277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Undo removes the insert as a separate step. 1407277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1408277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("abc", mTextView.getText().toString()); 1409277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1410277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Another undo removes the original typing. 1411277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1412277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("", mTextView.getText().toString()); 1413277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1414277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook }); 1415277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.waitForIdleSync(); 1416277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1417277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1418277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void testUndoTextWatcher() { 1419277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook initTextViewForTyping(); 1420277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1421277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Add a TextWatcher that converts the text to spaces on each change. 1422277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.addTextChangedListener(new ConvertToSpacesTextWatcher()); 1423277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1424277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Type some text. 1425277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.sendStringSync("abc"); 1426277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mActivity.runOnUiThread(new Runnable() { 1427277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void run() { 1428277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // TextWatcher altered the text. 1429277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals(" ", mTextView.getText().toString()); 1430277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1431277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Undo reverses both changes in one step. 1432277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1433277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("", mTextView.getText().toString()); 1434277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1435277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook }); 1436277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.waitForIdleSync(); 143728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook } 143828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 143928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook public void testUndoShortcuts() { 144028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook initTextViewForTyping(); 144128715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 144228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Type some text. 144328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mInstrumentation.sendStringSync("abc"); 14445b51f77b99861d48fec1c327252416f726b3b01aJames Cook mActivity.runOnUiThread(new Runnable() { 14455b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void run() { 14465b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Pressing Control-Z triggers undo. 14475b51f77b99861d48fec1c327252416f726b3b01aJames Cook KeyEvent control = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_Z, 0, 14485b51f77b99861d48fec1c327252416f726b3b01aJames Cook KeyEvent.META_CTRL_LEFT_ON); 1449277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertTrue(mTextView.onKeyShortcut(KeyEvent.KEYCODE_Z, control)); 14505b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 14515b51f77b99861d48fec1c327252416f726b3b01aJames Cook 14525b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Pressing Control-Shift-Z triggers redo. 14535b51f77b99861d48fec1c327252416f726b3b01aJames Cook KeyEvent controlShift = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_Z, 14545b51f77b99861d48fec1c327252416f726b3b01aJames Cook 0, KeyEvent.META_CTRL_LEFT_ON | KeyEvent.META_SHIFT_LEFT_ON); 1455277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertTrue(mTextView.onKeyShortcut(KeyEvent.KEYCODE_Z, controlShift)); 145628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals("abc", mTextView.getText().toString()); 14575b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 14585b51f77b99861d48fec1c327252416f726b3b01aJames Cook }); 14595b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.waitForIdleSync(); 14605b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 14615b51f77b99861d48fec1c327252416f726b3b01aJames Cook 14625b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void testUndoSaveInstanceState() { 146328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook initTextViewForTyping(); 14645b51f77b99861d48fec1c327252416f726b3b01aJames Cook 14655b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Type some text to create an undo operation. 14665b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.sendStringSync("abc"); 14675b51f77b99861d48fec1c327252416f726b3b01aJames Cook mActivity.runOnUiThread(new Runnable() { 14685b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void run() { 14695b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Parcel and unparcel the TextView. 14705b51f77b99861d48fec1c327252416f726b3b01aJames Cook Parcelable state = mTextView.onSaveInstanceState(); 14715b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onRestoreInstanceState(state); 14725b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 14735b51f77b99861d48fec1c327252416f726b3b01aJames Cook }); 14745b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.waitForIdleSync(); 14755b51f77b99861d48fec1c327252416f726b3b01aJames Cook 14765b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Delete a character to create a new undo operation. 14775b51f77b99861d48fec1c327252416f726b3b01aJames Cook sendKeys(KeyEvent.KEYCODE_DEL); 14785b51f77b99861d48fec1c327252416f726b3b01aJames Cook mActivity.runOnUiThread(new Runnable() { 14795b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void run() { 14805b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("ab", mTextView.getText().toString()); 14815b51f77b99861d48fec1c327252416f726b3b01aJames Cook 14825b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Undo the delete. 14835b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 14845b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("abc", mTextView.getText().toString()); 14855b51f77b99861d48fec1c327252416f726b3b01aJames Cook 14865b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Undo the typing, which verifies that the original undo operation was parceled 14875b51f77b99861d48fec1c327252416f726b3b01aJames Cook // correctly. 14885b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 14895b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 14905f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook 14915f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // Parcel and unparcel the undo stack (which is empty but has been used and may 14925f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // contain other state). 14935f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook Parcelable state = mTextView.onSaveInstanceState(); 14945f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onRestoreInstanceState(state); 14955f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook } 14965f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook }); 14975f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mInstrumentation.waitForIdleSync(); 14985f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook } 14995f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook 15005f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook public void testUndoSaveInstanceStateEmpty() { 15015f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook initTextViewForTyping(); 15025f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook 15035f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // Type and delete to create two new undo operations. 15045f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mInstrumentation.sendStringSync("a"); 15055f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook sendKeys(KeyEvent.KEYCODE_DEL); 15065f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mActivity.runOnUiThread(new Runnable() { 15075f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook public void run() { 15085f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // Empty the undo stack then parcel and unparcel the TextView. While the undo 15095f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // stack contains no operations it may contain other state. 15105f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 15115f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 15125f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook Parcelable state = mTextView.onSaveInstanceState(); 15135f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onRestoreInstanceState(state); 15145f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook } 15155f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook }); 15165f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mInstrumentation.waitForIdleSync(); 15175f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook 15185f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // Create two more undo operations. 15195f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mInstrumentation.sendStringSync("b"); 15205f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook sendKeys(KeyEvent.KEYCODE_DEL); 15215f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mActivity.runOnUiThread(new Runnable() { 15225f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook public void run() { 15235f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // Verify undo still works. 15245f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 15255f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook assertEquals("b", mTextView.getText().toString()); 15265f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 15275f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook assertEquals("", mTextView.getText().toString()); 15285b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 15295b51f77b99861d48fec1c327252416f726b3b01aJames Cook }); 15305b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.waitForIdleSync(); 15315b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 15325b51f77b99861d48fec1c327252416f726b3b01aJames Cook 1533fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1534fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText() { 1535fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1536fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1537fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int resId = R.string.text_view_hint; 1538fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String result = mActivity.getResources().getString(resId); 1539fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1540fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(resId, BufferType.EDITABLE); 1541fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(result, tv.getText().toString()); 1542fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Editable); 1543fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1544fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(resId, BufferType.SPANNABLE); 1545fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(result, tv.getText().toString()); 1546fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Spannable); 1547fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1548fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1549fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(-1, BufferType.EDITABLE); 1550fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception with illegal id"); 1551fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NotFoundException e) { 1552fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1553fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1554fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1555fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1556fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessHint() { 1557fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_hint_linksclickable_freezestext); 1558fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1559fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_linksClickable_freezesText_default); 1560fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getHint()); 1561fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1562fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_blank); 1563fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", mTextView.getHint()); 1564fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1565fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_string); 1566fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getString(R.string.text_view_simple_hint), 1567fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHint()); 1568fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1569fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_resid); 1570fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getString(R.string.text_view_hint), 1571fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHint()); 1572fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1573fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHint("This is hint"); 1574fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("This is hint", mTextView.getHint().toString()); 1575fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1576fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHint(R.string.text_view_hello); 1577fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getString(R.string.text_view_hello), 1578fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHint().toString()); 1579fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1580fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Non-exist resid 1581fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1582fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHint(-1); 1583fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if id is illegal"); 1584fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NotFoundException e) { 1585fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1586fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1587fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1588fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessError() { 1589fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1590fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1591fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 159253b55f734fb3cf52df49a79cf76d410a77fbe8f5Craig Mautner final String errorText = "Oops! There is an error"; 1593fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1594fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1595fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1596fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(null); 1597fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1598fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1599fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1600fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1601fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 16029776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable icon = getDrawable(R.drawable.failed); 1603fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1604fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1605fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(errorText, icon); 1606fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1607fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1608fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1609fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(errorText, mTextView.getError().toString()); 1610fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // can not check whether the drawable is set correctly 1611fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1612fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1613fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1614fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(null, null); 1615fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1616fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1617fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1618fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1619fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1620fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1621fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1622300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setKeyListener(DigitsKeyListener.getInstance("")); 1623fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("", BufferType.EDITABLE); 1624fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(errorText); 1625fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 1626fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1627fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1628fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1629fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1630fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(errorText, mTextView.getError().toString()); 1631fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1632dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("a"); 1633fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // a key event that will not change the TextView's text 1634fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", mTextView.getText().toString()); 1635fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // The icon and error message will not be reset to null 163653b55f734fb3cf52df49a79cf76d410a77fbe8f5Craig Mautner assertEquals(errorText, mTextView.getError().toString()); 1637fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1638300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mActivity.runOnUiThread(new Runnable() { 1639300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu public void run() { 1640300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setKeyListener(DigitsKeyListener.getInstance()); 1641300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setText("", BufferType.EDITABLE); 1642300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setError(errorText); 1643300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.requestFocus(); 1644300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu } 1645300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu }); 1646300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mInstrumentation.waitForIdleSync(); 1647300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu 1648dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("1"); 1649fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // a key event cause changes to the TextView's text 1650fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("1", mTextView.getText().toString()); 1651fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the error message and icon will be cleared. 1652fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1653fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1654fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1655fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessFilters() { 1656fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final InputFilter[] expected = { new InputFilter.AllCaps(), 1657fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new InputFilter.LengthFilter(2) }; 1658fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1659fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final QwertyKeyListener qwertyKeyListener 1660fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su = QwertyKeyListener.getInstance(false, Capitalize.NONE); 1661fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1662fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1663fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1664fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(qwertyKeyListener); 1665fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("", BufferType.EDITABLE); 1666fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFilters(expected); 1667fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 1668fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1669fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1670fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1671fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1672fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(expected, mTextView.getFilters()); 1673fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1674dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("a"); 1675fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text is capitalized by InputFilter.AllCaps 1676fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("A", mTextView.getText().toString()); 1677dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("b"); 1678fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text is capitalized by InputFilter.AllCaps 1679fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("AB", mTextView.getText().toString()); 1680dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("c"); 1681fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 'C' could not be accepted, because there is a length filter. 1682fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("AB", mTextView.getText().toString()); 1683fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1684fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1685fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFilters(null); 1686fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw IllegalArgumentException!"); 1687fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IllegalArgumentException e) { 1688fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1689fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1690fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1691fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetFocusedRect() { 1692fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Rect rc = new Rect(); 1693fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1694fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio // Basic 1695fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1696fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(rc); 1697fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX(), rc.left); 1698fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX() + mTextView.getWidth(), rc.right); 1699fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY(), rc.top); 1700fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY() + mTextView.getHeight(), rc.bottom); 1701fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1702fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio // Single line 1703fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1704fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(rc); 1705fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX(), rc.left); 1706fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX() + mTextView.getWidth(), rc.right); 1707fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY(), rc.top); 1708fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY() + mTextView.getHeight(), rc.bottom); 1709fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1710fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1711fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1712fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelected(true); 1713fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su SpannableString text = new SpannableString(mTextView.getText()); 1714fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection(text, 3, 13); 1715fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 1716fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1717fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1718fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1719fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(rc); 1720fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView.getLayout()); 1721fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien /* Cursor coordinates from getPrimaryHorizontal() may have a fractional 1722fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * component, while the result of getFocusedRect is in int coordinates. 1723fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * It's not practical for these to match exactly, so we compare that the 1724fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * integer components match - there can be a fractional pixel 1725fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * discrepancy, which should be okay for all practical applications. */ 1726fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(3), rc.left); 1727fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(13), rc.right); 1728fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1729fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(0), rc.bottom); 1730fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1731fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mActivity.runOnUiThread(new Runnable() { 1732fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio public void run() { 1733fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setSelected(true); 1734fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio SpannableString text = new SpannableString(mTextView.getText()); 1735fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Selection.setSelection(text, 13, 3); 1736fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setText(text); 1737fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio } 1738fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio }); 1739fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mInstrumentation.waitForIdleSync(); 1740fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1741fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertNotNull(mTextView.getLayout()); 1742fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(3) - 2, rc.left); 1743fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(3) + 2, rc.right); 1744fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1745fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(0), rc.bottom); 1746fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1747fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio // Multi lines 1748fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView = findTextView(R.id.textview_text_two_lines); 1749fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1750fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollX(), rc.left); 1751fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollX() + mTextView.getWidth(), rc.right); 1752fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollY(), rc.top); 1753fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollY() + mTextView.getHeight(), rc.bottom); 1754fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1755fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mActivity.runOnUiThread(new Runnable() { 1756fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio public void run() { 1757fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setSelected(true); 1758fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio SpannableString text = new SpannableString(mTextView.getText()); 1759fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Selection.setSelection(text, 2, 4); 1760fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setText(text); 1761fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio } 1762fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio }); 1763fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mInstrumentation.waitForIdleSync(); 1764fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1765fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertNotNull(mTextView.getLayout()); 1766fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(2), rc.left); 1767fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(4), rc.right); 1768fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1769fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(0), rc.bottom); 1770fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1771fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mActivity.runOnUiThread(new Runnable() { 1772fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio public void run() { 1773fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setSelected(true); 1774fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio SpannableString text = new SpannableString(mTextView.getText()); 1775fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Selection.setSelection(text, 2, 10); // cross the "\n" and two lines 1776fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setText(text); 1777fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio } 1778fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio }); 1779fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mInstrumentation.waitForIdleSync(); 1780fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1781fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Path path = new Path(); 1782fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getLayout().getSelectionPath(2, 10, path); 1783fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio RectF rcf = new RectF(); 1784fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio path.computeBounds(rcf, true); 1785fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertNotNull(mTextView.getLayout()); 1786fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(rcf.left - 1, (float) rc.left); 1787fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(rcf.right + 1, (float) rc.right); 1788fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1789fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(1), rc.bottom); 1790fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1791fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Exception 1792fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1793fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(null); 1794fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw NullPointerException!"); 1795fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 1796fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1797fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1798fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1799fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLineCount() { 1800fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1801fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // this is an one line text with default setting. 1802fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 1803fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1804fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make it multi-lines 1805fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxWidth(mTextView.getWidth() / 3); 1806fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(1 < mTextView.getLineCount()); 1807fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1808fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make it to an one line 1809fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxWidth(Integer.MAX_VALUE); 1810fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 1811fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1812fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set min lines don't effect the lines count for actual text. 1813fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinLines(12); 1814fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 1815fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1816fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1817fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the internal Layout has not been built. 1818fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getLayout()); 1819fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getLineCount()); 1820fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1821fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1822fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLineBounds() { 1823fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Rect rc = new Rect(); 1824fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1825fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getLineBounds(0, null)); 1826fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1827fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getLineBounds(0, rc)); 1828fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.left); 1829fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.right); 1830fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.top); 1831fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.bottom); 1832fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1833fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1834fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getBaseline(), mTextView.getLineBounds(0, null)); 1835fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1836fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getBaseline(), mTextView.getLineBounds(0, rc)); 1837fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.left); 1838fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getWidth(), rc.right); 1839fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.top); 1840fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getHeight(), rc.bottom); 1841fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1842fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1843fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1844fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(1, 2, 3, 4); 1845fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 1846fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1847fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1848fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1849fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getBaseline(), mTextView.getLineBounds(0, rc)); 1850fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getTotalPaddingLeft(), rc.left); 1851fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getWidth() - mTextView.getTotalPaddingRight(), rc.right); 1852fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getTotalPaddingTop(), rc.top); 1853fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getHeight() - mTextView.getTotalPaddingBottom(), rc.bottom); 1854fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1855fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1856fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetBaseLine() { 1857fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1858fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getBaseline()); 1859fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1860fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1861fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getLayout().getLineBaseline(0), mTextView.getBaseline()); 1862fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1863fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1864fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1865fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(1, 2, 3, 4); 1866fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 1867fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1868fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1869fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1870fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int expected = mTextView.getTotalPaddingTop() + mTextView.getLayout().getLineBaseline(0); 1871fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, mTextView.getBaseline()); 1872fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1873fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1874fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testPressKey() { 187528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook initTextViewForTyping(); 1876fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1877dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("a"); 1878fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("a", mTextView.getText().toString()); 1879dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("b"); 1880fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("ab", mTextView.getText().toString()); 1881fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys(KeyEvent.KEYCODE_DEL); 1882fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("a", mTextView.getText().toString()); 1883fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1884fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1885fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetIncludeFontPadding() { 1886fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1887fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1888fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1889fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(mTextView.getWidth() / 3); 1890fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(1, 2, 3, 4); 1891fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 1892fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1893fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1894fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1895fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1896fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int oldHeight = mTextView.getHeight(); 1897fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1898fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1899fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setIncludeFontPadding(false); 1900fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1901fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1902fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1903fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1904fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getHeight() < oldHeight); 1905fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1906fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1907fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testScroll() { 1908fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1909fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1910fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollX()); 1911fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollY()); 1912fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1913fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //don't set the Scroller, nothing changed. 1914fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.computeScroll(); 1915fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollX()); 1916fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollY()); 1917fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1918fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //set the Scroller 1919fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Scroller s = new Scroller(mActivity); 1920fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(s); 1921fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su s.startScroll(0, 0, 320, 480, 0); 1922fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su s.abortAnimation(); 1923fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su s.forceFinished(false); 1924fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setScroller(s); 1925fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1926fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.computeScroll(); 1927fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(320, mTextView.getScrollX()); 1928fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(480, mTextView.getScrollY()); 1929fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1930fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1931fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testDebug() { 1932fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1933fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.debug(0); 1934fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1935fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Hello!"); 1936fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(mTextView); 1937fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.debug(1); 1938fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1939fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1940fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSelection() { 1941fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1942fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "This is the content"; 1943fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.SPANNABLE); 1944fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.hasSelection()); 1945fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1946fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.selectAll((Spannable) mTextView.getText()); 1947fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 1948fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text.length(), mTextView.getSelectionEnd()); 1949fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.hasSelection()); 1950fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1951fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int selectionStart = 5; 1952fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int selectionEnd = 7; 1953fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), selectionStart); 1954fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, mTextView.getSelectionStart()); 1955fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, mTextView.getSelectionEnd()); 1956fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.hasSelection()); 1957fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1958fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), selectionStart, selectionEnd); 1959fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, mTextView.getSelectionStart()); 1960fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, mTextView.getSelectionEnd()); 1961fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.hasSelection()); 1962fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1963fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1964fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1965fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessEllipsize() { 1966fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_ellipsize); 1967fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1968fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_default); 1969fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getEllipsize()); 1970fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1971fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_none); 1972fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getEllipsize()); 1973fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1974fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_start); 1975fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TruncateAt.START, mTextView.getEllipsize()); 1976fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1977fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_middle); 1978fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TruncateAt.MIDDLE, mTextView.getEllipsize()); 1979fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1980fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_end); 1981fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TruncateAt.END, mTextView.getEllipsize()); 1982fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1983fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.START); 1984fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.START, mTextView.getEllipsize()); 1985fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1986fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.MIDDLE); 1987fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.MIDDLE, mTextView.getEllipsize()); 1988fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1989fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.END); 1990fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.END, mTextView.getEllipsize()); 1991fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1992fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(null); 1993fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getEllipsize()); 1994fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1995fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(10); 1996fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.START); 1997fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("ThisIsAVeryLongVeryLongVeryLongVeryLongVeryLongWord"); 1998fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.invalidate(); 1999fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2000fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.START, mTextView.getEllipsize()); 2001fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no method to check if '...yLongVeryLongWord' is painted in the screen. 2002fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2003fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2004fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetCursorVisible() { 2005fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2006fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2007fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCursorVisible(true); 2008fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCursorVisible(false); 2009fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2010fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2011fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnWindowFocusChanged() { 2012fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2013fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2014fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2015fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnTouchEvent() { 2016fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2017fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2018fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2019fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnTrackballEvent() { 2020fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2021fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2022fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2023fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTextColors() { 2024fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // TODO: How to get a suitable TypedArray to test this method. 2025fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2026fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2027fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnKeyShortcut() { 2028fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2029fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2030fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2031fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2032fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testPerformLongClick() { 2033fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2034fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("This is content"); 2035fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnLongClickListener onLongClickListener = new MockOnLongClickListener(true); 2036fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnCreateContextMenuListener onCreateContextMenuListener 2037fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su = new MockOnCreateContextMenuListener(false); 2038fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnLongClickListener(onLongClickListener); 2039fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnCreateContextMenuListener(onCreateContextMenuListener); 2040fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.performLongClick()); 2041fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onLongClickListener.hasLongClicked()); 2042fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(onCreateContextMenuListener.hasCreatedContextMenu()); 2043fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2044fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su onLongClickListener = new MockOnLongClickListener(false); 2045fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnLongClickListener(onLongClickListener); 2046fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnCreateContextMenuListener(onCreateContextMenuListener); 2047fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.performLongClick()); 2048fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onLongClickListener.hasLongClicked()); 2049fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onCreateContextMenuListener.hasCreatedContextMenu()); 2050fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2051fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnLongClickListener(null); 2052fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su onCreateContextMenuListener = new MockOnCreateContextMenuListener(true); 2053fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnCreateContextMenuListener(onCreateContextMenuListener); 2054fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.performLongClick()); 2055fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onCreateContextMenuListener.hasCreatedContextMenu()); 2056fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2057fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2058fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2059fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testTextAttr() { 2060fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_textAttr); 2061fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getText 2062fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getString(R.string.text_view_hello), mTextView.getText().toString()); 2063fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2064fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getCurrentTextColor 2065fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.black), 2066fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentTextColor()); 2067fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.red), 2068fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentHintTextColor()); 2069fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.red), 2070fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHintTextColors().getDefaultColor()); 2071fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.blue), 2072fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getLinkTextColors().getDefaultColor()); 2073fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2074fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getTextScaleX 2075fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1.2f, mTextView.getTextScaleX(), 0.01f); 2076fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2077fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // setTextScaleX 2078fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextScaleX(2.4f); 2079fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2.4f, mTextView.getTextScaleX(), 0.01f); 2080fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2081fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextScaleX(0f); 2082fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0f, mTextView.getTextScaleX(), 0.01f); 2083fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2084fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextScaleX(- 2.4f); 2085fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(- 2.4f, mTextView.getTextScaleX(), 0.01f); 2086fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2087fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getTextSize 2088fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(20f, mTextView.getTextSize(), 0.01f); 2089fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2090fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getTypeface 2091119351956fc53fdd61bfbfb0d1ab43857cf7a6d7Peter Eliasson // getTypeface will be null if android:typeface is set to normal, 2092c02a9f453c5c1255d668bbd8970f4585ab5ff494Alan Viverette // and android:style is not set or is set to normal, and 2093c02a9f453c5c1255d668bbd8970f4585ab5ff494Alan Viverette // android:fontFamily is not set 2094fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getTypeface()); 2095fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2096fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(Typeface.DEFAULT); 2097fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(Typeface.DEFAULT, mTextView.getTypeface()); 2098fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // null type face 2099fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(null); 2100fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getTypeface()); 2101fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2102fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // default type face, bold style, note: the type face will be changed 2103fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // after call set method 2104fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(Typeface.DEFAULT, Typeface.BOLD); 2105fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(Typeface.BOLD, mTextView.getTypeface().getStyle()); 2106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2107fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // null type face, BOLD style 2108fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(null, Typeface.BOLD); 2109fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(Typeface.BOLD, mTextView.getTypeface().getStyle()); 2110fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2111fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // old type face, null style 2112fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(Typeface.DEFAULT, 0); 2113fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Typeface.NORMAL, mTextView.getTypeface().getStyle()); 2114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2115fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2116fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAppend() { 2118fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 1: check the original length, should be blank as initialised. 2121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getText().length()); 2122fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2123fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 2: append a string use append(CharSquence) into the original blank 2124fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // buffer, check the content. And upgrading it to BufferType.EDITABLE if it was 2125fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // not already editable. 2126fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getText() instanceof Editable); 2127fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append."); 2128fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("Append.", mTextView.getText().toString()); 2129fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 2130fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 3: append a string from 0~3. 2132fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", 0, 3); 2133fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("Append.App", mTextView.getText().toString()); 2134fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 2135fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2136fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 4: append a string from 0~0, nothing will be append as expected. 2137fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", 0, 0); 2138fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("Append.App", mTextView.getText().toString()); 2139fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 2140fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2141fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 5: append a string from -3~3. check the wrong left edge. 2142fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 2143fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", -3, 3); 2144fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw StringIndexOutOfBoundsException"); 2145fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (StringIndexOutOfBoundsException e) { 2146fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2147fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2148fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 6: append a string from 3~10. check the wrong right edge. 2149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 2150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", 3, 10); 2151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw StringIndexOutOfBoundsException"); 2152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (StringIndexOutOfBoundsException e) { 2153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 7: append a null string. 2156fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 2157fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append(null); 2158fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw NullPointerException"); 2159fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 2160fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2162fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2163fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessTransformationMethod() { 2164fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check the password attribute in xml 2165fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_password); 2166fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView); 2167fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(PasswordTransformationMethod.getInstance(), 2168fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTransformationMethod()); 2169fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2170fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check the singleLine attribute in xml 2171fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_singleLine); 2172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView); 2173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(SingleLineTransformationMethod.getInstance(), 2174fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTransformationMethod()); 2175fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2176fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final QwertyKeyListener qwertyKeyListener = QwertyKeyListener.getInstance(false, 2177fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Capitalize.NONE); 2178fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final TransformationMethod method = PasswordTransformationMethod.getInstance(); 2179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change transformation method by function 2180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(qwertyKeyListener); 2183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTransformationMethod(method); 218422d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root mTransformedText = method.getTransformation(mTextView.getText(), mTextView); 2185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 2187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(PasswordTransformationMethod.getInstance(), 2191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTransformationMethod()); 2192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys("H E 2*L O"); 2194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append(" "); 2197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // it will get transformed after a while 22020162547f44173f0604d8a80143c128d9892460a1Kristian Monsen new PollingCheck(TIMEOUT) { 2203fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 2204fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected boolean check() { 2205fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // "******" 220622d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root return mTransformedText.toString() 220722d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root .equals("\u2022\u2022\u2022\u2022\u2022\u2022"); 2208fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2209fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }.run(); 2210fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2211fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set null 2212fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2213fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2214fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTransformationMethod(null); 2215fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2216fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2217fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2218fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getTransformationMethod()); 2219fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2220fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2221fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2222fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testCompound() { 2223fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2224fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int padding = 3; 2225fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Drawable[] drawables = mTextView.getCompoundDrawables(); 2226fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[0]); 2227fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[1]); 2228fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[2]); 2229fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 2230fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2231fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test setCompoundDrawablePadding and getCompoundDrawablePadding 2232fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawablePadding(padding); 2233fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(padding, mTextView.getCompoundDrawablePadding()); 2234fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2235fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using resid, 0 represents null 2236fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.start, R.drawable.pass, 2237fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su R.drawable.failed, 0); 2238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su drawables = mTextView.getCompoundDrawables(); 2239fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2240fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableLeft 2241fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su WidgetTestUtils.assertEquals(getBitmap(R.drawable.start), 2242fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ((BitmapDrawable) drawables[0]).getBitmap()); 2243fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableTop 2244fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su WidgetTestUtils.assertEquals(getBitmap(R.drawable.pass), 2245fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ((BitmapDrawable) drawables[1]).getBitmap()); 2246fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableRight 2247fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su WidgetTestUtils.assertEquals(getBitmap(R.drawable.failed), 2248fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ((BitmapDrawable) drawables[2]).getBitmap()); 2249fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableBottom 2250fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 2251fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 22529776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable left = getDrawable(R.drawable.blue); 22539776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable right = getDrawable(R.drawable.yellow); 22549776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable top = getDrawable(R.drawable.red); 2255fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2256fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using drawables directly 2257fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawablesWithIntrinsicBounds(left, top, right, null); 2258fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su drawables = mTextView.getCompoundDrawables(); 2259fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2260fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableLeft 2261fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(left, drawables[0]); 2262fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableTop 2263fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(top, drawables[1]); 2264fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableRight 2265fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(right, drawables[2]); 2266fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableBottom 2267fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 2268fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2269fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check compound padding 2270fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingLeft() + padding + left.getIntrinsicWidth(), 2271fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingLeft()); 2272fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingTop() + padding + top.getIntrinsicHeight(), 2273fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingTop()); 2274fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingRight() + padding + right.getIntrinsicWidth(), 2275fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingRight()); 2276fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingBottom(), mTextView.getCompoundPaddingBottom()); 2277fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2278fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set bounds to drawables and set them again. 2279fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su left.setBounds(0, 0, 1, 2); 2280fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su right.setBounds(0, 0, 3, 4); 2281fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su top.setBounds(0, 0, 5, 6); 2282fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // usinf drawables 2283fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(left, top, right, null); 2284fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su drawables = mTextView.getCompoundDrawables(); 2285fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2286fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableLeft 2287fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(left, drawables[0]); 2288fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableTop 2289fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(top, drawables[1]); 2290fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableRight 2291fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(right, drawables[2]); 2292fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableBottom 2293fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 2294fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2295fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check compound padding 2296fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingLeft() + padding + left.getBounds().width(), 2297fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingLeft()); 2298fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingTop() + padding + top.getBounds().height(), 2299fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingTop()); 2300fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingRight() + padding + right.getBounds().width(), 2301fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingRight()); 2302fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingBottom(), mTextView.getCompoundPaddingBottom()); 2303fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2304fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2305fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSingleLine() { 2306013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu final TextView textView = new TextView(mActivity); 2307013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu setSpannableText(textView, "This is a really long sentence" 2308013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu + " which can not be placed in one line on the screen."); 2309013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu 2310013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu // Narrow layout assures that the text will get wrapped. 2311013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu FrameLayout innerLayout = new FrameLayout(mActivity); 2312013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu innerLayout.setLayoutParams(new ViewGroup.LayoutParams(100, 100)); 2313013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu innerLayout.addView(textView); 2314013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu 2315013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu final FrameLayout layout = new FrameLayout(mActivity); 2316013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu layout.addView(innerLayout); 2317013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu 2318013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu mActivity.runOnUiThread(new Runnable() { 2319013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu public void run() { 2320013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu mActivity.setContentView(layout); 2321013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.setSingleLine(true); 2322013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu } 2323013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu }); 2324013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu mInstrumentation.waitForIdleSync(); 2325fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2326fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(SingleLineTransformationMethod.getInstance(), 2327013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.getTransformationMethod()); 2328da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu 2329da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu int singleLineWidth = 0; 2330da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu int singleLineHeight = 0; 2331da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu 2332da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu if (textView.getLayout() != null) { 2333da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu singleLineWidth = textView.getLayout().getWidth(); 2334da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu singleLineHeight = textView.getLayout().getHeight(); 2335da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu } 2336fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2337fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2338fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2339013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.setSingleLine(false); 2340fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2341fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2342fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2343013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu assertEquals(null, textView.getTransformationMethod()); 2344da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu 2345da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu if (textView.getLayout() != null) { 2346da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu assertTrue(textView.getLayout().getHeight() > singleLineHeight); 2347da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu assertTrue(textView.getLayout().getWidth() < singleLineWidth); 2348da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu } 2349fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2350fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // same behaviours as setSingLine(true) 2351fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2352fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2353013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.setSingleLine(); 2354fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2355fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2356fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2357fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(SingleLineTransformationMethod.getInstance(), 2358013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.getTransformationMethod()); 2359da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu 2360da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu if (textView.getLayout() != null) { 2361da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu assertEquals(singleLineHeight, textView.getLayout().getHeight()); 2362da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu assertEquals(singleLineWidth, textView.getLayout().getWidth()); 2363da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu } 2364fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2365fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2366fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2367fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMaxLines() { 2368fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2369fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2370fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float[] widths = new float[LONG_TEXT.length()]; 2371fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getPaint().getTextWidths(LONG_TEXT, widths); 2372fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float totalWidth = 0.0f; 2373fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su for (float f : widths) { 2374fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su totalWidth += f; 2375fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2376fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int stringWidth = (int) totalWidth; 2377fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(stringWidth >> 2); 2378fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(LONG_TEXT); 2379fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2380fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int maxLines = 2; 2381fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineCount() > maxLines); 2382fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2383fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxLines(maxLines); 2384fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestLayout(); 2385fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2386fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getHeight() <= maxLines * mTextView.getLineHeight()); 2387fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2388fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2389fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2390fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMaxLinesException() { 239172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 239272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mActivity.setContentView(mTextView); 2393fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(mTextView.getWidth() >> 3); 239472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setMaxLines(-1); 2395fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2396fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2397fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMinLines() { 2398fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2399fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 3); 2400fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalHeight = mTextView.getHeight(); 2401fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalLines = mTextView.getLineCount(); 2402fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2403fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinLines(originalLines - 1); 2404fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines - 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2405fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2406fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinLines(originalLines + 1); 2407fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines + 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2408fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2409fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2410fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetLines() { 2411fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2412fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make it multiple lines 2413fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 3); 2414fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalLines = mTextView.getLineCount(); 2415fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2416fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(originalLines - 1); 2417fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines - 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2418fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2419fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(originalLines + 1); 2420fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines + 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2421fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2422fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2423fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2424fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetLinesException() { 242572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 242672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mActivity.setContentView(mTextView); 242772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setWidth(mTextView.getWidth() >> 3); 242872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setLines(-1); 2429fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2430fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2431fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2432fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetExtendedPaddingTop() { 2433fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2434fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2435fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getExtendedPaddingTop()); 2436fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2437fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 24389776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable top = getDrawable(R.drawable.red); 2439fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su top.setBounds(0, 0, 100, 10); 2440fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, top, null, null); 2441fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingTop(), mTextView.getExtendedPaddingTop()); 2442fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2443fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2444fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2445fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 2446fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2447fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getExtendedPaddingTop() > 0); 2448fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2449fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2450fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2451fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetExtendedPaddingBottom() { 2452fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2453fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2454fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getExtendedPaddingBottom()); 2455fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2456fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 24579776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable bottom = getDrawable(R.drawable.red); 2458fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su bottom.setBounds(0, 0, 100, 10); 2459fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, null, null, bottom); 2460fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingBottom(), mTextView.getExtendedPaddingBottom()); 2461fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2462fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2463fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2464fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER_VERTICAL); 2465fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2466fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getExtendedPaddingBottom() > 0); 2467fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2468fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2469fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingTop() { 2470fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2471fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2472fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingTop()); 2473fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2474fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 24759776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable top = getDrawable(R.drawable.red); 2476fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su top.setBounds(0, 0, 100, 10); 2477fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2478fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2479fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, top, null, null); 2480fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2481fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 2482fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2483fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2484fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2485fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getExtendedPaddingTop(), mTextView.getTotalPaddingTop()); 2486fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2487fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2488fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(mTextView.getLineCount() + 1); 2489fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int expected = mTextView.getHeight() 2490fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getExtendedPaddingBottom() 2491fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getLayout().getLineTop(mTextView.getLineCount()); 2492fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, mTextView.getTotalPaddingTop()); 2493fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2494fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2495fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingBottom() { 2496fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2497fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2498fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingBottom()); 2499fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2500fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 25019776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable bottom = getDrawable(R.drawable.red); 2502fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su bottom.setBounds(0, 0, 100, 10); 2503fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2504fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2505fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, null, null, bottom); 2506fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2507fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER_VERTICAL); 2508fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2509fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2510fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2511fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getExtendedPaddingBottom(), mTextView.getTotalPaddingBottom()); 2512fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2513fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2514fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(mTextView.getLineCount() + 1); 2515fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int expected = ((mTextView.getHeight() 2516fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getExtendedPaddingBottom() 2517fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getExtendedPaddingTop() 2518fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getLayout().getLineBottom(mTextView.getLineCount())) >> 1) 2519fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + mTextView.getExtendedPaddingBottom(); 2520fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, mTextView.getTotalPaddingBottom()); 2521fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2522fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2523fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2524fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingLeft() { 2525fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2526fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2527fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingLeft()); 2528fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2529fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 25309776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable left = getDrawable(R.drawable.red); 2531fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su left.setBounds(0, 0, 10, 100); 2532fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(left, null, null, null); 2533fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.RIGHT); 2534fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingLeft(), mTextView.getTotalPaddingLeft()); 2535fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2536fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change width 2537fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(Integer.MAX_VALUE); 2538fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingLeft(), mTextView.getTotalPaddingLeft()); 2539fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2540fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2541fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2542fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingRight() { 2543fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2544fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2545fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingRight()); 2546fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2547fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 25489776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable right = getDrawable(R.drawable.red); 2549fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su right.setBounds(0, 0, 10, 100); 2550fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, null, right, null); 2551fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER_HORIZONTAL); 2552fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingRight(), mTextView.getTotalPaddingRight()); 2553fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2554fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change width 2555fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(Integer.MAX_VALUE); 2556fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingRight(), mTextView.getTotalPaddingRight()); 2557fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2558fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2559fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetUrls() { 2560fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2561fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2562fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su URLSpan[] spans = mTextView.getUrls(); 2563fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, spans.length); 2564fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2565fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String url = "http://www.google.com"; 2566fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String email = "name@gmail.com"; 2567fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String string = url + " mailto:" + email; 2568fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su SpannableString spannable = new SpannableString(string); 2569fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spannable.setSpan(new URLSpan(url), 0, url.length(), 0); 2570fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(spannable, BufferType.SPANNABLE); 2571fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = mTextView.getUrls(); 2572fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, spans.length); 2573fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(url, spans[0].getURL()); 2574fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2575fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spannable.setSpan(new URLSpan(email), 0, email.length(), 0); 2576fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(spannable, BufferType.SPANNABLE); 2577fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2578fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = mTextView.getUrls(); 2579fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, spans.length); 2580fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(url, spans[0].getURL()); 2581fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(email, spans[1].getURL()); 2582fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2583fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test the situation that param what is not a URLSpan 2584fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spannable.setSpan(new Object(), 0, 9, 0); 2585fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(spannable, BufferType.SPANNABLE); 2586fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = mTextView.getUrls(); 2587fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, spans.length); 2588fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2589fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2590fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetPadding() { 2591fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2592fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2593fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(0, 1, 2, 4); 2594fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getPaddingLeft()); 2595fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getPaddingTop()); 2596fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, mTextView.getPaddingRight()); 2597fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(4, mTextView.getPaddingBottom()); 2598fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2599fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(10, 20, 30, 40); 2600fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(10, mTextView.getPaddingLeft()); 2601fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(20, mTextView.getPaddingTop()); 2602fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(30, mTextView.getPaddingRight()); 2603fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(40, mTextView.getPaddingBottom()); 2604fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2605fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2606fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetTextAppearance() { 2607fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2608fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2609fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_All); 2610fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.black), 2611fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentTextColor()); 2612fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(20f, mTextView.getTextSize(), 0.01f); 2613fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Typeface.BOLD, mTextView.getTypeface().getStyle()); 2614fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.red), 2615fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentHintTextColor()); 2616fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.blue), 2617fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getLinkTextColors().getDefaultColor()); 2618fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2619fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_Colors); 2620fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.black), 2621fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentTextColor()); 2622fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.blue), 2623fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentHintTextColor()); 2624fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.yellow), 2625fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getLinkTextColors().getDefaultColor()); 2626fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2627fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_NotColors); 2628fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(17f, mTextView.getTextSize(), 0.01f); 2629fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Typeface.NORMAL, mTextView.getTypeface().getStyle()); 2630fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2631fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_Style); 2632fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(null, mTextView.getTypeface()); 2633fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2634fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2635fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnPreDraw() { 2636fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2637fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2638fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2639fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetHorizontallyScrolling() { 2640fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make the text view has more than one line 2641fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2642fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 1); 2643fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineCount() > 1); 2644fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2645fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHorizontallyScrolling(true); 2646fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 2647fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2648fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHorizontallyScrolling(false); 2649fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineCount() > 1); 2650fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2651fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2652fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testComputeHorizontalScrollRange() { 2653fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2654fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test when layout is null 2655fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getLayout()); 2656fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getWidth(), textView.computeHorizontalScrollRange()); 2657fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2658fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setFrame(0, 0, 40, 50); 2659fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getWidth(), textView.computeHorizontalScrollRange()); 2660fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2661fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set the layout 2662fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(textView); 2663fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getLayout().getWidth(), textView.computeHorizontalScrollRange()); 2664fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2665fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2666fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testComputeVerticalScrollRange() { 2667fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2668fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test when layout is null 2669fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getLayout()); 2670fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.computeVerticalScrollRange()); 2671fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2672fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setFrame(0, 0, 40, 50); 2673fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getHeight(), textView.computeVerticalScrollRange()); 2674fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2675fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //set the layout 2676fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(textView); 2677fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getLayout().getHeight(), textView.computeVerticalScrollRange()); 2678fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2679fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2680fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testDrawableStateChanged() { 2681fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2682fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2683fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.reset(); 2684fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.refreshDrawableState(); 2685fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.hasCalledDrawableStateChanged()); 2686fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2687fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2688fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetDefaultEditable() { 2689fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2690fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2691fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //the TextView#getDefaultEditable() does nothing, and always return false. 2692fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(textView.getDefaultEditable()); 2693fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2694fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2695fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetDefaultMovementMethod() { 2696fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2697fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2698fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //the TextView#getDefaultMovementMethod() does nothing, and always return null. 2699fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getDefaultMovementMethod()); 2700fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2701fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2702fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnCreateContextMenu() { 2703fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2704fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2705fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2706fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnDetachedFromWindow() { 2707fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2708fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2709fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2710fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnDraw() { 2711fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2712fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2713fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2714fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnFocusChanged() { 2715fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2716fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2717fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2718fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnMeasure() { 2719fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2720fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2721fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2722fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnTextChanged() { 2723fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2724fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2725fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2726fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetFrame() { 2727fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2728fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2729fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //Assign a new size to this view 2730fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.setFrame(0, 0, 320, 480)); 2731fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getFrameLeft()); 2732fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getFrameTop()); 2733fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(320, textView.getFrameRight()); 2734fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(480, textView.getFrameBottom()); 2735fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2736fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //Assign a same size to this view 2737fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(textView.setFrame(0, 0, 320, 480)); 2738fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2739fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //negative input 2740fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.setFrame(-1, -1, -1, -1)); 2741fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameLeft()); 2742fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameTop()); 2743fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameRight()); 2744fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameBottom()); 2745fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2746fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2747fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetFadingEdgeStrength() { 274841f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio final MockTextView textViewLeft = (MockTextView) mActivity.findViewById( 274941f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio R.id.mock_textview_left); 2750fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2751fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 275241f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio textViewLeft.setEllipsize(null); 2753fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2754fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2755fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2756fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2757fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on right side if the text aligns left 275841f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(0.0f, textViewLeft.getLeftFadingEdgeStrength(), 0.01f); 275941f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewLeft.getRightFadingEdgeStrength(), 0.01f); 2760fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 276141f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio final MockTextView textViewRight = (MockTextView) mActivity.findViewById( 276241f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio R.id.mock_textview_right); 2763fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2764fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 276541f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio textViewRight.setEllipsize(null); 2766fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2767fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2768fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2769fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on left side if the text aligns right 277041f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewRight.getLeftFadingEdgeStrength(), 0.01f); 277141f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(0.0f, textViewRight.getRightFadingEdgeStrength(), 0.01f); 2772fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 277341f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio final MockTextView textViewCenter = (MockTextView) mActivity.findViewById( 277441f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio R.id.mock_textview_center); 2775fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2776fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 277741f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio textViewCenter.setEllipsize(null); 2778fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2779fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2780fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2781fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on both sides if the text aligns center 278241f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewCenter.getLeftFadingEdgeStrength(), 0.01f); 278341f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewCenter.getRightFadingEdgeStrength(), 0.01f); 2784fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2785fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2786bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu 2787fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testMarquee() { 2788fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final MockTextView textView = new MockTextView(mActivity); 2789fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(LONG_TEXT); 2790fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSingleLine(); 2791fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setEllipsize(TruncateAt.MARQUEE); 2792bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu textView.setLayoutParams(new ViewGroup.LayoutParams(100, 100)); 2793bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu 2794bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu final FrameLayout layout = new FrameLayout(mActivity); 2795bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu layout.addView(textView); 2796bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu 2797fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make the fading to be shown 2798fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setHorizontalFadingEdgeEnabled(true); 2799fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2800fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2801fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2802bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu mActivity.setContentView(layout); 2803fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2804fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2805fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2806fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2807fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TestSelectedRunnable runnable = new TestSelectedRunnable(textView) { 2808fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2809fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setMarqueeRepeatLimit(-1); 2810fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // force the marquee to start 2811fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected1(); 2812fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSelected(true); 2813fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected2(); 2814fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2815fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }; 2816fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(runnable); 2817fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2818fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // wait for the marquee to run 2819fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on both sides if the marquee runs for a while 28200162547f44173f0604d8a80143c128d9892460a1Kristian Monsen new PollingCheck(TIMEOUT) { 2821fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 2822fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected boolean check() { 2823fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return textView.getLeftFadingEdgeStrength() > 0.0f 2824fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su && textView.getRightFadingEdgeStrength() > 0.0f; 2825fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2826fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }.run(); 2827fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 282872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach final float leftFadingEdgeStrength = textView.getLeftFadingEdgeStrength(); 282972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach final float rightFadingEdgeStrength = textView.getRightFadingEdgeStrength(); 283072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 2831fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // wait for the marquee to continue 2832fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the left fading becomes thicker while the right fading becomes thiner 2833fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // as the text moves towards left 28340162547f44173f0604d8a80143c128d9892460a1Kristian Monsen new PollingCheck(TIMEOUT) { 2835fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 2836fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected boolean check() { 2837fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return leftFadingEdgeStrength < textView.getLeftFadingEdgeStrength() 2838fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su && rightFadingEdgeStrength > textView.getRightFadingEdgeStrength(); 2839fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2840fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }.run(); 2841fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(runnable.getIsSelected1()); 2842fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(runnable.getIsSelected2()); 2843fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2844fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su runnable = new TestSelectedRunnable(textView) { 2845fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2846fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setMarqueeRepeatLimit(0); 2847fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // force the marquee to stop 2848fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected1(); 2849fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSelected(false); 2850fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected2(); 2851fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setGravity(Gravity.LEFT); 2852fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2853fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }; 2854fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // force the marquee to stop 2855fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(runnable); 2856fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2857fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(runnable.getIsSelected1()); 2858fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(runnable.getIsSelected2()); 2859fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0.0f, textView.getLeftFadingEdgeStrength(), 0.01f); 2860fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getRightFadingEdgeStrength() > 0.0f); 2861fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2862fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2863fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2864fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setGravity(Gravity.RIGHT); 2865fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2866fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2867fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2868fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getLeftFadingEdgeStrength() > 0.0f); 2869fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0.0f, textView.getRightFadingEdgeStrength(), 0.01f); 2870fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2871fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2872fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2873fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setGravity(Gravity.CENTER_HORIZONTAL); 2874fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2875fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2876fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2877fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no left fading (Is it correct?) 2878fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0.0f, textView.getLeftFadingEdgeStrength(), 0.01f); 2879fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getRightFadingEdgeStrength() > 0.0f); 2880fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2881fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2882fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnKeyMultiple() { 2883fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2884fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2885fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2886fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessInputExtras() throws XmlPullParserException, IOException { 2887fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView textView = new TextView(mActivity); 2888fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(null, BufferType.EDITABLE); 2889fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT); 2890fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2891fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // do not create the extras 2892fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getInputExtras(false)); 2893fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2894fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // create if it does not exist 2895fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Bundle inputExtras = textView.getInputExtras(true); 2896fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(inputExtras); 2897fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(inputExtras.isEmpty()); 2898fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2899fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // it is created already 2900fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(textView.getInputExtras(false)); 2901fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2902fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 2903fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputExtras(R.xml.input_extras); 2904fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw NullPointerException!"); 2905fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 2906fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2907fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2908fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2909fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessContentType() { 2910fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView textView = new TextView(mActivity); 2911fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(null, BufferType.EDITABLE); 2912fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setKeyListener(null); 2913fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setTransformationMethod(null); 2914fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2915fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_DATETIME 2916fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL); 2917fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2918fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL, textView.getInputType()); 2919fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof DateTimeKeyListener); 2920fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2921fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_DATETIME 2922fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE); 2923fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2924fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE, textView.getInputType()); 2925fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof DateKeyListener); 2926fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2927fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_DATETIME 2928fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME); 2929fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2930fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME, textView.getInputType()); 2931fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof TimeKeyListener); 2932fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2933fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_NUMBER 2934fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 2935fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED); 2936fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_NUMBER 2937fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 2938fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED, textView.getInputType()); 2939fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), DigitsKeyListener.getInstance(true, true)); 2940fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2941fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_PHONE); 2942fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_PHONE, textView.getInputType()); 2943fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof DialerKeyListener); 2944fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2945fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 2946fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); 2947fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2948fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT, textView.getInputType()); 2949fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), TextKeyListener.getInstance(true, Capitalize.NONE)); 2950fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2951fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSingleLine(); 2952fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 2953fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 2954fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 2955fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); 2956fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2957fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 2958fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS, textView.getInputType()); 2959fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), 2960fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextKeyListener.getInstance(false, Capitalize.CHARACTERS)); 2961fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 2962fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2963fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 2964fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 2965fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2966fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS, textView.getInputType()); 2967fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), 2968fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextKeyListener.getInstance(false, Capitalize.WORDS)); 2969fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 2970fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2971fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 2972fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); 2973fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2974fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES, textView.getInputType()); 2975fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), 2976fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextKeyListener.getInstance(false, Capitalize.SENTENCES)); 2977fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2978fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_NULL); 2979fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_NULL, textView.getInputType()); 2980fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof TextKeyListener); 2981fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2982fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2983fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessRawContentType() { 2984fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView textView = new TextView(mActivity); 2985fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(null, BufferType.EDITABLE); 2986fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setKeyListener(null); 2987fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setTransformationMethod(null); 2988fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2989fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_DATETIME 2990fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL); 2991fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2992fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL, textView.getInputType()); 2993fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 2994fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2995fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2996fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_DATETIME 2997fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE); 2998fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2999fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE, textView.getInputType()); 3000fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3001fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3002fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3003fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_DATETIME 3004fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME); 3005fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 3006fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME, textView.getInputType()); 3007fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3008fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3009fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3010fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_NUMBER 3011fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 3012fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED); 3013fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_NUMBER 3014fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 3015fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED, textView.getInputType()); 3016fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3017fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3018fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3019fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_PHONE); 3020fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_PHONE, textView.getInputType()); 3021fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3022fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3023fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3024fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 3025fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); 3026fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3027fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT, textView.getInputType()); 3028fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3029fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3030fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3031fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSingleLine(); 3032fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3033fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 3034fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 3035fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); 3036fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3037fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 3038fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS, textView.getInputType()); 3039fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3040fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3041fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3042fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 3043fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 3044fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3045fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS, textView.getInputType()); 3046fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3047fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3048fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3049fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 3050fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); 3051fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3052fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES, textView.getInputType()); 3053fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3054fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3055fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3056fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_NULL); 3057fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3058fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3059fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3060fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3061fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnPrivateIMECommand() { 3062fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 3063fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3064fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 306572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testFoo() { 306672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // Do not test. Implementation details. 306772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 306872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 306972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testVerifyDrawable() { 307072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach MockTextView textView = new MockTextView(mActivity); 307172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 30729776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable d = getDrawable(R.drawable.pass); 307372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(textView.verifyDrawable(d)); 307472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 307572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach textView.setCompoundDrawables(null, d, null, null); 307672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(textView.verifyDrawable(d)); 307772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 307872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 307972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testAccessPrivateImeOptions() { 308072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 308172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertNull(mTextView.getPrivateImeOptions()); 308272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 308372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setPrivateImeOptions("com.example.myapp.SpecialMode=3"); 308472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals("com.example.myapp.SpecialMode=3", mTextView.getPrivateImeOptions()); 308572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 308672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setPrivateImeOptions(null); 308772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertNull(mTextView.getPrivateImeOptions()); 308872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 308972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 309072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testSetOnEditorActionListener() { 309172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 309272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 309372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach MockOnEditorActionListener listener = new MockOnEditorActionListener(); 309472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(listener.isOnEditorActionCalled()); 309572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 309672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setOnEditorActionListener(listener); 309772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(listener.isOnEditorActionCalled()); 309872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 309972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.onEditorAction(EditorInfo.IME_ACTION_DONE); 310072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(listener.isOnEditorActionCalled()); 310172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 310272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 310372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testAccessImeOptions() { 310472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 310572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_NULL, mTextView.getImeOptions()); 310672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 310772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeOptions(EditorInfo.IME_ACTION_GO); 310872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_ACTION_GO, mTextView.getImeOptions()); 310972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 311072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeOptions(EditorInfo.IME_ACTION_DONE); 311172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_ACTION_DONE, mTextView.getImeOptions()); 311272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 311372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeOptions(EditorInfo.IME_NULL); 311472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_NULL, mTextView.getImeOptions()); 311572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 311672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 311772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testAccessImeActionLabel() { 311872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 311972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertNull(mTextView.getImeActionLabel()); 312072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, mTextView.getImeActionId()); 312172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 312272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeActionLabel("pinyin", 1); 312372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals("pinyin", mTextView.getImeActionLabel().toString()); 312472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(1, mTextView.getImeActionId()); 312572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 312672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 3127c873101a88e7ba584065de5e912508237378ca99Victoria Lease public void testSetTextLong() { 3128f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader mActivity.runOnUiThread(new Runnable() { 3129f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader public void run() { 3130f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader final int MAX_COUNT = 1 << 21; 3131f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader char[] longText = new char[MAX_COUNT]; 3132f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader for (int n = 0; n < MAX_COUNT; n++) { 3133f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader longText[n] = 'm'; 3134f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader } 3135f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader mTextView = findTextView(R.id.textview_text); 3136f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader mTextView.setText(new String(longText)); 3137f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader } 3138f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader }); 3139f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader mInstrumentation.waitForIdleSync(); 3140c873101a88e7ba584065de5e912508237378ca99Victoria Lease } 3141c873101a88e7ba584065de5e912508237378ca99Victoria Lease 3142c873101a88e7ba584065de5e912508237378ca99Victoria Lease @UiThreadTest 314372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testSetExtractedText() { 314472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 314572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(mActivity.getResources().getString(R.string.text_view_hello), 314672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.getText().toString()); 314772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 314872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach ExtractedText et = new ExtractedText(); 314972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach et.text = "test"; 315072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 315172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setExtractedText(et); 315272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals("test", mTextView.getText().toString()); 315372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 315472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 315572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testMoveCursorToVisibleOffset() throws Throwable { 315672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 315772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 315872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // not a spannable text 315972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 316072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 316172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.moveCursorToVisibleOffset()); 316272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 316372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 316472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 316572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 316672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // a selection range 316772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach final String spannableText = "text"; 316872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 316972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 317072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 317172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 317272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setText(spannableText, BufferType.SPANNABLE); 317372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 317472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 317572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 317672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach Selection.setSelection((Spannable) mTextView.getText(), 0, spannableText.length()); 317772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 317872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, mTextView.getSelectionStart()); 317972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(spannableText.length(), mTextView.getSelectionEnd()); 318072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 318172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 318272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.moveCursorToVisibleOffset()); 318372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 318472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 318572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 318672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 318772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // a spannable without range 318872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 318972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 319072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 319172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setText(spannableText, BufferType.SPANNABLE); 319272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 319372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 319472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 319572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 319672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 319772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 319872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.moveCursorToVisibleOffset()); 319972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 320072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 320172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 320272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 320372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 3204afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu public void testIsInputMethodTarget() throws Throwable { 320572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 320672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.isInputMethodTarget()); 320772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 320872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.isFocused()); 3209afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu runTestOnUiThread(new Runnable() { 3210afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu @Override 3211afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu public void run() { 3212afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu mTextView.setFocusable(true); 3213afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu mTextView.requestFocus(); 3214afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu } 3215afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu }); 3216afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu mInstrumentation.waitForIdleSync(); 3217afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu assertTrue(mTextView.isFocused()); 321804d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu 321904d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu new PollingCheck() { 322004d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu @Override 322104d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu protected boolean check() { 322204d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu return mTextView.isInputMethodTarget(); 322304d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu } 322404d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu }.run(); 322572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 322672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 322772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testBeginEndBatchEdit() { 322872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 322972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 323072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.beginBatchEdit(); 323172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.endBatchEdit(); 323272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 323372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 323472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach @UiThreadTest 323572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testBringPointIntoView() throws Throwable { 323672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 323772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.bringPointIntoView(1)); 323872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 323972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.layout(0, 0, 100, 100); 324072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.bringPointIntoView(2)); 324172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 324272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 324372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testCancelLongPress() { 324472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 324572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach TouchUtils.longClickView(this, mTextView); 324672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.cancelLongPress(); 324772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 324872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 324972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach @UiThreadTest 325072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testClearComposingText() { 325172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 325272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setText("Hello world!", BufferType.SPANNABLE); 325372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach Spannable text = (Spannable) mTextView.getText(); 325472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 325572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 325672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 325772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 325872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach BaseInputConnection.setComposingSpans((Spannable) mTextView.getText()); 325972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, BaseInputConnection.getComposingSpanStart(text)); 326072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, BaseInputConnection.getComposingSpanStart(text)); 326172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 326272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.clearComposingText(); 326372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 326472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 326572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 326672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 326772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testComputeVerticalScrollExtent() { 326872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach MockTextView textView = new MockTextView(mActivity); 326972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, textView.computeVerticalScrollExtent()); 327072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 32719776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable d = getDrawable(R.drawable.pass); 327272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach textView.setCompoundDrawables(null, d, null, d); 327372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 327472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, textView.computeVerticalScrollExtent()); 327572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 327672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 327772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach @UiThreadTest 327872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testDidTouchFocusSelect() { 3279c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne mTextView = new EditText(mActivity); 328072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.didTouchFocusSelect()); 328172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 328272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setFocusable(true); 328372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.requestFocus(); 328472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.didTouchFocusSelect()); 328572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 328672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 328772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testExtractText() { 328872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 328972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 329072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach ExtractedTextRequest request = new ExtractedTextRequest(); 329172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach ExtractedText outText = new ExtractedText(); 329272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 329372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.token = 0; 329472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.flags = 10; 329572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.hintMaxLines = 2; 329672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.hintMaxChars = 20; 329772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.extractText(request, outText)); 329872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 329972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 330072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.extractText(request, outText)); 330172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 330272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(mActivity.getResources().getString(R.string.text_view_hello), 330372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach outText.text.toString()); 330472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 330572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 330694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 330794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testTextDirectionDefault() { 3308c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 33092a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_INHERIT, tv.getRawTextDirection()); 331094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 331194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 331294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 331394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testSetGetTextDirection() { 3314c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 331594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 331694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 33172a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getRawTextDirection()); 331894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 331994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 33202a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getRawTextDirection()); 332194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 332294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 33232a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_INHERIT, tv.getRawTextDirection()); 332494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 332594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 33262a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getRawTextDirection()); 332794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 332894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 33292a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getRawTextDirection()); 333094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 333194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 33322a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getRawTextDirection()); 333394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 333494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 333594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 333694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionLtr() { 3337c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 333894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("this is a test"); 333994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 33402a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 334194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 334294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 33432a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 334494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 334594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 33462a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 334794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 334894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 33492a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 335094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 335194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 33522a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 335394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 335494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 33552a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 335694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 335794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 33582a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 335994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 336094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 336194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 336294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionLtrWithInheritance() { 3363c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne LinearLayout ll = new LinearLayout(mActivity); 336494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 336594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3366c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 336794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("this is a test"); 336894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.addView(tv); 336994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 337094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 33712a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 337294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 337394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 33742a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 337594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 337694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 33772a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 337894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 337994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 33802a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 338194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 338294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 33832a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 338494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 338594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 33862a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 338794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 338894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 338994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 339094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionRtl() { 3391c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 339294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("\u05DD\u05DE"); // hebrew 339394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 33942a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 339594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 339694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 33972a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 339894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 339994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 34002a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 340194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 340294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 34032a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 340494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 340594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 34062a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 340794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 340894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 34092a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 341094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 341194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 34122a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 341394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 341494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 341594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 341694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionRtlWithInheritance() { 3417c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne LinearLayout ll = new LinearLayout(mActivity); 341894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 341994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3420c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 342194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("\u05DD\u05DE"); // hebrew 342294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.addView(tv); 342394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 342494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 34252a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 342694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 342794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 34282a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 342994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 343094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 34312a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 343294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 343394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 34342a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 343594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 343694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 34372a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 343894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 343994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 34402a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 344194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 344294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio // Force to RTL text direction on the layout 344394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_RTL); 344494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 344594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 34462a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 344794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 344894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 34492a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 345094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 345194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 34522a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 345394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 345494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 34552a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 345694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 345794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 34582a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 345994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 346094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 34612a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 346294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 346394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 346494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 346594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testResetTextDirection() { 3466c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne LinearLayout ll = (LinearLayout) mActivity.findViewById(R.id.layout_textviewtest); 3467c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = (TextView) mActivity.findViewById(R.id.textview_rtl); 346894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 346994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_RTL); 347094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 34712a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 347294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3473f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio // No reset when we remove the view 347494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.removeView(tv); 3475f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 3476f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio 3477f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio // Reset is done when we add the view 3478f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio ll.addView(tv); 34792a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 348094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 348194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3482dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3483dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testTextAlignmentDefault() { 3484dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 34857fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getRawTextAlignment()); 3486dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // resolved default text alignment is GRAVITY 34877fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3488dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3489dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3490dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3491dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testSetGetTextAlignment() { 3492dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 3493dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3494dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); 34957fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getRawTextAlignment()); 3496dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3497dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 34987fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getRawTextAlignment()); 3499dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3500dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 35017fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_START, tv.getRawTextAlignment()); 3502dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3503dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 35047fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_END, tv.getRawTextAlignment()); 3505dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3506dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 35077fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_START, tv.getRawTextAlignment()); 3508dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3509dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 35107fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_END, tv.getRawTextAlignment()); 3511dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3512dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3513dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3514dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testGetResolvedTextAlignment() { 3515dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 3516dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 35177fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3518dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3519757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio // Test center alignment first so that we dont hit the default case 3520dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 35217fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3522dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3523757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio // Test the default case too 3524757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); 3525757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3526757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio 3527dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 35287fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_START, tv.getTextAlignment()); 3529dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3530dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 35317fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_END, tv.getTextAlignment()); 3532dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3533dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 35347fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_START, tv.getTextAlignment()); 3535dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3536dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 35377fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_END, tv.getTextAlignment()); 3538dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3539dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3540dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3541dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testGetResolvedTextAlignmentWithInheritance() { 3542dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio LinearLayout ll = new LinearLayout(getActivity()); 3543dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); 3544dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3545dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 3546dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.addView(tv); 3547dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3548dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // check defaults 35497fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getRawTextAlignment()); 3550dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3551dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3552dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // set inherit and check that child is following parent 3553dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_INHERIT); 35547fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_INHERIT, tv.getRawTextAlignment()); 3555dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3556dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 35577fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3558dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3559dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 35607fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_START, tv.getTextAlignment()); 3561dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3562dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 35637fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_END, tv.getTextAlignment()); 3564dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3565dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 35667fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_START, tv.getTextAlignment()); 3567dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3568dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 35697fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_END, tv.getTextAlignment()); 3570dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3571dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // now get rid of the inheritance but still change the parent 3572dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 3573dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3574dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 35757fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3576dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3577dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 35787fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3579dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3580dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 35817fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3582dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3583dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 35847fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3585dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3586dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 35877fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3588dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3589dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3590dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3591dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testResetTextAlignment() { 35924ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luo TextViewCtsActivity activity = getActivity(); 3593dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3594dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio LinearLayout ll = (LinearLayout) activity.findViewById(R.id.layout_textviewtest); 3595dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = (TextView) activity.findViewById(R.id.textview_rtl); 3596dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3597dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 3598dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_INHERIT); 35997fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3600dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 36014f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio // No reset when we remove the view 3602dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.removeView(tv); 36034f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 36044f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio 36054f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio // Reset is done when we add the view 36064f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio // Default text alignment is GRAVITY 36074f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio ll.addView(tv); 36087fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3609dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3610dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3611b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio @UiThreadTest 3612b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio public void testDrawableResolution() { 3613b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int LEFT = 0; 3614b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int TOP = 1; 3615b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int RIGHT = 2; 3616b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int BOTTOM = 3; 3617b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 36184ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luo TextViewCtsActivity activity = getActivity(); 3619b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3620b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 1.1: left / right drawable defined in default LTR mode 3621b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio TextView tv = (TextView) activity.findViewById(R.id.textview_drawable_1_1); 3622b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio Drawable[] drawables = tv.getCompoundDrawables(); 3623b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3624b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3625b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3626b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3627b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3628b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3629b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3630b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3631b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3632b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3633b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 1.2: left / right drawable defined in default RTL mode 3634b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_1_2); 3635b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3636b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3637b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3638b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3639b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3640b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3641b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3642b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3643b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3644b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3645b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3646b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 2.1: start / end drawable defined in LTR mode 3647b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_2_1); 3648b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3649b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3650b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3651b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3652b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3653b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3654b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3655b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3656b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3657b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3658b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3659b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 2.2: start / end drawable defined in RTL mode 3660b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_2_2); 3661b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3662b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3663b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3664b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3665b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3666b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3667b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3668b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3669b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3670b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3671b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3672b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 3.1: left / right / start / end drawable defined in LTR mode 3673b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_1); 3674b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3675b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3676b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3677b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3678b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3679b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3680b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3681b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3682b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3683b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3684b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3685b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 3.2: left / right / start / end drawable defined in RTL mode 3686b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_2); 3687b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3688b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3689b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3690b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3691b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3692b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3693b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3694b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3695b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3696b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3697b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3698b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 4.1: start / end drawable defined in LTR mode inside a layout 3699b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 3700b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_4_1); 3701b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3702b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3703b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3704b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3705b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3706b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3707b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3708b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3709b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3710b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3711b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3712b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 4.2: start / end drawable defined in RTL mode inside a layout 3713b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 3714b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_4_2); 3715b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3716b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3717b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3718b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3719b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3720b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3721b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3722b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3723b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3724b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3725b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3726b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 5.1: left / right / start / end drawable defined in LTR mode inside a layout 3727b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 3728b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_1); 3729b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3730b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3731b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3732b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3733b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3734b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3735b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3736b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3737b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3738b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3739b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3740b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 5.2: left / right / start / end drawable defined in RTL mode inside a layout 3741b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 3742b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_2); 3743b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3744b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3745b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3746b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3747b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3748b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3749b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3750b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3751b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3752b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3753b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio } 3754b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 37559776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio @UiThreadTest 37569776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio public void testDrawableResolution2() { 37579776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int LEFT = 0; 37589776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int TOP = 1; 37599776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int RIGHT = 2; 37609776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int BOTTOM = 3; 37619776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 37624ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luo TextViewCtsActivity activity = getActivity(); 37639776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 37649776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio // Case 1.1: left / right drawable defined in default LTR mode 37659776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio TextView tv = (TextView) activity.findViewById(R.id.textview_drawable_1_1); 37669776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable[] drawables = tv.getCompoundDrawables(); 37679776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 37689776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 37699776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 37709776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 37719776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 37729776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 37739776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 37749776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 37759776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 37769776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 37779776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawables(null, null, getDrawable(R.drawable.icon_yellow), null); 37789776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 37799776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 37809776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[LEFT]); 37819776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 37829776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 37839776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 37849776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 37859776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 37869776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_1_2); 37879776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 37889776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 37899776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 37909776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 37919776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 37929776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 37939776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 37949776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 37959776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 37969776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 37979776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 37989776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawables(getDrawable(R.drawable.icon_yellow), null, null, null); 37999776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 38009776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 38019776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 38029776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 38039776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[RIGHT]); 38049776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 38059776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 38069776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 38079776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_ltr); 38089776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 38099776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 38109776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[LEFT]); 38119776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[RIGHT]); 38129776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 38139776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 38149776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 38159776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawables(getDrawable(R.drawable.icon_blue), null, getDrawable(R.drawable.icon_red), null); 38169776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 38179776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 38189776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 38199776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 38209776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 38219776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 38229776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 38239776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 38249776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 38259776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawablesRelative(getDrawable(R.drawable.icon_yellow), null, null, null); 38269776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 38279776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 38289776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 38299776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 38309776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[RIGHT]); 38319776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 38329776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 38339776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio } 38349776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 383572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach private static class MockOnEditorActionListener implements OnEditorActionListener { 383672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach private boolean isOnEditorActionCalled; 383772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 383872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 383972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach isOnEditorActionCalled = true; 384072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach return true; 384172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 384272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 384372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public boolean isOnEditorActionCalled() { 384472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach return isOnEditorActionCalled; 384572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 384672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 384772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 3848fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void layout(final TextView textView) { 3849fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3850fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3851fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(textView); 3852fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3853fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3854fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3855fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3856fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3857fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void layout(final int layoutId) { 3858fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3859fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3860fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(layoutId); 3861fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3862fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3863fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3864fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3865fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3866fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView findTextView(int id) { 3867fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return (TextView) mActivity.findViewById(id); 3868fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3869fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3870fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private int getAutoLinkMask(int id) { 3871fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return findTextView(id).getAutoLinkMask(); 3872fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3873fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3874fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Bitmap getBitmap(int resid) { 38759776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio return ((BitmapDrawable) getDrawable(resid)).getBitmap(); 38769776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio } 38779776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 38789776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio private Drawable getDrawable(int resid) { 38799776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio return mActivity.getResources().getDrawable(resid); 3880fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3881fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3882fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMaxWidth(final int pixels) { 3883fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3884fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3885fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxWidth(pixels); 3886fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3887fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3888fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3889fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3890fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3891fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinWidth(final int pixels) { 3892fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3893fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3894fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinWidth(pixels); 3895fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3896fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3897fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3898fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3899fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3900fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMaxHeight(final int pixels) { 3901fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3902fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3903fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxHeight(pixels); 3904fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3905fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3906fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3907fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3908fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3909fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinHeight(final int pixels) { 3910fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3911fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3912fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinHeight(pixels); 3913fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3914fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3915fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3916fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3917fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3918fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinLines(final int minlines) { 3919fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3920fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3921fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinLines(minlines); 3922fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3923fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3924fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3925fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3926fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3927fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su /** 3928fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * Convenience for {@link TextView#setText(CharSequence, BufferType)}. And 3929fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * the buffer type is fixed to SPANNABLE. 3930fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 3931fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @param tv the text view 3932fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @param content the content 3933fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 3934fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setSpannableText(final TextView tv, final String content) { 3935fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3936fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3937fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(content, BufferType.SPANNABLE); 3938fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3939fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3940fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3941fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3942fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3943fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setLines(final int lines) { 3944fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3945fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3946fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(lines); 3947fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3948fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3949fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3950fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3951fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3952fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setHorizontallyScrolling(final boolean whether) { 3953fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3954fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3955fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHorizontallyScrolling(whether); 3956fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3957fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3958fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3959fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3960fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3961fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setWidth(final int pixels) { 3962fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3963fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3964fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(pixels); 3965fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3966fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3967fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3968fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3969fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3970fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setHeight(final int pixels) { 3971fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3972fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3973fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHeight(pixels); 3974fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3975fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3976fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3977fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3978fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3979fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinEms(final int ems) { 3980fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3981fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3982fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinEms(ems); 3983fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3984fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3985fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3986fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3987fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3988fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMaxEms(final int ems) { 3989fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3990fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3991fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxEms(ems); 3992fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3993fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3994fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3995fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3996fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3997fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setEms(final int ems) { 3998fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3999fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4000fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEms(ems); 4001fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4002fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4003fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4004fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4005fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4006fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setLineSpacing(final float add, final float mult) { 4007fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4008fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4009fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLineSpacing(add, mult); 4010fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4011fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4012fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4013fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4014fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4015fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static abstract class TestSelectedRunnable implements Runnable { 4016fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView mTextView; 4017fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mIsSelected1; 4018fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mIsSelected2; 4019fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4020fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public TestSelectedRunnable(TextView textview) { 4021fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = textview; 4022fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4023fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4024fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean getIsSelected1() { 4025fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mIsSelected1; 4026fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4027fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4028fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean getIsSelected2() { 4029fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mIsSelected2; 4030fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4031fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4032fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void saveIsSelected1() { 4033fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mIsSelected1 = mTextView.isSelected(); 4034fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4035fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4036fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void saveIsSelected2() { 4037fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mIsSelected2 = mTextView.isSelected(); 4038fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4039fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4040fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4041fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static abstract class TestLayoutRunnable implements Runnable { 4042fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView mTextView; 4043fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Layout mLayout; 4044fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4045fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public TestLayoutRunnable(TextView textview) { 4046fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = textview; 4047fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4048fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4049fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public Layout getLayout() { 4050fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mLayout; 4051fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4052fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4053fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void saveLayout() { 4054fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mLayout = mTextView.getLayout(); 4055fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4056fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4057fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4058fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private class MockEditableFactory extends Editable.Factory { 4059fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mhasCalledNewEditable; 4060fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private CharSequence mSource; 4061fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4062fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledNewEditable() { 4063fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mhasCalledNewEditable; 4064fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4065fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4066fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset() { 4067fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mhasCalledNewEditable = false; 4068fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = null; 4069fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4070fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4071fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public CharSequence getSource() { 4072fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mSource; 4073fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4074fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4075fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 4076fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public Editable newEditable(CharSequence source) { 4077fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mhasCalledNewEditable = true; 4078fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = source; 4079fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return super.newEditable(source); 4080fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4081fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4082fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4083fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private class MockSpannableFactory extends Spannable.Factory { 4084fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCalledNewSpannable; 4085fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private CharSequence mSource; 4086fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4087e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne public boolean hasCalledNewSpannable() { 4088fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCalledNewSpannable; 4089fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4090fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4091fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset() { 4092fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledNewSpannable = false; 4093fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = null; 4094fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4095fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4096fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public CharSequence getSource() { 4097fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mSource; 4098fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4099fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4100fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 4101fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public Spannable newSpannable(CharSequence source) { 4102fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledNewSpannable = true; 4103fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = source; 4104fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return super.newSpannable(source); 4105fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4107fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4108fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static class MockTextWatcher implements TextWatcher { 4109fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCalledAfterTextChanged; 4110fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCalledBeforeTextChanged; 4111fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasOnTextChanged; 4112fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4113fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset(){ 4114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledAfterTextChanged = false; 4115fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledBeforeTextChanged = false; 4116fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasOnTextChanged = false; 4117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4118fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledAfterTextChanged() { 4120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCalledAfterTextChanged; 4121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4122fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4123fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledBeforeTextChanged() { 4124fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCalledBeforeTextChanged; 4125fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4126fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4127fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledOnTextChanged() { 4128fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasOnTextChanged; 4129fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4130fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void afterTextChanged(Editable s) { 4132fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledAfterTextChanged = true; 4133fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4134fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4135fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void beforeTextChanged(CharSequence s, int start, int count, int after) { 4136fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledBeforeTextChanged = true; 4137fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4138fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4139fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void onTextChanged(CharSequence s, int start, int before, int count) { 4140fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasOnTextChanged = true; 4141fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4142fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4143fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4144fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su /** 4145fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * The listener interface for receiving mockOnLongClick events. The class 4146fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * that is interested in processing a mockOnLongClick event implements this 4147fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * interface, and the object created with that class is registered with a 4148fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * component using the component's 4149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * <code>addMockOnLongClickListener<code> method. When 4150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * the mockOnLongClick event occurs, that object's appropriate 4151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * method is invoked. 4152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 4153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @see MockOnLongClickEvent 4154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 4155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static class MockOnLongClickListener implements OnLongClickListener { 4156fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mExpectedOnLongClickResult; 4157fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasLongClicked; 4158fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4159fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnLongClickListener(boolean result) { 4160fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mExpectedOnLongClickResult = result; 4161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4162fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4163fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasLongClicked() { 4164fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasLongClicked; 4165fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4166fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4167fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean onLongClick(View v) { 4168fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasLongClicked = true; 4169fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mExpectedOnLongClickResult; 4170fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4171fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su /** 4174fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * The listener interface for receiving mockOnCreateContextMenu events. The 4175fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * class that is interested in processing a mockOnCreateContextMenu event 4176fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * implements this interface, and the object created with that class is 4177fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * registered with a component using the component's 4178fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * <code>addMockOnCreateContextMenuListener<code> method. When the 4179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * mockOnCreateContextMenu event occurs, that object's appropriate method is 4180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * invoked. 4181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 4182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @see MockOnCreateContextMenuEvent 4183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 4184fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static class MockOnCreateContextMenuListener implements OnCreateContextMenuListener { 4185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mIsMenuItemsBlank; 4186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCreatedContextMenu; 4187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnCreateContextMenuListener(boolean isBlank) { 4189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su this.mIsMenuItemsBlank = isBlank; 4190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCreatedContextMenu() { 4193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCreatedContextMenu; 4194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset() { 4197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCreatedContextMenu = false; 4198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 4201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCreatedContextMenu = true; 4202fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su if (!mIsMenuItemsBlank) { 4203fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su menu.add("menu item"); 4204fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4205fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4206fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4207277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 4208277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook /** 4209277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook * A TextWatcher that converts the text to spaces whenever the text changes. 4210277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook */ 4211277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook private static class ConvertToSpacesTextWatcher implements TextWatcher { 4212277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook boolean mChangingText; 4213277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 4214277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook @Override 4215277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void beforeTextChanged(CharSequence s, int start, int count, int after) { 4216277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4217277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 4218277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook @Override 4219277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void onTextChanged(CharSequence s, int start, int before, int count) { 4220277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4221277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 4222277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook @Override 4223277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void afterTextChanged(Editable s) { 4224277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Avoid infinite recursion. 4225277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook if (mChangingText) { 4226277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook return; 4227277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4228277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mChangingText = true; 4229277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Create a string of s.length() spaces. 4230277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook StringBuilder builder = new StringBuilder(s.length()); 4231277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook for (int i = 0; i < s.length(); i++) { 4232277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook builder.append(' '); 4233277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4234277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook s.replace(0, s.length(), builder.toString()); 4235277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mChangingText = false; 4236277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4237277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su} 4239